SpringCloud
轻量级的微服务框架,可以基于springboot的自动配置(减少了自定义的大量代码的编写),实现了多个微服务框架的组件功能。
Eureka |
服务治理 |
Ribbon |
客户端负载均衡调用 |
Zuul |
网关,微服务唯一对外提供的接口 |
Feign |
和ribbon同一种客户端,封装了ribbon |
Hystrix |
熔断器 |
Config |
微服务中配置文件的管理者 |
微服务框架
微服务:
从一个功能比较集中的单体项目中纵向拆分出来独立运行的功能,每个功能的系统叫微服务。
微:纵向拆分。
服务:功能被调用。
微服务框架:
一个框架技术能够管理大量的拆分的独立系统,监控,熔断等功能,这种框架技术叫微服务框架。
1.Eureka服务治理组件
springcloud中的核心组件,可以实现对整个微服务集群所有节点进行服务的发现,服务的抓取和服务监听功能。
服务治理中的三个角色:
服务注册中心:
所有服务的集中管理角色。
服务的提供者:
服务提供者会将自己的信息打包(ip:port,服务名称等),注册在注册中心被注册中心管理和维护(注册)。
服务的调用者:
可以通过对注册中心的访问,获取服务提供者的信息,从而进行负载均衡的调用(抓取发现)。
注册中心的作用:
管理注册者的服务请求:
内部接收注册者的请求,注册者携带本机/节点的详细信息参数(ip:port,服务名称)发送给注册中心,/eureka接收请求,在内存中存储一个双层map对象,保存所有的内容。
服务的监听超时:
多个注册者同时注册一个服务,相当于一个具体的服务被一个集群管理者接收请求,每60秒钟判断是否有服务提供者的续约超时达到90秒,一旦满足条间,将会从内存中间超时的实例中剔除。
注册者实现的逻辑:
注册:
启动后,当前eureka client一旦被赋予注册能力registerWithEureka=true,将会访问注册中心接口8888/eureka,携带详细信息,注册在注册中心,注册中心以服务名称为key值记录一个当前服务的所有节点信息的map对象。
续约:
eureka client一旦在注册中心提供注册的信息,将会在每30秒内发起一次心跳(heartbeat)请求,告知注册中心,当前实例时存货的。
服务剔除:
30:客户端,发起心跳。
60:注册中心,每隔60秒检测一次心跳最后时间。
90:注册中心,检测发现超过90秒没有发起心跳检测,将会把该实例剔除。
注册中心的保护机制:
庞大的集群中,如果按照正常的逻辑,管理一个微服务集群(100个服务,每个20节点,2000个注册者),超时续约的个数如果在15%以内,eureka注册中心,判断是正常超时,将会按照剔除对实例进行内存数据的清除,如果超过15%,认为是不正常超时,将会开启保护机制,一旦开启,所有服务信息(map对象)不会做任何的剔除,形成对微服务的保护。
2.ribbon组件
配合服务治理组件eureka客户端的发现功能,从注册中心抓取最新的服务注册信息,从而可以在代码内部发起向该服务的访问,使用注册信息中实例的详细信息访问不同的节点实现负载均衡--是一个可以调用服务,支持负载均衡访问的springcloud客户端组件。ribbon只能实现管理抓取的拦截逻辑,对restTemplate发送的请求做拦截处理。
实现动态添加扩充服务提供者:
单独访问ribbon工程可以实现springcloud的ribbon组件做服务调用,服务的功能测试,对于被调用的服务service-hi,只要启动9003作扩容的节点,添加到eureka注册中心,注册中心维护的注册信息,将会发生变动。ribbon工程整合了eureka client可以实现服务的抓取,每30秒重新更新抓取一次服务注册信息的map数据。
负载均衡的方式:
RoundRobinRule |
轮询,默认实现的负载均衡的逻辑 |
RandomRule |
随机,随机访问后端服务 |
WeightedResponse TimeRule |
权重访问,权重占比根据后端服务提供者响应的速度, 速度越快占比越高 |
ribbon组件会根据定义的bean对象实现负载均衡,只要创建bean对象就可以,没有发现工程创建任何负载均衡对象,就会默认使用轮询。
//修改自定义的随机负载均衡逻辑
@Bean
@LoadBalanced
public Irule initRule(0{
return new RandomRule();
}
ribbon实现负载均衡访问服务的原理:
注意:SpringCloud中只要是服务调用服务的过程都是通过ribbon+restTemplate实现。