公司最近正在升级拆分以前的spring boot项目,正好学习下spring cloud。
Spring Cloud官方介绍
Spring Cloud组件
在上图可以看到Spring Cloud有许多的组件,数了下目前有21个组件可用,一下子也学不完。看了下有些组件平常也用不到,比如security可以换成轻量点的jwt、shiro。下面介绍下几个常用的组件:
- Eureka:服务的注册与发现中心,所有的微服务都在Eureka上注册,也可在上面找到所需的服务。
- Feign:用于微服务之间相互调用,比如A服务想要调用B服务,那么在A服务中加入该组件即可调用B服务。我现在使用的Spring Cloud版本(Finchley.SR1)的Feign组件已经包含了Ribbon组件,因此也可实现负载均衡。
- Zuul:网关,即Spring Cloud的路由,里面可以配置一系列的过滤器,所有请求都经过zuul,然后由zuul处理后才能进入其他微服务模块中,一般在zuul中做一些权限校验,限流,日志,拦截等操作,因此一个微服务架构的好坏,很大程度上是由zuul决定的。
- Config:是Spring Cloud的配置中心,当有很多个微服务时,统一配置就变得很重要了,不然改改配置得多累啊,而且Spring Cloud的Config功能是非常强大的,它可以从远端git仓库(目前中国只支持码云,国外github等)自动拉取配置,这样一来,当你项目部署后,突然哪天需要改点配置啥的,只需要改改码云里面的配置就行了,项目都不用重启,更不需要什么打包重新部署那么麻烦,对应的微服务会自动拉取配置的,自动实现热部署。
- Bus:Spring Cloud的消息总线,上面提到的自动拉取配置就需要用到这个组件,用来传播事件状态变化。
- Hystrix:寓意“豪猪”,长满了刺,充满了自我保护的气息,用来应对服务降级的,比如A服务在调用B服务时,B服务宕掉了,不能提供服务了,此时A服务如果配置了Hystrix就可以实现服务降级,常见的比如在双11时抢某件商品时,本来所有服务正常时是可以下单的,但如果服务比较拥挤时,会提示你:系统太拥挤了,这个时候下单这个服务就被降级为:系统太拥挤了。
- Sleuth:寓意“侦探”,是Spring Cloud的服务追踪组件,比如完成某个功能时需要A服务调用B,B服务调用C,C服务调用D, 其中有个过程出现了故障,此时我们可以根据这个组件进行查询是哪个过程出现故障了。
- Stream:封装了与Redis,Rabbit、Kafka等模板,使操作内存、MQ更加简便。
- Ribbon:Spring Cloud的负载均衡器,默认采用轮询方式负载均衡,当然也可以配置成其他方式。
题外话:对比下Spring Cloud和Dubbo
Dubbo | Spring Cloud | |
---|---|---|
服务注册中心 | Zookeeper | Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Hystrix |
服务网关 | 无 | Spring Cloud Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务追踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
…… | …… | …… |
他们最大的区别就在于通信方式,REST不存在代码级别的强依赖。