微服务:优点和缺点是什么?
Microservices: what are pros and cons?
与其他架构相比,使用微服务的优缺点是什么?
应该使用微服务时有经验法则吗?
micro-services 的优点是您的应用程序可以很好地扩展。您将应用程序划分为微小的服务。很难决定您需要哪些有界服务。但是,一旦完成此操作,您就可以轻松地将特定服务扩展多次(实际负载最大的服务),而无需扩展整个应用程序。
另一个优点是新开发人员更容易开始为您的应用程序创建新功能,因为一切都分为这些独立的服务 --> 每个服务都有自己的(小)代码库。
使用微服务最大的缺点当然是不同服务之间通信失败的几率更高。
微服务的使用通常只有在您的应用程序变得太大而无法作为整体应用程序进行维护时才开始得到回报。
尝试从整体开始,但在开发时牢记限界上下文(尽量保持分离),以便以后需要时可以迁移到微服务。
优点
Sam Newman 在 Building Microservices 中列举了微服务的主要优势如下:
技术异质性
对于由多个协作服务组成的系统,我们可以决定使用不同的
每个里面的技术。这使我们能够为每项工作选择合适的工具,而不是
不得不 select 一种更标准化的 one-size-fits-all 方法,这种方法通常最终会成为
最小公分母。
韧性
弹性工程的一个关键概念是舱壁。如果系统的一个组件
失败,但失败不会级联,您可以隔离问题和其余部分
系统可以继续工作。服务边界成为明显的隔板。在一个
单体服务,如果服务失败,一切都会停止。与单片
系统,我们可以在多台机器上 运行 来减少失败的机会,但是
微服务,我们可以构建系统来处理服务的整体故障并降级
相应的功能。
缩放
对于大型单体服务,我们必须将所有内容一起扩展。一小部分
我们的整个系统在性能上受到限制,但如果该行为被锁定在
巨大的单体应用程序,我们必须将所有东西作为一个整体来处理。和
较小的服务,我们可以只扩展那些需要扩展的服务,让我们 运行
系统的其他部分在更小、功能更弱的硬件上。
易于部署
one-line 更改为 million-line-long 单体应用程序需要整个
要部署的应用程序以发布更改。那可能是 large-impact,
high-risk部署。实际上,large-impact、high-risk 部署最终会发生
由于可以理解的恐惧,很少见。
有了微服务,我们可以对单个服务进行更改并独立部署
系统的其余部分。这使我们能够更快地部署代码。如果有问题
发生时,可以快速隔离到单个服务,使快速回滚变得容易
实现。
组织一致性
微服务使我们能够更好地使我们的架构与我们的组织保持一致,帮助我们
尽量减少在任何一个代码库上工作的人数,以达到团队的最佳状态
规模和生产力。我们还可以在团队之间转移服务的所有权,以尽量保持
在同一地点从事一项服务的人员。
可组合性
分布式系统和 service-oriented 架构的主要承诺之一是
我们为重用功能开辟了机会。通过微服务,我们允许我们的
为了不同的目的以不同的方式使用功能。这可以是
当我们考虑消费者如何使用我们的软件时尤其重要。
优化可替换性
如果您在 medium-size 或更大的组织工作,您很可能知道一些
坐在角落里的大而讨厌的遗留系统。一个没人想碰的人。那个
对贵公司 运行s 的发展至关重要,但这恰好是用一些奇怪的 Fortran 语言编写的
变体和 运行s 仅在 25 年前达到使用寿命的硬件上。为什么没有
被替换了吗?你知道为什么:它太大了,而且风险很大。
由于我们的个人服务规模较小,用更好的服务替换它们的成本
实施,甚至完全删除它们,都更容易管理。
缺点
微服务最重要的缺点是它们具有所有相关的复杂性
分布式系统,虽然我们已经学到了很多关于如何管理分布式系统的知识
系统好了还是很难的。如果你来
从整体系统的角度来看,您必须更好地处理
部署、测试和监控以释放收益。你会
还需要以不同的方式思考如何扩展系统并确保它们是
有弹性的。如果诸如分布式事务或 CAP 定理 之类的事情也不要感到惊讶
也开始让你头疼了!
结束语
只是引用 Martin Fowler:
One reasonable argument we've heard is that you shouldn't start with a
microservices architecture. Instead begin with a monolith, keep it
modular, and split it into microservices once the monolith becomes a
problem.
优势
1.Decentralized 和解耦架构,使用编排而不是编排使服务基于发布-订阅,因此完全去中心化
2.Do 做一件事并做好(Unix 哲学),更专注和单一,功能非常狭窄
3.Easy 具有并行性和负载平衡,因为从业务流程的角度来看更细粒度
4.Statelessness,然而,拥有一个有状态的微服务是有效的,但并不理想
5.Individual 数据存储让服务轻松跟踪数据流
6.Easy 以及由于使用基于容器引擎的技术(例如 docker
而实现的自动部署和发现
7.More 互操作性,这使得服务能够在 accepting/dropping new/current 服务或协议
中具有更大的灵活性
8.Fully 与允许创建无状态服务的表述性状态传输 (REST) 兼容
9.Suitable 用于离散系统,例如批处理自动化过程
缺点
1.Service同步,以协作的方式保持服务同步
2.Difficult查找系统性问题,例如在业务活动链中查找问题,当流程中出现逻辑错误时,比较困难,需要将多个日志文件合并为一个
3.Automated当微服务数量较多时,部署和发现是必须的
4.Difficult找到合适的服务粒度,这会导致整个系统因网络通信不堪重负和错误率而变得不稳定
5.Challenging当业务系统不够离散时,喜欢继续流程控制
6.Developing 自动化测试比单片系统困难得多
以下是code-project中发表的一组关于微服务的文章,喜欢的朋友可以阅读和评论。
https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-I https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-II https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-III
我们可以说微服务的部署更容易,但任何更改都只能是附加的。因为任何依赖它的人都可能失败。因此,关注点的分离并没有那么多。此外,跟踪失败并不好玩。同样在开发过程中,需要始终提供可用的东西以便其他人能够拨打电话。否则发展会受到影响。通过整体应用程序,我们知道那里有什么。但是对于分布式世界,没有人知道那里有什么,甚至不知道是否存在任何东西。
与其他架构相比,使用微服务的优缺点是什么? 应该使用微服务时有经验法则吗?
micro-services 的优点是您的应用程序可以很好地扩展。您将应用程序划分为微小的服务。很难决定您需要哪些有界服务。但是,一旦完成此操作,您就可以轻松地将特定服务扩展多次(实际负载最大的服务),而无需扩展整个应用程序。
另一个优点是新开发人员更容易开始为您的应用程序创建新功能,因为一切都分为这些独立的服务 --> 每个服务都有自己的(小)代码库。
使用微服务最大的缺点当然是不同服务之间通信失败的几率更高。
微服务的使用通常只有在您的应用程序变得太大而无法作为整体应用程序进行维护时才开始得到回报。 尝试从整体开始,但在开发时牢记限界上下文(尽量保持分离),以便以后需要时可以迁移到微服务。
优点
Sam Newman 在 Building Microservices 中列举了微服务的主要优势如下:
技术异质性
对于由多个协作服务组成的系统,我们可以决定使用不同的 每个里面的技术。这使我们能够为每项工作选择合适的工具,而不是 不得不 select 一种更标准化的 one-size-fits-all 方法,这种方法通常最终会成为 最小公分母。
韧性
弹性工程的一个关键概念是舱壁。如果系统的一个组件 失败,但失败不会级联,您可以隔离问题和其余部分 系统可以继续工作。服务边界成为明显的隔板。在一个 单体服务,如果服务失败,一切都会停止。与单片 系统,我们可以在多台机器上 运行 来减少失败的机会,但是 微服务,我们可以构建系统来处理服务的整体故障并降级 相应的功能。
缩放
对于大型单体服务,我们必须将所有内容一起扩展。一小部分 我们的整个系统在性能上受到限制,但如果该行为被锁定在 巨大的单体应用程序,我们必须将所有东西作为一个整体来处理。和 较小的服务,我们可以只扩展那些需要扩展的服务,让我们 运行 系统的其他部分在更小、功能更弱的硬件上。
易于部署
one-line 更改为 million-line-long 单体应用程序需要整个 要部署的应用程序以发布更改。那可能是 large-impact, high-risk部署。实际上,large-impact、high-risk 部署最终会发生 由于可以理解的恐惧,很少见。
有了微服务,我们可以对单个服务进行更改并独立部署 系统的其余部分。这使我们能够更快地部署代码。如果有问题 发生时,可以快速隔离到单个服务,使快速回滚变得容易 实现。
组织一致性
微服务使我们能够更好地使我们的架构与我们的组织保持一致,帮助我们 尽量减少在任何一个代码库上工作的人数,以达到团队的最佳状态 规模和生产力。我们还可以在团队之间转移服务的所有权,以尽量保持 在同一地点从事一项服务的人员。
可组合性
分布式系统和 service-oriented 架构的主要承诺之一是 我们为重用功能开辟了机会。通过微服务,我们允许我们的 为了不同的目的以不同的方式使用功能。这可以是 当我们考虑消费者如何使用我们的软件时尤其重要。
优化可替换性
如果您在 medium-size 或更大的组织工作,您很可能知道一些 坐在角落里的大而讨厌的遗留系统。一个没人想碰的人。那个 对贵公司 运行s 的发展至关重要,但这恰好是用一些奇怪的 Fortran 语言编写的 变体和 运行s 仅在 25 年前达到使用寿命的硬件上。为什么没有 被替换了吗?你知道为什么:它太大了,而且风险很大。
由于我们的个人服务规模较小,用更好的服务替换它们的成本 实施,甚至完全删除它们,都更容易管理。
缺点
微服务最重要的缺点是它们具有所有相关的复杂性 分布式系统,虽然我们已经学到了很多关于如何管理分布式系统的知识 系统好了还是很难的。如果你来 从整体系统的角度来看,您必须更好地处理 部署、测试和监控以释放收益。你会 还需要以不同的方式思考如何扩展系统并确保它们是 有弹性的。如果诸如分布式事务或 CAP 定理 之类的事情也不要感到惊讶 也开始让你头疼了!
结束语
只是引用 Martin Fowler:
One reasonable argument we've heard is that you shouldn't start with a microservices architecture. Instead begin with a monolith, keep it modular, and split it into microservices once the monolith becomes a problem.
优势
1.Decentralized 和解耦架构,使用编排而不是编排使服务基于发布-订阅,因此完全去中心化
2.Do 做一件事并做好(Unix 哲学),更专注和单一,功能非常狭窄
3.Easy 具有并行性和负载平衡,因为从业务流程的角度来看更细粒度
4.Statelessness,然而,拥有一个有状态的微服务是有效的,但并不理想
5.Individual 数据存储让服务轻松跟踪数据流
6.Easy 以及由于使用基于容器引擎的技术(例如 docker
而实现的自动部署和发现7.More 互操作性,这使得服务能够在 accepting/dropping new/current 服务或协议
中具有更大的灵活性8.Fully 与允许创建无状态服务的表述性状态传输 (REST) 兼容
9.Suitable 用于离散系统,例如批处理自动化过程
缺点 1.Service同步,以协作的方式保持服务同步
2.Difficult查找系统性问题,例如在业务活动链中查找问题,当流程中出现逻辑错误时,比较困难,需要将多个日志文件合并为一个
3.Automated当微服务数量较多时,部署和发现是必须的
4.Difficult找到合适的服务粒度,这会导致整个系统因网络通信不堪重负和错误率而变得不稳定
5.Challenging当业务系统不够离散时,喜欢继续流程控制
6.Developing 自动化测试比单片系统困难得多
以下是code-project中发表的一组关于微服务的文章,喜欢的朋友可以阅读和评论。
https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-I https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-II https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-III
我们可以说微服务的部署更容易,但任何更改都只能是附加的。因为任何依赖它的人都可能失败。因此,关注点的分离并没有那么多。此外,跟踪失败并不好玩。同样在开发过程中,需要始终提供可用的东西以便其他人能够拨打电话。否则发展会受到影响。通过整体应用程序,我们知道那里有什么。但是对于分布式世界,没有人知道那里有什么,甚至不知道是否存在任何东西。