开发者学堂课程【精通 Spring Cloud Alibaba:分布式注册的中心的实现原理】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/634/detail/10065
分布式注册的中心的实现原理
内容介绍
一、引例
二、注册中心
三、整个微服务的注册中心实现原理
四、服务注册原理实现
一、引例
问:
上章中基于数据库形式实现微服务url治理的缺点:维护成本非常高、没有完全绝对实现动态智能,思考是否有更好的方案?
答:
使用微服务中的注册中心
二、注册中心
整个微服务架构中最为核心的肯定是注册中心。
1. 概念
注册中心实际就是存放我们整个微服务中的服务的地址信息,能够实现动态感知。(核心思想)
2. 有哪些?
相当于一个容器,用于存放服务器地址,数据库同理。
注册中心:Dubbo 依赖 Zookeeper、Eureka 、 Consul、Nacos、Redis、数据库
3.面试
面试官常问Nacos与Eureka区别、Eureka和Zookeeper
(其中Nacos结合了Eureka和Zookeeper两者的信息)
三、整个微服务的注册中心实现原理
1.步骤
- 第一步:就是将我们的服务地址信息注册到注册中心中
讲解:
首先选取一个注册中心 Eureka、Nacos 或 Consul,注册中心存放了每个服务器的地址信息,但它并不会存放地址名称和接口,注册中心并不会储存整个完整的服务器,它只会存放 IP 地址和端口号,因为只有这些才会发生改变。
而注册中心的实现是通过会员服务启动时将IP地址和端口号加上服务名称。假设 key为 mayikt-member,而此时的 key 就是会员服务名称,指向的就是有关于会员服务相关的。会员服务就会把IP地址和端口号添加到注册中心中,将其存放起来。
- 第二步:订单服务使用会员服务名称从注册中心上获得注册信息列表
讲解:
订单服务因为未存放会员服务地址,就需要拿到会员服务名称,再去使用会员服务名称从注册中心上获得注册信息列表。
即通过会员服务中的会员服务名称 mayikt-member 在注册中心获得 IP 地址和端口号(182.168.212.110:8080)。
- 第三步:获取到地址并且在本地实现 rpc 远程调用其中有很多基础,比如:
HttpClient、rest、openfeign 等
讲解:
订单服务获取到地址后,就会在本地实现 rpc 远程调用,同时 rpc 远程调用会使用许多原客户端 HttpClient、rest、openfeign。
2.会员服务的名词拓展
会员服务在微服务注册中心还有以下的名词:
服务注册:提供服务接口地址信息存放
生产者:提供我们接口被其他的服务调用
消费者:调用接口实现消费
如图图中为订单服务调用会员服务去实现消费,会即员服务为生产者、订单为消费者。
3. 总结
会员服务作为生产者会把当前的 ip 地址和服务端口号,注册到注册中心中,而订单服务作为消费者如果想要通过服务名称在注册中心上去获取调用地址,再在本地实现 rpc 的远程调用。
四、服务注册原理实现
1.生产者启动的时候 key=服务的名称 value ip_和端口号注册到我们的微服务注册中心上
Mayikt-member 192.168.212.110:8080
Mayikt-member 192.168.212.110:8081
(服务地址可能做集群,有多个,因此注册存放服务取地址列表类型是key唯一,列表是list集合类型)
2.注册存放服务取地址列表类型:key唯一,列表是list集合。
Map
{
Mayikt-member:[“192.168.212.110:8080”“192.168.212.110:8081”]
}
3. 我们的消费者从我们注册中心上根据服务名称查询服务地址列表(集合)
Mayikt-member==[“192.168.212.110:8080”“192.168.212.110:8081”]
(根据 Mayikt-member 去获取数组,而消费者获取列表后再采用负载均衡器选择一个地址进行调用)
4. 消费者获取到集群列表之后,采用负载均衡器选择一个地址实现 rpc 远程调用。
(同时要注意是客户端本地做负载均衡,因为本地效率更高)