与替代架构相比,使用微服务的优缺点是什么? 应该使用微服务时有经验法则吗?
答案 0 :(得分:37)
[3}}中的Sam Newman列举了以下微服务的主要优点:
通过由多个协作服务组成的系统,我们可以决定使用不同的服务 每个人内部的技术。这使我们能够为每个工作选择合适的工具,而不是 必须选择一种通常最终存在的更标准化,一刀切的方法 最低的共同点。
弹性工程的一个关键概念是隔板。如果系统的一个组件 失败,但失败不会级联,你可以隔离问题和其余的 系统可以继续工作。服务边界成为您明显的舱壁。在一个 单一服务,如果服务失败,一切都停止工作。有一个单片 系统,我们可以在多台机器上运行,以减少失败的机会,但有 微服务,我们可以构建处理服务完全失败和降级的系统 相应的功能。
通过庞大的单片服务,我们必须将所有内容扩展到一起。一小部分 我们的整体系统在性能方面受到限制,但如果这种行为被锁定在 巨大的单片应用程序,我们必须处理所有内容。同 更小的服务,我们可以扩展那些需要扩展的服务,允许我们运行 系统的其他部分在较小,功能较弱的硬件上。
对一百万行单片应用程序的单行更改需要整体 要部署的应用程序以释放更改。这可能是一个很大的影响, 高风险部署。在实践中,最终会发生影响较大,风险较高的部署 很少因为可以理解的恐惧。
通过微服务,我们可以对单个服务进行更改并单独部署 系统的其余部分。这使我们能够更快地部署代码。如果出现问题 发生时,它可以快速隔离到单个服务,使快速回滚变得容易 实现
微服务使我们能够更好地将我们的架构与我们的组织保持一致,从而帮助我们 最大限度地减少在任何一个代码库上工作的人数,以达到团队的最佳位置 规模和生产力。我们还可以在团队之间转移服务的所有权以保持 从事一项服务工作的人员。
分布式系统和面向服务的体系结构的关键承诺之一就是 我们为重用功能开辟了机会。通过微服务,我们允许我们的 为不同目的以不同方式消费的功能。这可以 当我们考虑消费者如何使用我们的软件时,这一点尤为重要。
如果您在中型或大型组织工作,您可能会意识到一些 坐在角落里的大而讨厌的遗留系统。没有人想触摸的那个。那一个 对于你的公司如何运行至关重要,但这恰好是用一些奇怪的Fortran编写的 变体并仅在25年前达到使用寿命的硬件上运行。为什么不呢 被取代了?你知道为什么:工作太大而且冒险。
由于我们的个性化服务规模较小,因此更换它们的成本更高 实施,甚至完全删除它们,更容易管理。
微服务最重要的缺点是它们具有所有相关的复杂性 分布式系统,虽然我们已经学到了很多关于如何管理分布式系统的知识 系统很好,它仍然很难。如果你要来 从整体系统的角度来看,你必须在处理方面做得更好 部署,测试和监控以释放好处。你会 还需要以不同的方式思考如何扩展系统并确保它们是如此 弹性。如果像分布式事务或 CAP定理这样的事情,也不要感到惊讶 开始让你头痛,或者!
我们听到的一个合理的论点是,你不应该以a开头 微服务架构。而是从一块巨石开始,保留它 模块化,一旦整体成为一个,就将它分成微服务 问题
答案 1 :(得分:8)
专业的微服务是您的应用程序可以很好地扩展。您可以在小型服务中划分应用程序。决定您需要哪些有限服务是一件困难的事情。但是,一旦完成此操作,您可以轻松地将特定服务扩展到多次(实际上负载最多的服务),而不是需要扩展整个应用程序。
另一个优点是新开发人员更容易开始为您的应用程序创建新功能,因为所有内容都分为这些独立服务 - >每个服务都有自己的(小)代码库。
使用微服务的最大缺点当然是在不同服务之间的通信过程中出现故障的可能性更高。
当您的应用程序变得太大而无法作为单一应用程序进行维护时,微服务的使用通常只会开始得到回报。 尝试以单片方式开始,但在开发时尽量保持有限的上下文(尽量保持分离),以便稍后可以迁移到微服务。
答案 2 :(得分:2)
优势
1。去中心化和去耦的体系结构,使用编排而不是编排使服务基于发布-订阅,因此完全去中心化
2。做一件事并做好(Unix哲学),更加专注和单一,功能非常狭窄
3。易于并行处理和负载均衡,因为从业务流程的角度来看,粒度更细
4。但是,无状态,拥有有状态的微服务是有效的,但不是理想的选择
5。单独的数据存储使服务放松以保持跟踪数据流
6。由于使用了基于容器引擎的技术(例如docker),因此可以轻松,自动地进行部署和发现
7。更高的互操作性,使服务在接受/删除新的/当前的服务或协议时具有更大的灵活性
8。与表示性状态传输(REST)完全兼容,可创建无状态服务
9。适用于离散系统,例如批处理自动化过程
缺点 1.服务同步,以协作方式保持服务同步
2。难以发现系统性问题,例如,在流程中存在逻辑错误时在一系列业务活动中发现问题更加困难,并且需要将多个日志文件合并为一个
3。当微服务的数量超过几个时,必须自动部署和发现
4。难以找到正确的服务粒度,由于不堪重负的网络通信和错误比率,可能导致整个系统不稳定
5。在业务系统不够离散时提出挑战,例如继续进行流程控制
6。开发自动化测试比单片系统要困难得多
以下是在代码项目中发布的有关微服务的一系列文章,您可以根据需要阅读并评论您的问题。
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