微服务:优缺点是啥?

Posted

技术标签:

【中文标题】微服务:优缺点是啥?【英文标题】:Microservices: what are pros and cons?微服务:优缺点是什么? 【发布时间】:2016-04-26 12:13:13 【问题描述】:

与其他架构相比,使用微服务的优缺点是什么? 何时应使用微服务是否有经验法则?

【问题讨论】:

【参考方案1】:

优点


Building Microservices 中的 Sam Newman 列举了以下微服务的主要优势:

技术异构

对于由多个协作服务组成的系统,我们可以决定使用不同的服务 每个内部的技术。这使我们能够为每项工作选择正确的工具,而不是 不得不选择一种更标准化、一刀切的方法,而这种方法通常最终会成为 最小公分母。

弹性

弹性工程中的一个关键概念是隔板。如果系统的一个组件 失败,但该失败不会级联,您可以隔离问题和其余部分 系统可以继续工作。服务边界成为您明显的隔板。在一个 单体服务,如果服务失败,一切都停止工作。带有单片机 系统,我们可以在多台机器上运行以减少失败的机会,但是 微服务,我们可以构建系统来处理服务的完全故障并降级 相应的功能。

缩放

对于大型的单体服务,我们必须一起扩展所有内容。一小部分 我们的整个系统在性能上受到限制,但如果该行为被锁定在一个 巨大的单体应用程序,我们必须将所有东西都作为一个整体来处理。和 较小的服务,我们可以扩展那些需要扩展的服务,允许我们运行 系统的其他部分在更小、功能更弱的硬件上。

易于部署

对百万行长的单体应用程序进行一行更改需要整个 要部署的应用程序以发布更改。这可能是一个巨大的影响, 高风险部署。在实践中,影响大、风险高的部署最终会发生 很少因为可以理解的恐惧。

使用微服务,我们可以对单个服务进行更改并独立部署 系统的其余部分。这使我们能够更快地部署我们的代码。如果有问题 发生时,它可以快速隔离到单个服务,使快速回滚变得容易 达到。

组织调整

微服务使我们能够更好地使我们的架构与我们的组织保持一致,从而帮助我们 最大限度地减少在任何一个代码库上工作的人数,以达到团队的最佳状态 规模和生产力。我们还可以在团队之间转移服务的所有权,以尽量保持 从事一项服务的人在同一地点工作。

可组合性

分布式系统和面向服务架构的主要承诺之一是 我们为重用功能开辟了机会。通过微服务,我们允许我们的 为不同目的以不同方式使用的功能。这可以是 当我们考虑消费者如何使用我们的软件时,这一点尤其重要。

可替换性优化

如果您在中型或大型组织工作,您可能知道一些 大而讨厌的遗留系统坐在角落里。没人愿意碰的那个。那个 对您公司的运营方式至关重要,但这恰好是用一些奇怪的 Fortran 编写的 变体并且仅在 25 年前达到使用寿命的硬件上运行。为什么没有 被替换了?你知道为什么:这项工作太大而且风险太大。

由于我们的个人服务规模较小,因此用更好的服务替换它们的成本 实施,甚至完全删除它们,更容易管理。

缺点


微服务最重要的缺点是它们具有所有相关的复杂性 分布式系统,虽然我们已经学到了很多关于如何管理分布式系统的知识 系统好它仍然很难。如果你来 从单片系统的角度来看,您必须在处理方面做得更好 部署、测试和监控以释放优势。你会 还需要以不同的方式考虑如何扩展系统并确保它们是 有弹性的。如果出现分布式事务或 CAP 定理之类的问题,也不要感到惊讶 也开始让你头疼了!

结束语


引用Martin Fowler:

我们听到的一个合理的论点是,您不应该从 微服务架构。而是从一个整体开始,保持它 模块化,一旦单体成为一个 问题。

【讨论】:

缺点包括不时出现的神秘问题,但似乎一切正常。您无法复制它们,在应用程序的单个应用程序状态中将包含更多,而在多个服务的分散阶段状态以某种方式对齐会导致错误。您必须长时间观察错误模式 @MuhammadUmer 完全同意。分布式跟踪和监控是此类应用程序的必备条件【参考方案2】:

微服务的优点在于您的应用程序可以很好地扩展。您将应用程序划分为小型服务。决定您需要哪些有界服务是一件困难的事情。但是,一旦您这样做了,您就可以轻松地将特定服务扩展到多倍(实际上负载最多的服务),而无需扩展整个应用程序。

另一个优点是新开发人员更容易开始为您的应用程序创建新功能,因为所有内容都分为这些独立的服务 --> 每个服务都有自己的(小)代码库。

使用微服务最大的缺点当然是不同服务之间的通信失败的可能性较高。

微服务的使用通常只有在您的应用程序变得太大而无法作为单体应用程序维护时才开始获得回报。 尝试从单体开始,但在开发时牢记有限上下文(尽量保持分离),以便以后需要时迁移到微服务。

【讨论】:

【参考方案3】:

优势

1.分散和解耦架构,使用编排而不是编排使服务基于发布-订阅,因此完全分散

2.做一件事并做好(Unix哲学),更加专注和单一,功能非常狭窄

3.易于并行和负载均衡,因为从业务流程的角度来看更细粒度

4.Statelessness 然而,有状态的微服务是有效的,但不是理想的

5.单独的数据存储使服务轻松跟踪数据流

6.由于使用了基于容器引擎的技术(例如 docker),因此易于自动化部署和发现

7.更多的互操作性,使服务能够更灵活地接受/丢弃新的/当前的服务或协议

8.完全兼容Representational state transfer (REST),允许创建无状态服务

9.适用于离散系统,例如批量自动化过程

缺点 1.服务同步,以合作的方式保持服务同步

2.难以发现系统性问题,例如,在流程中出现逻辑错误时,在一系列业务活动中发现问题比较困难,需要将多个日志文件合并为一个文件

3.当微服务数量超过几个时,自动化部署和发现是必须的

4.难以找到合适的服务粒度,这可能导致整个系统由于不堪重负的网络通信和错误配给而陷入不稳定

5.当业务系统不够离散时具有挑战性,例如继续流程控制

6.开发自动化测试比单片系统困难得多

以下是在代码项目中发表的一组关于微服务的文章,如果您愿意,可以阅读和评论您的问题。

https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-Ihttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-IIhttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-III

【讨论】:

以上是关于微服务:优缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构优缺点

微服务理论与实践-微服务架构的基本能力和优缺点

微服务的概念和优缺点《一》

微服务的概念和优缺点《一》

微服务优缺点

在纯 Java 环境中 Web 服务和 RMI 的优缺点是啥?