您如何确定什么应该是微服务?

How do you determine what should be a microservice?

如果我正在构建一个遵循微服务架构的可扩展应用程序,您如何决定应用程序的哪些组件应该是它们自己的服务?例如像 facebook 这样的网站,它可以拆分为非常广泛的服务,新闻源、信使、搜索等,或者它可以拆分为每个服务的较小服务。将应用程序拆分为服务以确保可扩展性和效率的正确方法是什么?

抱歉,对于上述每一种情况,答案都是视情况而定。作为架构师,您的部分职责是根据您的场景确定这一点,没有真正的规则,只有意见。此外,不会有人站在它旁边判断你。归根结底,该应用程序只需要有用、可扩展、可靠且易于维护即可。这相当于建筑工人询问砖块应该是圆形、方形还是矩形。这取决于。如果你把它比作房子,我们说的不是厨房是怎么布置的,更像是地下室的管道。总有一天没人会在乎。

分解微服务没有任何硬性规定。这取决于几个因素。根据我的经验,它主要取决于这两个关键因素。

  • 依赖关系的观点
  • 商业观点

让我们重新审视分解微服务的想法。我们希望以这种方式将我们的服务部署为独立的模块,每个模块的可用性都是独立的。所以我们正在努力实现这样的目标,一个服务宕机意味着那个时候只有一个服务不可用。其他可用。

现在,让我们考虑两个因素,我已经提到了。

(1) 依赖项(模型、库、数据库等)

我们举一个简单的场景,只是为了把握思路。想象有一个在线零售商平台。我们有一组独立的(隔离的)数据库表来存储与服装相关的库存数据。并且以这种方式,更难进一步细分(例如:女装、男装等的不同隔离)。

所以在这里,当我们要开发 api 服务时,我们可以决定为服装提供单独的微服务(因为我们为该部分提供了一组独立隔离的表),但不是进一步分解为服装部分(因为不能再将这些桌子分开)。请注意,由于我们有一个单独的服装数据库隔离,该隔离的任何数据库故障都不会影响任何其他服务(反之亦然)。想想如果我们进一步分解服务会发生什么(为女性 clothes/men 衣服等提供单独的微服务)。因为我们有一个共同的数据库隔离,如果那个共同的依赖关系下降,所有的服务都会下降。因为没有可用性,所以再努力突破也没有意义。

(2) 商业

我这里也以上面的例子为例。让我们以客户付款等业务运作为例。因为它是业务的关键部分,所以大多数时候,我们可以推断出我们要为支付做一个单独的微服务。几分钟的客户付款不可用可能会使企业损失数百万美元。所以我们想把它做成一个单独的独立微服务,在部署的时候特别注意。

最后,既然你提到了facebook,我猜他们会把这些微服务分解掉。

  • Authentication/Authorization
  • 用户数据管理
  • 媒体内容管理
  • 消息传递
  • 来电
  • 付款
  • 推送通知服务
  • 大数据平台等