springCloud


SpringCloud项目简介


springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,

  跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。

 

 

核心模块

1.Eureka

服务注册中心

注册中心选择:
Zookeeper:CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足

Eureka:AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化

 

2.feign

声明式服务调用,本质上就是Ribbon+Hystrix(优化代码,避免直接使用RestTemplate的混乱)

1.Feign是一个声明式的http客户端,使用Feign可以实现声明式REST调用。spring cloud为Feign整合了Eureka、Ribbon,以提供服务发现及负载均衡等能力,同时整合了SpringMVC注解
2.Feign默认使用SpringMVC注解提供契约来进行REST访问,例如@RequestMapping,@PathVariable等。

feign整合了Zuul,Hystrix,Ribbon,Eureka等微服务组件。

总的来说Feign就是高度封装了基于RESTful协议请求的客户端,而不用开发者自己手写请求协议请求服务
3. Hystrix
服务降级处理,客户端容错保护,服务熔断、请求缓存、请求合并、依赖隔离


4.Zuul
 
服务网关,功能有路由分发和过滤。

Zuul整合了Hystrix,Ribbon,Eureka等微服务组件。
5.Ribbon

客户端负载均衡

 

 

整体设计

 

 

整体流程简述如下:

1.服务请求首先到达服务网关Zuul,由zuul进行请求过滤和路由。

2.Zuul更据负载均衡路由到其中一个目的微服务如商品微服务

3.商品微服务如果依赖于其他微服务如订单微服务,则商品微服务通过feign封装的协议进行请求订单微服务,期间也会经过网关路由,如果发生超时等网络错误,会由Hystrix配置的容错策略进行相应容错处理如服务降级。

4.Ribbon更据Eureka里面注册的服务列表使用负载均衡选择一个服务提供者处理请求

5.服务提供者处理请求并范围结果

 

Eureka工作原理

 

 

 

SpringCloud Ribbon工作原理

 

Eureka与Ribbon整合工作原理

 

 

 

 


服务网关组件Zuul工作原理

 

 

 

熔断器Hystrix

熔断的原理其实就和保险丝差不多

 

当C服务停止的时候,B自动调用写死的数据进行回复,从而避免因为请求过多导致A服务奔溃的情况。

这样就可以保证只有调用c服务时,出现不是预期的结果,其他服务都能正常使用

 

断路器组件Hystrix工作原理

 

 

Hystrix监控
Hystrix Dashboard:除了隔离依赖服务的调用以外,Hystrix还提供了近实时的监控,Hystrix会实时、累加地记录所有关于HystrixCommand的执行信息,包括每秒执行多少请求多少成功,多少失败等

Turbine:在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。
 为此,Netflix提供了一个开源项目(Turbine)来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。


Turbine和Hystrix Dashboard的区别 
Hystrix Dashboard一次只能监控一个微服务,而Turbine可以监控多个微服务,即监控页面可以看到多个微服务的调用情况。一般企业级应用都是使用Turbine

参考资料:
1.官方文档https://springcloud.cc/

2.面试必问的SpringCloud实现原理图https://m.imooc.com/article/23679

3.SpringCloud微服务(原理篇)https://blog.csdn.net/shinlyzsljay/article/details/79162270

4.Hystrix监控Dashboard以及Turbine聚合https://www.jianshu.com/p/33c86d81a81d

 

展开阅读全文

没有更多推荐了,返回首页