Design patterns 您如何确定什么是微服务?

Design patterns 您如何确定什么是微服务?,design-patterns,microservices,scalability,Design Patterns,Microservices,Scalability,如果我正在构建一个遵循微服务体系结构的可伸缩应用程序,您如何决定应用程序的哪些组件应该是独立的服务?例如,像facebook这样的网站,它可以分为非常广泛的服务、新闻提要、信使、搜索等,也可以分为更小的服务。将应用程序拆分为服务以确保可伸缩性和效率的正确方法是什么 很抱歉,但对于上述每一种情况,答案都是,视情况而定。作为架构师,您的角色之一是根据您的场景确定这一点,没有真正的规则,只有意见。而且,不会有人站在它旁边评判你。最终,应用程序只需要有用、可扩展、可靠且易于维护。这相当于一个建设者询问砖

如果我正在构建一个遵循微服务体系结构的可伸缩应用程序,您如何决定应用程序的哪些组件应该是独立的服务?例如,像facebook这样的网站,它可以分为非常广泛的服务、新闻提要、信使、搜索等,也可以分为更小的服务。将应用程序拆分为服务以确保可伸缩性和效率的正确方法是什么

很抱歉,但对于上述每一种情况,答案都是,视情况而定。作为架构师,您的角色之一是根据您的场景确定这一点,没有真正的规则,只有意见。而且,不会有人站在它旁边评判你。最终,应用程序只需要有用、可扩展、可靠且易于维护。这相当于一个建设者询问砖块应该是圆形、方形还是矩形。视情况而定。如果你把这等同于一栋房子,我们不是在谈论厨房是如何布置的,更像是地下室的管道。在某个时刻,没有人会在意。

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

  • 依赖性观点
  • 商业观点
让我们重温一下分解微服务的想法。我们希望以这样的方式将我们的服务部署为独立的模块,每个模块的可用性都是独立的。因此,我们正在努力实现以下目标:一个服务停止意味着只有一个服务在当时不可用。还有其他的

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

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

让我们做一个简单的场景,只是为了理解这个想法。假设有一个在线零售商平台。在那里,我们有一组独立的(隔离的)db表来存储与服装相关的库存数据。正是在这种情况下,更难进一步分解(例如:对女装、男装等的不同隔离)

因此,在这里,当我们要开发api服务时,我们可以决定为服装提供一个单独的微服务(因为我们有一组独立分离的表用于该部分),但不能进一步细分为服装部分(因为不能再分离这些表)。请注意,由于我们对服装有单独的db隔离,因此该隔离的任何db故障都不会影响任何其他服务(反之亦然)。试想一下,如果我们进一步细分服务(女装/男装单独的微服务等),会发生什么。因为我们对所有人都有一个公共的db隔离,如果公共依赖性下降,所有的服务都会下降。因此,由于无法获得可用性,因此尝试进一步突破毫无意义

(2) 业务

我也将在这里举上面的例子。让我们以客户支付等业务操作为例。由于它是业务的关键部分,大多数情况下,我们可以推断我们将为支付提供单独的微服务。客户付款几分钟不可用,可能会使企业损失数百万美元。因此,我们希望将其作为一个独立的微服务,并在部署时给予特别关注

最后,既然你提到了facebook,我想他们会让这些微服务崩溃

  • 认证/授权
  • 用户数据管理
  • 媒体内容管理
  • 消息传递
  • 召唤
  • 付款
  • 推送通知服务
  • 大数据平台等

告诉我们你读过哪些关于这个主题的书。问题在于井的定义