我有一个相对较新的项目,它采用了微服务架构。除了我们的安全服务之外,我对各个服务的大小和粒度感觉非常好。
我有三个主要服务,比如说foo-service
、bar-service
和baz-service
。这些服务从不需要通信,但所有三个服务都会定期通过 HTTP 请求与security-service
. 我希望这停止有多种原因 - 最大的原因是对我的个人服务的每个请求都会产生对安全服务的请求,一旦考虑到负载平衡等,它可能会变成几个额外的跃点。我一直在阅读Mark Richards 的“软件架构模式”,他建议在这些情况下您应该共享数据库并违反 DRY:将所需的功能复制到每个服务中。尽管如此,他还是将这个示例与较小的“实用程序”类一起使用,这可能并不真正适用于这种情况。
安全服务并没有那么大,所以我绝对可以将它复制到其他每个服务中。也就是说,它足够大,以至于复制和粘贴它时我感觉不太好——根据工作服,有 314 行“相关”代码(java 所以有更多实际代码;-)。我可以很容易地把它变成一个模块,每个服务都会引入——但是我的服务有一个共享的依赖关系,这在过去一直困扰着我。当然,随着我们添加身份验证方法,安全代码会随着时间的推移而增长,但在身份验证方面我们并没有重新发明轮子,所以它主要与其他库和身份验证服务集成。也就是说,我不认为这个特定的代码库会变得庞大。
所以我的问题是,我应该复制并粘贴代码还是构建每个服务都引入的模块?谢谢!