微服务之服务注册发现
# 介绍
服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记 簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服 务注册的工具非常多 ZooKeeper,Consul,Etcd, 还有 Netflix 家的 eureka 等。服务注册有两 形式:客户端注册和第三方注册。
# 客户端注册(zookeeper)
客户端注册是服务自身要负责注册和注销的工作,当服务启动后向注册中心注册自身,当服务下线是注销自己。期间还需要和注册中心保持心跳,心跳不一定客户端来做,也可以由注册中心负责(这个过程叫探活)。这种方式的缺点是注册工作与服务耦合在一起,不同语言都要实现一 套注册逻辑。
# 第三方注册(独立的服务Registrar)
是有一个独立的服务Registrar负责注册和注销,当服务启动时以某种方式通知Registrar,然后Registrer负责向注册中心发起注册工作,同时注册中心要维护与服务之间的心跳,当服务不可用时,向注册中心注销服务。这种方式的缺点是 Registrar 必须是一个高可用的系统,否则注册 工作没法进展。
# 客户端发现
客户端发现是指客户端负责查询可用服务地址,以及负载均衡的工作。这种方式很方便也可直接,一旦发现某个服务不可用可以立即切换到另一个服务。缺点是:多个语言时需要重复编程。
# 服务端发现
服务端发现需要额外的Router服务,请求先到Router服务,然后由Router服务复制查询可用服务和负载均衡。缺点是:要保证Router的高可用。