This commit is contained in:
Junior Hsu 2017-10-20 00:11:03 -05:00 committed by GitHub
parent 58e640ef1b
commit 793c0fd501

View File

@ -98,7 +98,7 @@
微服务的另一个挑战是分区数据库架构。更新多个业务实体的业务事务是相当普遍的。这些事务在单体应用中的实现显得微不足道,因为单体只存在一个单独的数据库。在基于微服务的应用程序中,您需要更新不同服务所用的数据库。通常不会选择分布式事务,不仅仅是因为 [CAP 定理][21]。他们根本不支持如今高度可扩展的 NoSQL 数据库和消息代理。您最后不得不使用基于最终一致性的方法,这对于开发人员来说更具挑战性。
测试微服务应用程序也很复杂。例如,使用现代框架如 Sprig Boot只需要编写一个测试类来启动一个单体 web 应用程序并测试其 REST API。相比之下一个类似的测试类对于微服务来说需要启动该服务及其所依赖的所有服务或者至少为这些服务配置存根。再次声明虽然这不是一件高深的事情但不要低估了这样做的复杂性。
测试微服务应用程序也很复杂。例如,使用现代框架如 Spring Boot只需要编写一个测试类来启动一个单体 web 应用程序并测试其 REST API。相比之下一个类似的测试类对于微服务来说需要启动该服务及其所依赖的所有服务或者至少为这些服务配置存根。再次声明虽然这不是一件高深的事情但不要低估了这样做的复杂性。
微服务架构模式的另一个主要挑战是实现了跨越多服务变更。例如,我们假设您正在实现一个变更服务 A、服务 B 和 服务 C 的需求,其中 A 依赖于 B且 B 依赖于 C。在单体应用程序中您可以简单地修改相应的模块、整合变更并一次性部署他们。相反在微服务中您需要仔细规划和协调出现的变更至每个服务。例如您需要更新服务 C然后更新服务 B最后更新服务 A。幸运的是大多数变更只会影响一个服务需要协调的多服务变更相对较少。
@ -160,4 +160,4 @@ By Floyd Smith
[image-2]: resources/1-2.png
[image-3]: resources/1-3.png
[image-4]: resources/1-4.png
[image-5]: resources/1-5.png
[image-5]: resources/1-5.png