学新事物,首先搞清楚新事物的用途,或者说它要解决什么问题?然后,再问它用什么办法解决这些问题。
一、sc的用途
Spring Cloud(简称:sc)官方定义:一套工具集用于构建分布式系统的,用于构建和部署微服务。
分布式系统是相对于单一系统而言的。当单一系统大到一定程度时,为了降低系统的耦合度需要进行服务化。服务化虽然解决了耦合性问题,同时也带了一系列新的问题,而sc就是应对这些新问题的解决方案套件。
二、服务化带的新问题
1、服务地址管理
众多服务地址的管理是服务化后首先面临的问题,众多服务地址必须统一管理,以免在服务地址发生变化时,所有的客户端都要跟着改调用地址。解决方案是配置中心统一管理服务地址,所有的服务在配置中心注册自己的服务地址,客户端到配置中心获取服务地址,当服务地址发生变化时,服务端到配置中心重新注册。另外,配置中心还与服务之间保持心跳,经确认服务的健康状况。SC的解决配置中心解决方案是Eureka。sc之外还有其他的解决方案如zookeeper等。
2、服务的负载均衡
单个服务以集群方式部署之后,服务的负载均衡是显而易见的问题。传统的解决方案是在集群的前端部署专门的软件或硬件负载工具,客户端的调用请求通过负载工具的分发到达服务端。新的解决方案是智能客户端+配置中心的方式,客户端在发起请求前从配置中心获取所有的服务地址,再根据一定的算法从中选取一个服务端,然后直接发起调用,省去了负载工具的中间分发环节。SC的解决方案就Ribbon。
3、服务调用模板化
服务化之后,服务的调用便成了与数据库访问一样普遍的操作,为了方便服务调用,抽象出一个统一的服务调用模板,SC的解决方案是Feign。
4、服务容错
服务化之后,一个业务往往要调用多个服务,当一个服务发生故障时,会导致它的客户端无法正常工作,进而客户端的客户端也无法正常工作,连锁反应会最终会导致雪崩效应,最后整个系统都无法工作。所以,必须要有容错机制,以便部分服务发生故障时,其他服务的不至于跟着崩溃。SC的解决方案是Hystrix
5、配置管理
服务化之后,单一系统的配置被分散到各个服务中,在服务规模很大时,配置的更新成了一件很繁杂的工作。为此,有必要将配置信息集中管理,在修改之后,再更新到各个服务当中。解决方案是配置中心。SC的解决方案是Config Server。
6、微服务网关
服务化之后,一个业务被拆分成多个服务,为了避免业务客户端分别与各个服务交互,需要在各个服务之前提供一个门面(Facade),提供统一的权限验证以及统一的交互入口,业务客户端通过与门面的交互获得服务。SC的解决方案是Zuul。
7、服务监控
服务化之后,众多服务的健康至关重要,必须对服务的当前状态进行监控,SC的解决方案是Actuator。