spring cloud 微服务组件

spring cloud 微服务组件

简介

spring cloud 为开发人员提供了快速构建分布式系统的一些通用组件。这些组件实现的功能比如有:服务注册中心,配置中心,服务网关,服务跟踪,负载均衡,断路器,消息总线,数据量,批量任务等。

服务调用方式采用REST API,相对来说,dubbo RPC对服务提供方接口依赖太强。使用http REST API,整个微服务系统不再必须依赖java平台,任何一种实现提供rest风格的实现都可能成为微服务的成员。

spring cloud 的组件

  • Spring Cloud Config
  • Spring Cloud Netflix:Eureka,Zuul, Ribbon, Feign, Hystrix
  • Spring Cloud Bus
  • Spring Cloud Consul
  • Spring Cloud Sleuth
  • Spring Cloud Data Flow
  • Spring Cloud Stream
  • Spring Cloud Task
  • Spring Cloud Zookeeper
  • Spring Cloud Connectors
  • Spring Cloud Starters
  • Spring Cloud CLI

一、服务发现

spring cloud 提供了三个服务发现的封装:consul,eureka,zookeeper。这里选择Netflix提供的服务发现Eureka

Eureka,服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册服务的界面。

所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。

图1:角色解释:

  • Eureka Server:提供服务注册和发现
  • Service Provider:服务提供方,将自身服务注册到Eureka。服务注册、服务续约、服务下线。
  • Service Consumer:服务消费方,从Eureka获取注册服务列表,从而能够消费服务。

高可用配置: 注册中心单机,如果挂了,将导致整个服务不可用。生产环境不可能只有一个实例。 下图为官网给出的高可用集群架构图。

它的集群实现很简单,就是相互注册,同步信息。

二、 配置中心

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持,使用Config Server可以集中管理所有环境中应用程序的外部属性。

流程:

  1. 服务启动时从本地配置获取config server的地址,或者通过注册中心获取config server地址。
  2. 调用config提供的接口获取配置
  3. 如果git仓库有修改,POST请求config server的/bus/refresh接口,config通过消息总线通知服务节点
  4. 服务节点接到通知后,重新到config获取新配置。

说明:

  1. 第3点提到的POST请求可以通过git的hook功能实现。
  2. 为实现高可用,config server集群注册到Eureka等注册中心。
  3. 更新配置可以具体到某一个服务。

三、HTTP负载均衡客户端

如果java请求http,一般使用httpclient直接请求特点的URL路径。netflix提供了两个http服务站均衡客户端:Ribbon和Feign

服务注册到注册中心之后,同一个服务的ID是相同的,Ribbon只需要从注册中心获取服务ID,即可访问,并代理RestTemplate实现负载均衡。Feign声明式客户端,使得访问远程服务可以像调用本地方法一样,有点想dubbo的使用方式。

四、断路器

在微服务中,一个请求进来可能需要调用多个服务,如果其中一个服务出现故障,比如超时堵塞。导致其他请求进来也堵塞从而导致线程耗尽等情况。一个服务不可能用导致整个服务不可用,Hystrix为解决这个问题。 断路器(Cricuit Breaker):

  1. 服务不可用自动断开(快速失败):如果对某服务调用错误次数达到一个值,后续服务都会快速失败,有点像保险丝。
  2. 服务可用时自动恢复:熔断并没有完全断,还会允许少量请求,以判断服务状态是否允许恢复。
  3. 资源隔离:对依赖服务调用会在单独的线程池中进行。
  4. 监控:Dashboard 提供成功率、平时响应时间、调用频次、断路器状态等监控。

其他组件待续

CONTENTS