4.3 大厂微服务架构的服务治理方案
4.3.1 业界主流服务治理框架一览
1. Dubbo
Apache Dubbo是阿里开源的一款高性能RPC(Remote Procedure Call)框架,Dubbo的更新维护曾一度停滞了数年,随着近几年“阿里系”在开源领域上的逐步发力,Dubbo也重新焕发了青春活力。目前Dubbo已经正式完成项目孵化并成为Apache的顶级项目,它也是国内微服务领域的一个热门开发框架。Dubbo提供了面向接口的远程服务调用、服务容错和负载均衡及服务注册和服务发现等核心功能。除此之外,在服务治理和运维可视化方面、运行期流量调度和发布策略方面也有比较完善的功能。
2. HSF
High Speed Framework(又名“好舒服”),很多读者可能会对这个名字感到陌生,它是“阿里系”内部使用最广泛的RPC服务治理框架,应用在淘宝、天猫及各个“淘系”的上下游业务中。HSF是“淘系”团队开发的RPC框架,由于淘系业务在“阿里系”的核心地位,HSF奠定了自己在“阿里系”服务治理领域的“一哥”地位。但HSF过多地依赖了“阿里系”的内部系统,其部署方式相对Dubbo来说更加重量级(需要Taobao-Tomcat),从运维的角度来说,HSF不如Dubbo灵巧、轻便。因此,目前它主要通过阿里云走技术输出路线。
3. SOFARPC
SOFARPC是蚂蚁金服开源的一款RPC框架,支持RESTful、Dubbo、H2C和蚂蚁金服开发的Bolt协议进行通信,并且可以将同一个服务以多种不同协议开放出去,在使用上与Dubbo并没有太大区别。目前SOFARPC的其中一个发展方向是通过兼容主流开源软件来推进自己的开源路线。在最近的发布版本中,SOFARPC和Spring Cloud的注册中心Consul及服务容错组件Hystrix做了集成,与其他注册中心中间件(Eureka和ETCD)的对接仍在开发中。
4. gRPC
gRPC是谷歌开发的高性能RPC框架,基于ProtoBuf序列化协议的跨语言服务治理框架,开发者只需定义一套Proto格式的接口描述,就能用插件生成指定编程语言的接口访问层。gRPC对异步调用也有强大的支持,借助gRPC可以轻松地构建下一代微服务架构方案——ServiceMesh云原生应用。笔者所任职公司的业务就搭建在gRPC + Kubernetes + Istio的ServiceMesh云原生架构之上。gRPC在海外应用得相当广泛,但由于种种限制,在国内的应用比较少。
5. Spring Cloud
Spring Cloud提供了多款优秀的服务注册中心,比如原生组件Consul、由阿里贡献的Nacos项目,以及目前应用最广泛的由Netflix公司开发的Eureka。Spring Cloud提供的服务治理功能远不只服务注册与服务发现。Spring Cloud还提供了一整套丰富的微服务组件库,构建了微服务架构的一站式解决方案。可以说,Spring Cloud是目前微服务架构领域内功能最强大、生态最丰富的开源项目工具包。从本书第5章开始,我们会对Spring Cloud的核心组件做详细介绍。
4.3.2 微服务框架的选型建议
微服务框架的选型要着眼于现有的业务和技术平台,从0开始搭建的应用或者中小型项目相比于大型应用有更大的选型自由度,替换基础组建的成本也在可控范围内。但是对于老旧遗留系统和大型项目,更换技术选型的限制因素有很多,若要迁移到微服务架构上,则要采取长期规划加逐步替换的策略,尤其要保证新的微服务技术栈在迁移过程中始终与已有服务组件保持兼容。
因此,我们在进行技术选型的时候,应当尽可能地选择可插拔式的组件,这类组件的接入成本是可控的,并且可以被灵活替换。在此,笔者推荐使用Spring Cloud一站式解决方案,主要的考量因素有以下几点:
1. 组件化
Spring Cloud将服务治理领域的各个平台功能做了顶层抽象,各个不同功能的组件之间有清晰的界限,组件与组件之间没有强绑定关系,可以很方便地替换某个组件。对于相同领域的组件(比如注册中心的Eureka、Consul和Nacos),由于它们都遵循同一套接口规范,所以只要变更依赖项和少量配置注解,便可以达到替换底层组件的目的。这种插件式的架构设计为技术选型提供了很大的灵活度。
2. 生态活跃
依托于Spring社区的活跃度,可以预见Spring Cloud在未来将保持旺盛的更新节奏(现在几乎不到一年就会有大版本的更新),为开发者提供越来越多的高质量组件库和新功能。
3. 一站式
Spring Cloud有丰富的组件库,可以在微服务架构的方方面面提供解决方案,是一个“全家桶”式的微服务解决方案;而大部分微服务架构其实只解决了“服务治理”这一个领域的问题。