2.1 微服务框架
目前,国内使用较多的微服务框架主要有Dubbo(国内开源、使用广泛)和Spring Cloud(微服务组件丰富、版本更新更快),笔者在进行微服务选型时也遇到过一些困惑。
如何选择适用于项目的微服务化改造的框架?下面主要阐述Dubbo服务框架和Spring Cloud微服务框架之间的差异。
2.1.1 Dubbo服务框架
Dubbo(目前属于Apache孵化项目)是阿里巴巴开源的一款高性能、轻量级的开源Java RPC框架,主要提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说,Dubbo就是一个服务框架,是一个远程服务调用的分布式框架。Dubbo服务框架如图2-1所示。
图2-1 Dubbo服务框架
1.模块说明
(1)Provider:暴露服务的提供者。
(2)Consumer:调用远程服务的消费者。
(3)Registry:服务注册与发现的注册中心。
(4)Monitor:统计服务的调用次数和调用时间的监控中心。
(5)Container:服务的运行容器。
2.流程说明
0:服务容器,负责启动、加载、运行服务提供者(Standalone容器)。
1:服务提供者,在启动时向注册中心注册自己提供的服务(ZooKeeper)。
2:服务消费者,在启动时向注册中心订阅自己所需的服务。
3:注册中心将服务提供者地址列表返回消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台服务提供者进行调用,如果调用失败,再选另一台调用。
5:服务消费者和提供者,在内存中累计调用次数和调用时间,每分钟定时向监控中心发送一次统计数据(根据数据可以动态调整权重)。
3.Dubbo服务框架的六大特点
(1)面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层的细节。
(2)智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统的吞吐量。
(3)服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
(4)高度可扩展能力:遵循微“内核+插件”的设计原则,所有核心能力(如Protocol、Transport、Serialization)被设计为扩展点,平等对待内置实现和第三方实现。
(5)运行期流量调度:内置条件、脚本等路由策略,配置不同的路由规则,可以轻松实现灰度发布,以及同一机房服务优先调用等功能。
(6)可视化的服务治理与运维:提供丰富的服务治理和运维工具,如随时查询服务元数据、服务健康状态及调用统计,以及实时下发路由策略、调整配置参数。
2.1.2 Spring Cloud微服务框架
Spring Cloud是Pivotal公司提供的一系列微服务框架的有序集合,利用Spring Boot的开发便利性可以简化分布式系统基础组件的开发和使用,同时为开发人员提供了快速构建分布式系统中常见组件的工具(如配置管理、服务发现、熔断器、智能路由、控制总线、网关等)。Spring Cloud微服务框架如图2-2所示。
如图2-2所示,Spring Cloud微服务框架主要包括EUREKA、Zuul、CONFIGSERVICE、Hystrix Dashboard、Turbine等组件,另外,负载均衡组件Ribbon内嵌在服务调用中。
组件说明如下。
(1)EUREKA:服务注册与发现的注册中心。
(2)Zuul:网关和路由。
(3)CONFIG SERVICE:分布式配置服务。
(4)Hystrix Dashboard:服务熔断监控组件。
(5)Turbine:服务调用汇集展示。
EUREKA组件实现了服务的注册与发现,服务相互之间调用时,通过服务名称即可完成接口服务调用,而隐藏了服务的部署地址及部署数量等信息。EUREKA组件使用时分为客户端和服务端:客户端完成服务向服务端的注册;服务端接收服务注册,同时提供服务发现功能。EUREKA客户端使用eureka.client.serviceUrl.defaultZone完成配置,服务端使用@EnableEurekaServer注解完成配置。
Spring Cloud微服务框架还包含两个常用组件:Ribbon和Zipkin。Ribbon是客户端负载均衡组件,Zipkin是调用链追踪组件。
图2-2 Spring Cloud微服务框架
2.1.3 Dubbo服务框架和Spring Cloud微服务框架的对比
远程调用Dubbo服务框架和Spring Cloud微服务框架都可以作为微服务的基础开发与运行框架。Dubbo服务框架和Spring Cloud微服务框架的对比如表2-1所示。
表2-1 Dubbo服务框架和Spring Cloud微服务框架的对比
需要说明的是,表2-1中Dubbo服务框架总结为“无”的组件不代表无法实现,而只是Dubbo服务框架自身不提供,需要另外整合第三方组件以实现对应的功能。再结合考虑服务调用的侵入性以及社区成熟度和活跃度,最终将Spring Cloud微服务框架作为项目微服务化改造过程中开发和运行的基础框架。