springcloud是一套分布式系统框架与doubbo的功能类似但是springcloud中的组件更加丰富,注册发现服务中心、熔断器、负责均衡、调用连式追踪等。
想要用springcloud就一定要学习springboot
https://blog.csdn.net/forezp/article/details/70148833
1.服务注册发现中心eureka
作为服务注册发现中心与zookeeper不同的是eureka的集群没有使用master+slaver的模式,每个eureka服务器都是平级的
我们可以想象一下如果集群环境中出现了每个zk间的通讯故障,有一个或者一部分zk找不到自己的leader了,只能在他们中间在选举出一个,当网络恢复了又会发现出现了两个leader,这种现象称为“脑裂”,在生产环境这是很麻烦的。
而在eureka中这种情况就不会出现了,因为每个eureka之间都是平级的,所以当出现eureka间通讯故障时是不会影响他们的正常运作的,当eureka集群上线时先启动的那个服务器会报错纯属正常,当所有的服务器都启动完成时就不会报错了,下面我做了一个小demo:
https://gitee.com/study_and_discussion_group/spring-cloud-eureka
2.声明式客户端调用feign
说到feign就不得不提到spring的有个内部bean,RestTemplate这个是spring中访问restful api的工具类,他可以将json格式的响应数据直接转换成你所需要的实体
User user = restTemplate.getForObject("http://www.xxx.com",User.class);
feign的底层使用的就是这个,我们知道feign既然是声明式的用起来肯定会很方便,那么性能怎么样呢,这就涉及到了一个概念”负载均衡“,nginx中也有负载均衡,实现原理是路由式的根据设置我方案来进行分配,那么spring-cloud中的负载均衡是怎样做到的呢?
feign中内置了负载均衡组件Ribbon,他是通过注册发现中心拉取服务器列表,然后通过算法对目标服务器进行请求
https://gitee.com/study_and_discussion_group/spring-cloud-feign
3.负载均衡Ribbon
上文说了负载均衡组件ribbon,负载均衡有很多策略方案适用不同的场景,而ribbon是通过eureka中的信息动态选择的。
4.熔断器Hystrix
在学习spring-cloud之前我并没有觉得熔断器在一个分布式系统中的重要性,觉得他是个可有可无的东西,其实不然,有时候熔断器会在生产环境中起到重要作用,例如一个下游系统集群中10个服务器中有一个启动是失败了或者一个接口没上线,当有请求访问到了这个服务器就会报错,而且这种错误很难发现,毕竟不是100%的必现。这时熔断器会将报错的服务器从集群中剥离出去,避免影响整个服务集群。
https://gitee.com/study_and_discussion_group/spring-cloud-hystrix
有了断路器当分布式环境中某个系统出现问题的时候我们怎么发现他呢?这时我们需要一个监控面板能查看哪些服务器的断路器是打开的,hystrix-dashborad应运而生
https://gitee.com/study_and_discussion_group/spring-cloud-hystrix-dashboard
这里踩过一个springboot2.0版本的坑
有了监控面板另一个问题又出现了,生产环境集群时我们不可能一个一个服务器的监控面板去查看,我们需要把这些信息统一起来,这时就需要另一个组件turbine聚合监控