Spring Cloud常用组件简介

前言: 大家都知道Spring Cloud是一套微服务框架,既然是服务于微服务,其核心的组件也就是解决微服务的核心问题;

核心问题:

  1. 服务很多,客户端怎么访问?(Zuul/Gateway)
  2. 服务很多,怎么管理这些服务?(Eureka)
  3. 服务很多,服务之间怎么通信?(Feign)
  4. 服务挂掉怎么办? (Hystrix)

其他问题:

    服务很多,怎么管理配置?(Spring Cloud Config,Spring Cloud Bus) 如何保障服务安全?(Spring Cloud Security) 如何与缓存(Redis)及中间件(MQ)通信?(Spring Cloud Stream) …

服务条目与技术:

微服务条目 落地技术 服务开发 SpringBoot,Spring MVC 服务配置与管理 Netflix公司的Archaius 、阿里的Diamond等 服务注册与发现 Eureka、Consul、Zookeeper等 服务调用 Rest、RPC、gRPC 服务熔断器 Hystrix、Envvoy等 负载均衡 Ribbon、Nginx等 服务接口调用 Feign、Consul等 消息队列 kafka、RabbinMQ、ActiveMQ等 服务配置中心管理 SpringCloudConfig、Chef等 服务路由(API网关) Zuul、Gateway等 服务监控 Zabbix、Nagios、Metrics、Specatator等 全链路追踪 skywalking、Zipkin、Brave、Dapper等 服务部署 Docker、OpenStrack、Kubernetes等 数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit,kafka等发送接收消息) 时间消息总线 SpringCloud Bus

结构简图:

    外部请求: 来自移动端(Android、IOS…)、浏览器客户端等发起的HTTP请求。 Feign 用于微服务之间的通信,集成了负载均衡(Ribbon)及熔断器(Hystrix)。从代码层面来说可以减少代码的冗余,一个功能接口开放出来,其他模块都调用就行了,也便于后期维护。 Eureka_Server 是服务的注册中心,注册表中会记录各个服务(Eureka_Client)的信息,负责管理所有的服务资源,Eureka_Server注册中心会根据Feign的请求信息及负载均衡规则确定具体的服务。 Ribbon 作用是负载均衡,在高可用的情况下某一类服务会部署多个,以达到高并发,高可用性的目的,默认以 轮询 的方式去为服务分配请求,比如有服务1、服务2、服务3都属于A类服务,陆陆续续来了6个A类服务的请求,那么就会依次分配给1、2、3、1、2、3,也可以自定义其他负载均衡策略,如 服务可用性权重、自定义权重、随机等。 Eureka_Client 其本质就是一个个的Spring Boot项目,分布式的架构下会将项目中的独立功能模块解耦出来作为一个Spring Boot项目,Spring Boot项目启动后会根据配置将自己注册到指定的Eureka_Server服务注册中心(有集群需要,可注册到多个注册中心),这样在外部调用的时候找到具体的服务了。 Hystrix Hystrix是一个熔断、降级的框架。 降级:相对于消费者(consumer)来说的,当被调用服务不可用时转而调用备用服务; 熔断:相对服务提供者(provider)来说的,当自身方法(泛指)调用出错时调用备用方法。 底层原理是为每个类型的服务创建独立的线程池,前面有说到注册中心会根据外部请求规则筛选服务,那么是根据什么规则呢?其实最主要的是服务的可用性,服务无法响应或延时较高,则会调整熔断器的状态,需要注意的是当服务熔断后,注册中心并不会立即清除该服务,而是启动安全模式,保存该服务状态信息,等待服务正常后解除安全模式。
经验分享 程序员 微信小程序 职场和发展