最近学习了下Spring Cloud,这篇文章的目的就是总结一下我对Spring Cloud的总体框架理解:
一. 整体框架总结
在学习Spring Cloud之前,我使用过Spring Boot。在生产环境中Spring Boot也比较好的的支持了微服务的开发,那为什么还需要有Spring Cloud这个项目呢? 没有Spring Cloud,Spring Boot只能提供单点的微服务实现,如果是集群环境,那就需要额外的上层组件来提供节点间协调的功能,而分布式系统各节点间协调,通常是很麻烦的事情,需要在每个节点做很多工作,比如让服务均衡的分布到单个节点,在单个节点挂掉的时候整个集群的访问还能够正常,集群迁移时配置的快速调整等等,没有Spring Cloud,这些操作都是非常麻烦的事情。
截止Dalston.SR2版本,Spring Cloud提供了以下特性:支持分布式配置管理、服务注册与发现、路由、服务链调用、负载均衡、熔断器、分布式消息,使微服务的集群的开发部署变得便捷。得益于Spring天生的高扩展性,这些特性都是高度可定制,目前的支持列表如下:
1.分布式配置管理:spring-cloud-config-server
2.服务注册与发现:Eureka
3.路由:Zuul
4.负载均衡:Ribbon + Zuul
5.熔断器:Hystrix
二. 各组件功能
1.分布式配置管理(spring-cloud-config-server )
分布式配置管理主要包含以下功能要点:配置中心、配置刷新。spring-cloud的配置中心支持git/svn/本地文件等多种方式。配置刷新支持单点刷新、多个应用的刷新、以及自动刷新。
2.服务注册与发现(Eureka)
服务注册与发现里通常会有三个角色:服务消费者、服务提供者、服务注册中心。Spring Cloud提供了两个组件(Eureka Server 与 Eureka Client),Eureka Client可以理解为服务消费者,Eureka Server则可以理解为服务提供者+服务注册中心。Eureka Server之间会通信,维持一份服务列表,Eureka Client本地也会缓存一份服务列表。
3.路由(Zuul)
Zuul提供了路由的功能,支持正则表达式、path+url、path+serviceid等方式。
4.负载均衡(Ribbon + Zuul)
Zuul支持Eureka Server侧负载均衡,Ribbon提供Eureka Client侧负载均横。
5.熔断器(Hystrix)
如果一个服务提供者节点访问有问题,需要为之提供一些异常处理的策略。熔断器就是其中一种,一旦发现异常,新的请求便默认中断一段时间,不用消耗无谓的资源。Hystrix支持各种定制的熔断策略。