【问题标题】:How do you determine what should be a microservice?你如何确定什么应该是微服务?
【发布时间】:2018-06-09 23:05:39
【问题描述】:

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

【问题讨论】:

  • 告诉我们你为这个主题读了哪些书。

标签: design-patterns microservices scalability


【解决方案1】:

很抱歉,但对于每一种情况,答案都是视情况而定。作为架构师,您的部分职责是根据您的场景来确定这一点,并且没有真正的规则,只有意见。此外,不会有任何人站在它上面评判你。归根结底,应用程序只需要有用、可扩展、可靠且易于维护。这相当于建造者询问砖块应该是圆形、方形还是矩形。这取决于。如果你把它等同于房子,我们不是在谈论厨房是如何布置的,更像是地下室的管道。在某些时候,没人会在意。

【讨论】:

  • 问题出在well的定义中
【解决方案2】:

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

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

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

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

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

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

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

(2) 商业

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

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

  • 身份验证/授权
  • 用户数据管理
  • 媒体内容管理
  • 消息传递
  • 来电
  • 付款
  • 推送通知服务
  • 大数据平台等

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2016-02-14
    • 2020-09-23
    • 1970-01-01
    • 2020-05-09
    • 2020-09-29
    • 2016-04-26
    • 1970-01-01
    • 2016-04-13
    相关资源
    最近更新 更多