共享库与微服务?

时间:2019-07-28 11:52:29

标签: java microservices

我有两个微服务(ms)ms1和ms2。在这两个ms中,都有重复的可重用代码(例如散列/安全相关/ orm / etc)。仅供参考 代码有时也可以在数据库中维护某些状态(如果有可能的话)

有两种方法,我可以继续进行

  1. 要么将可重用代码提取为单独的库,然后在两个ms中都包含
  2. 为此可重用代码创建单独的ms,并将其公开为其余端点

如果我采用方法2,则好处是在发生任何更改时,我只需要重新部署ms3。如果采用方法1,则需要重新部署两个ms。在同一时间 时间方法2将需要单独的维护/资源/监控。

在系统设计方面,考虑到硬件资源不是挑战,哪种方法更理想。我刚刚提到了两个微服务,但是在某些情况下 有超过两个毫秒的重复代码。

我不确定什么标准可以帮助我决定选择共享库还是微服务?

更新:-

下面的博客让我很清楚,但仍然有疑问。会考虑并在需要时发布新问题。

https://blog.staticvoid.co.nz/2017/library_vs_microservice/

https://dzone.com/articles/dilemma-on-utility-module-making-a-jar-or-separate-2

1 个答案:

答案 0 :(得分:2)

微服务只是建筑风格之一。在某些情况下,它比其他样式更好,在某些情况下,它更糟。如果您不使用微服务,那并不意味着您的架构不好。

如果您仍然希望拥有微服务,那么这些方法(共享库与作为新的“微服务”的库)都不适合。

我建议考虑以下内容。

  1. 微服务方法并不意味着每个端点都应该封装到单独的微服务中。通常,一个微服务会提供几个不同的端点。如果是这种情况,则将您的两个服务放入一个单一的微服务中,并通过两个不同的端点使其可访问。那么他们两个都共享一些类就很好了。

  2. 微服务通常应具有独立持久层。如果对公共持久层有很强的依赖性,请检查将它们拆分为不同的微服务的原因是什么。他们真的在不同业务域上工作吗?可以相互独立地开发和部署这些服务吗?如果没有,那么可能没有理由将它们放入不同的微服务中,而将它们放入单个微服务中可能更好。如果他们共享一些课程,那就很好了。

  3. 一个好的微服务应该为某些领域提供功能。如果将共享代码放在单独的微服务中,则可能是共享的“微服务”不为域提供任何功能,而仅仅是实用程序的包装。那不是微服务。

  4. 如果您有充分的理由将服务分为两个不同的微服务,请复制代码。每个微服务都应与其他微服务保持独立。应该有可能替换数据库并替换一个微服务的任何类别,而不影响另一个微服务。使它们独立的一种正常方法是复制您(当前)认为是共享的类。如果服务在时间上确实是独立的,则重复的代码将更改,并且在每个微服务中都将有所不同。如果必须同时在两个服务中更改此代码,则意味着您的拆分不正确,并且您拥有的不是微服务。