微服务入门
微服务远程调用:
Eureka: 注册中心, 服务注册和发现
Ribbon: 负载均衡, 实现服务调用的负载均衡
Hystrix: 熔断器
Feign: 远程调用
Gateway: 网关
Spring Cloud Config: 配置中心
Eureka注册中心:
简介:
提供服务注册和发现, 是注册中心. 有两个组件: Eureka 服务端和 Eureka 客户端
Eureka-Server:就是注册中心(一个集群),对外暴露地址,用于记录服务与心跳监控
EurelaClient:客户端
(Provider)提供者: 启动后向EureKa注册自己的信息(地址,服务名称等),
每个30秒向EurekaServer发送心跳
(consumer)消费者:服务的调用方,会定期去Eureka拉取服务列表,然后使用负载均衡算法进行调用
心跳(续约):提供者定期通过http方式向EureKa刷新自己的状态
服务下线、失效剔除和自我保护
服务的注册和发现都是可控制的,可以关闭也可以开启。默认都是开启
注册后需要心跳,心跳周期默认 30 秒一次,超过 90 秒没发心跳认为宕机
服务拉取默认 30 秒拉取一次.
Eureka 每个 60 秒会剔除标记为宕机的服务
Eureka 会有自我保护,当心跳失败比例超过阈值(默认 85%),那么开启自我保护,不再剔除服务。
Eureka 高可用就是多台 Eureka 互相注册在对方上
搭建EureKa:
导入eureka-server依赖:
1 | <!-- eureka服务端--> |
配置yaml文件:
1 | server: |
启动类添加注解:
1 |
|
启动访问注册地址,判断是否是正确的:

注册客户端服务:
1 | <dependency> |
在application.yml文件,编写下面的配置:
1 | eureka: |
注册user-service:
可以将user-service多次启动, 模拟多实例部署,但为了避免端口冲突,需要修改端口设置:
order-service完成服务注册跟上面所示一致:
1 | eureka: |
总结:
服务注册引入eureka-client依赖,在application.yml中配置eureka地址
无论是消费者还是提供者,引入eureka-client依赖知道eureka地址后,都可以完成服务注册
依次启动服务,可以完成注册
服务拉取:
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
- 用服务名代替ip、端口:
1 |
|
添加负载均衡接口:
不用关心服务的地址,Eureka 会进行调度。
Ribbon负载均衡
负载均衡原理
当服务发起请求,首先是会被LoadBalancerInterceptor负载均衡拦截器拦截,会得到请求中的服务名并交给RibbonLoadBanlanceClient,然后把服务交给DynamicServerListLoadBalancer,到eureka中拉取注册服务信息,然后根据IRule负载策略选择一个进行替换,最后发现服务。(IRule接口的实现)
负载均衡策略
Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则:
内置负载均衡规则类 | 规则描述 |
---|---|
RoundRobinRule | 简单轮询服务列表来选择服务器。 |
AvailabilityFilteringRule | 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的 |
WeightedResponseTimeRule | 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。 |
ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。 |
BestAvailableRule | 忽略那些短路的服务器,并选择并发数较低的服务器。 |
RandomRule | 随机选择一个可用的服务器。 |
RetryRule | 重试机制的选择逻辑 |
修改负载均衡的策略:
使用@Bean注解:
1 | // 配置规则 |
该种方式是全局配置,所有的服务都是调用该接口。
在配置文件中配置:
配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
1 | eureka: |
只针对某个服务而言
懒加载
饥饿加载:
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
开启饥饿加载: