# 注册中心
注册中心主要是为分布式服务的**发布与发现**提供一层统一标准化的基础组件,便于使用者直接操作简单接口即可实现服务发布与发现功能。
## 服务注册
服务注册有两种形式:**客户端注册**和**代理注册**。
### 客户端注册
客户端注册是服务自己要负责注册与注销的工作。当服务启动后注册线程向注册中心注册,当服务下线时注销自己。
这种方式缺点是注册注销逻辑与服务的业务逻辑耦合在一起,如果服务使用不同语言开发,那需要适配多套服务注册逻辑。
### 代理注册
代理注册由一个单独的代理服务负责注册与注销。当服务提供者启动后以某种方式通知代理服务,然后代理服务负责向注册中心发起注册工作。
这种方式的缺点是多引用了一个代理服务,并且代理服务要保持高可用状态。
## 服务发现
服务发现也分为客户端发现和代理发现。
### 客户端发现
客户端发现是指客户端负责向注册中心查询可用服务地址,获取到所有的可用实例地址列表后客户端根据**负载均衡**算法选择一个实例发起请求调用。
这种方式非常直接,客户端可以控制负载均衡算法。但是缺点也很明显,获取实例地址、负载均衡等逻辑与服务的业务逻辑耦合在一起,如果服务发现或者负载平衡有变化,那么所有的服务都要修改重新上线。
### 代理发现
代理发现是指新增一个路由服务负责服务发现获取可用的实例列表,服务消费者如果需要调用服务A的一个实例可以直接将请求发往路由服务,路由服务根据配置好的负载均衡算法从可用的实例列表中选择一个实例将请求转发过去即可,如果发现实例不可用,路由服务还可以自行重试,服务消费者完全不用感知。