本章知识点:注册中心的诞生背景、注册中心的设计思路以及搭建Nacos的Server 单机版以及集群版。
Springboot 2.3.12.RELEASE,spring cloud Hoxton.SR12,spring cloud alibaba 2.2.9.RELEASE
试想一下这个场景,如果要对某个服务进行迁移,如从北京机房迁移到杭州机房,导致它的IP有了变动,这就需要去更改代码(或者配置文件)中的URL。如果变动的服务数量很多,在每个服务里都要对它的配置进行修改,修改代码(或者配置文件)的工作量就会很大,如果手一抖,敲错了IP中的数字,服务调用就会出问题。
该如何解决这个问题呢?其实软件行业中的很多解决方案都来源于实际生活。
大家想一下,一个服务调用多个服务,是不是类似于一个人给多个人打电话。如果要记住多个人的电话号码,是不是很难?并且容易记错。那怎么办呢?答案是使用通讯录。
例如,张三要给李四打电话,有以下两种情况。
(1)没有通讯录。张三需要在自己的脑海中记住李四的电话号码,当需要给李四打电话时,张三回忆起号码(记忆力强,没记错号码)后,拿出手机拨号。
(2)有通讯录。张三无须记住李四的电话号码(张三的大脑好轻松),当需要给李四打电话时,张三先去通讯录查一下李四的号码,查到号码后拿出手机拨号。当李四的电话号码有更改时,只需要把通讯录中李四的号码进行更正即可。
其实微服务之间的调用,和打电话时利用通讯录是一样的。
通过微服务和通讯录的类比,如果要设计一个注册中心,应该如何设计呢?
程序是数据结构和算法的结合,那么要设计一个注册中心,要从下面两个方面来考虑。
存储结构。注册中心要存储哪些数据?怎么存?
提供的操作。注册中心可以提供哪些操作供服务使用?
注册中心的存储结构还是类比一下通讯录。生活中的通讯录,存储的信息如图2-1所示。
? 图2-1
同理,注册中心是不是也应该这样存储信息呢(见图2-2)?
图2-2
那么在程序中如何存储信息呢?通过上面的存储内容和存储方式是不是能想到Java中常用的数据结构Map?我们打开Eureka的源码印证一下。在AbstractInstanceRegistry.java中有一个属性,代码如下。
图2-3
该属性的存储结构用的是ConcurrentHashMap,它的键值是服务名,值是一个Map。而值的Map中键是服务实例ID,值是租约(租约里面包括服务信息)。注册表的数据存储结构如图2-3所示。
? 图2-4
通过上面的分析,我们知道了服务的注册信息如何存储。那么需要对服务的注册信息进行哪些操作呢?
1)我们想一下,服务启动后是需要向注册中心进行注册的,所以注册中心需要提供一个接口,让服务调用该接口来进行服务的登记注册,这就是注册中心的第一个功能,接收服务注册。
2)服务注册完成后,注册中心需要知道这个服务是否还是有效服务?所以需要服务定期地告诉注册中心自己的工作状态(是否可用)。此时需要注册中心提供第二个功能,接收服务心跳。
3)当服务下线时也要通知注册中心,注册中心需要提供对应的接口来让服务调用。此时需要注册中心的第三个功能,接收服务下线。
4)如果服务出现故障没有及时通知注册中心,此时注册中心也发现服务最近没有发送心跳,注册中心要主动剔除出现故障的服务。此时需要注册中心的第四个功能,服务剔除。
5)注册表中存储的信息是要供其他服务查询的,就像通讯录一样要供主人查阅,所以注册中心还需要第五个功能,查询注册表中的服务信息。注册表中存储的信息是要供其他服务查询的,就像通讯录一样要供主人查阅,所以注册中心还需要第五个功能,查询注册表中的服务信息。
6)一般微服务中每个服务都要避免单点故障,注册中心也要做集群,所以还涉及注册中心之间注册信息的同步问题。这就是注册中心的第六个功能,注册中心集群间注册表的同步。
通过以上介绍,基本上将注册中心的需求分析清楚了。其实注册中心的本质就是一个Web服务,通过提供上面分析的6个接口供服务调用。这就是注册中心服务端,而对应的调用注册中心的服务(业务服务)一般称为注册中心客户端。
使用注册中心分为如下两步操作。
1)搭建注册中心服务端。
2)启动业务服务(即注册中心客户端),让服务和注册中心连通。
单节点Nacos Server的搭建步骤如下。
(1)下载Nacos组件。
打开Nacos的github地址https://github.com/alibaba/nacos/releases。下载nacos-server-2.1.0.tar.gz并解压。
(2)启动Nacos。在Linux系统下,执行下面的启动命令(standalone代表单机模式运行,非集群模式)。
sh startup.sh -m standalone
Nacos启动界面如图2-17所示。就表示Nacos启动成功。
图2-5
(3)访问Nacos。在浏览器中访问
http://你的ip:8848/nacos/index.html,在打开的页面中输入用户名nacos和密码nacos即可登录。
在页面左侧选项栏中选择“服务管理”→“服务列表”选项,在页面右侧将显示Nacos作为服务注册中心的管理界面,如图2-19所示。至此Nacos启动成功。
图2-6
无需进行任何配置
生产使用建议至少主备模式,或者采用高可用数据库。
在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)
# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848
使用内置数据源
sh startup.sh -p embedded
使用外置数据源
sh startup.sh
注意:关闭防火墙
1、了解注册中心的诞生的背景。
2、掌握注册中心设计的基本思路以及一个注册中心需要具备的几大功能特性。
3、通过主流的注册中心nacos为例,单机安装和集群安装。
4、熟悉nacos后台管理系统的基本操作。
通过上述任务的练习,掌握注册中心的基本用法。