1.3 Spring Cloud增强生态
1.3.1 Spring Cloud分布式事务
微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度,增强扩展性,便于敏捷开发。当前微服务被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。很多中小型互联网公司,由于经验、技术实力等问题,想要让微服务落地还比较困难。如著名架构师Chris Richardson所言,目前存在的主要困难有如下几方面:
1)单体应用拆分为分布式系统后,进程间的通信机制和故障处理措施变得更加复杂。
2)系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变得非常突出。
3)微服务数量众多,其测试、部署、监控等都变得更加困难。
4)随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如HSF、Dubbo可以支持多种通信协议,Spring Cloud可以非常好地支持RESTful调用。
对于第三个问题,随着Docker、Devops技术的发展以及各公有云PAAS平台自动化运维工具的推出,微服务的测试、部署与运维变得越来越容易。而对于第二个问题,现在还没有一个通用方案可以很好地解决微服务产生的事务问题。分布式事务问题已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。在本书的第24章,会通过案例介绍Spring Cloud与分布式事务的各种解决方案。
1.3.2 Spring Cloud与领域驱动
Spring Cloud组件很多,更像是一套中间件体系,是实现微服务架构的基础实施。Spring Cloud作为微服务架构的基础设施,能够快速帮助企业开发者搭建微服务架构。Spring Cloud解决了框架层面的问题,但是对于业务怎么开发,业务架构怎么治理,架构怎么防腐,怎么解决应用架构的复杂性问题,还需要方法论去指导实践。所以在微服务架构落地的过程中,Spring Cloud和领域驱动相辅相成显得十分重要。Spring Cloud解决架构分布式等问题,领域驱动作为业务治理和架构防腐的方法论,两者并驾齐驱,为企业IT架构变革与微服务改造保驾护航。在本书的第25章将会详细介绍领域驱动Halo框架的设计。Halo框架无缝整合了Spring Cloud,目前支持Spring Cloud Finchley版本,通过案例的方式讲解如何运用Spring Cloud和领域驱动来进行业务架构治理和代码防腐。
1.3.3 Spring Cloud与gRPC
通过Spring Cloud构建微服务应用,大多数开发者使用官方提供的服务调用组件Feign来进行内部服务调用通信,这种声明式的HTTP客户端使用起来极为简单、优雅、方便。然而Feign的底层调用实现走的还是HTTP协议,相对于Dubbo、gRPC等RPC框架走RPC协议来说,通过HTTP来进行服务之间的调用,性能相对低下。那么我们是否可以通过Spring Cloud集成其他RPC框架来实现服务之间的高性能调用,答案是肯定的。在本书的第19章至20章将为大家讲解如何在Spring Cloud中集成Google开源框架gRPC。
1.3.4 Spring Cloud与Dubbo生态融合
在微服务架构的实施和落地过程中,我们通常会进行技术选型,做一些对比。很多人都会拿阿里开源的Dubbo和Spring Cloud进行对比,其本质对比的主要是REST和RPC。其实Dubbo和Spring Cloud并不在同一个领域,没有可比性。因为Spring Cloud是一个完整的微服务解决方案,提供分布式情况下的各种解决方案合集。而Dubbo是一款高性能Java RPC框架。Spring Cloud生态与Dubbo生态随着发展将会逐渐融合互补。
Spring Cloud的设计理念是Integrate Everything,即充分利用现有开源组件,在它们之上设计一套统一规范/接口使它们能够接入Spring Cloud体系并且能够无缝切换底层实现。最典型的例子就是DiscoveryClient,只要实现DiscoveryClient相关接口,Spring Cloud的底层注册中心就可以随意更换,Dubbo的注册中心也有SPI规范进行替换。
在2018年6月Spring Cloud中国社区开源了一个名为spring-cloud-dubbo项目,该项目的目标是将Dubbo融入Spring Cloud生态体系中,使微服务之间的调用同时具备RESTful和Dubbo调用的能力,做到对业务代码无侵入、无感知。若在使用过程中引入jar包则在微服务间调用时使用Dubbo,去掉jar包则使用默认的RESTful。在本书的第23章,将会详细讲解spring-cloud-dubbo的设计与使用,为Dubbo向Spring Cloud的无缝迁移提供统一的方法论并指导落地。