今天聊一下服务的注册与发现。大家先思考一个问题,如果有五六个服务,大概100个接口,要调用其中某一个接口,怎么调?首先你得知道服务所在的ip地址和端口吧,然后得知道服务的名字和需要的参数,再然后需要知道参数怎么组织,是用json还是xml,最后就是服务调用成功后,结果的解析。
最简单的办法,在服务的调用方用一个文本文件,记录接口所在的ip和端口,至于接口名称、参数、返回接口和服务方约定好保持一致就行了。发起调用时,先查询文本文件,得到ip地址和端口,然后发起远程调用。我们最早就是这么玩的。但是当接口多了,每次维护都得改文本文件,没起就得停服务。另外当服务想做高并发,我们的做法远远不能满足要求。这就引出了我们今天要说的服务的注册与发现组件,它叫“注册中心”。
1、注册中心的功能
记录部署服务的机器地址,服务消费者在有需求的时候,只需要查询注册中心,输入提供的服务名,就可以得到地址,从而发起调用。
2、注册中心的原理
微服务架构下,主要有三种角色:服务提供者、服务消费者和注册中心,三者关系如下:
- 服务提供者(RPC Server):启动时,向注册中心(registry)注册自身的服务,并向注册中心定期发送心跳汇报存活状态。
- 服务调用者(RPC Client):启动时,向注册中心订阅服务,并把注册中心的服务节点列表混存在本地内存中。
3、注册中心基本的api
- 服务注册接口
- 服务反注册接口:服务提供者通过反注册接口完成服务的注销。
- 心跳汇报接口:通过心跳查看服务提供者是否正常。
- 服务订阅接口
- 服务变更查询接口
- 服务查询接口:查询注册中心当前注册了哪些服务。
3、集群部署
从上面的内容可以看出,注册中心是非常重要的,一旦挂掉,这个系统就崩溃了,生产环境中一般都集群部署。实际动手部署,我们后面再说。
总结一下。注册中心可以说是实现微服务的关键,因为服务拆分后,服务提供者和服务消费者不在同一个进程中运行,实现了解耦,这是就需要注册中心充当一个连接服务提供者和服务消费者的纽带。另外,服务提供者可以任意伸缩即增加节点或者减少节点,通过服务健康状态检测,注册中心可以保持最新的服务节点信息,并将变化通知给订阅服务的服务消费者。