文章目录
1. 微服务问题解决·服务治理问题
1.1 问题抛出
问题抛出:假如我们服务提供者user-service部署到多个服务器:
- ① 在order-service发起远程调用时,如何得到user-service
实例的IP和端口
?- ② 当user-service实例进行了
集群搭建
,order-service调用时如何选择
?- ③ order-service如何得知某个user-service实例
是否依然健康
,其是否发生宕机
?
1.2 解决方法
组件 | 说明 |
---|---|
Eureka | |
Nacos |
2 Eureka注册中心
2.1 Eureka解决的问题
问题回顾:假如我们服务提供者user-service部署到多个服务器:
- ① 在order-service发起远程调用时,如何得到user-service
实例的IP和端口
?- ② 当user-service实例进行了
集群搭建
,order-service调用时如何选择
?- ③ order-service如何得知某个user-service实例
是否依然健康
,其是否发生宕机
?
2.2 Eureka的结构和作用
2.2.1 Eureka的作用
2.2.2 order-service如何得知user-service实例地址 ?
流程如下:
① 服务注册:user-service启动后,将自己的信息注册
到eureka-service(Eureka服务端)。
② eureka-service保存服务名称
与服务实例IP地址
的映射关系。
③ 服务发现、服务拉取:order-service根据服务名称,拉取
(user-service)实例地址列表。
2.2.3 order-service如何从多个user-service实例中选择具体实例 ?
流程如下:
- ① order-service从实例列表中利用
负载均衡算法
选择一个实例地址。- ② 向该实例地址发起远程调用
2.2.4 order-service如何得知某个user-service实例是否健康 ?是否宕机 ?
流程如下:
- ①
心跳检测机制(ping - pong)
:user-service会每隔一段时间(默认30秒)向eureka-service发送请求,报告自己状态。- ② 当超过一定时间
没有发送心跳
时,eureka-service会认为微服务实例故障
,将该服务从服务列表中剔除
。- ③ order-service拉取服务时,
实现
将故障实例排除
。