前面我们介绍了Dubbo+ZooKeeper的分布式架构方案,但与Spring Cloud相比,Dubbo+ZooKeeper还是缺少了很多关键的组件,它只实现了服务的注册与调用,而Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举,分布式session,集群状态)中快速构建的工具,使用SpringCloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
Spring Cloud与Dubbo核心要素的比较
核心要素 | Dubbo | Spring Cloud |
---|---|---|
服务注册中心 | ZooKeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
分布式追踪系统 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream基于Redis、Kafka实现的消息微服务 |
批量任务 | 无 | Spring Cloud Task |
Spring Cloud架构
Spring Cloud使用Eureka作为注册中心,将如图的Service服务都注册进去,Service1想要调用Service2就要遵守Ribbon的负载均衡设置,根据负载均衡的规则,来决定调用哪台服务器上的Service2;由于Service1调用Service2,Service2调用Service3,Service3调用Service4是一个完整的过程,当Service3或者Service4出现问题,由于使用了Hystrix,可以是用户无需等待就能快速响应到失败状态;用户想要实现调用必须经过Zuul服务网关的过滤请求,这就是一个完整的Spring Cloud的功能实现过程。