服务注册与发现

来源:互联网 发布:淘宝开店条件和流程 编辑:程序博客网 时间:2024/05/12 19:17

在分布式系统中,各个子系统都是多个实例存在,这个时候必须要引入一个服务协调器,用于给调用方提供可用的调用提供者的命名消息。
服务协调器,如zookeeper,etcd,eureka
他们必须要有的特性:
- 本身高可用,由多个服务节点构成,就算有些节点挂掉也不影响正常运行,避免了单点故障。
- 本身是一个分布式,一致性的 k-v 存储系统。提供方启动的时候将自身配置信息向协调器中进行注册,提供方下线的时候向协调器进行反注册。服务调用方只要watch对应的配置,当协调器有对应的配置进行更改,就会通知调用方。
- 提供心跳机制,如果方程序意外挂掉,没有进行反注册,协调器也会超时剔除不可用的提供方。
- 服务协调器本身不提供负载均衡服务,负载均衡由调用方根据自己设定的策略进行路由调用。

传统的内置DNS虽然有些相像的功能,但是并不能用于服务注册与发现

  • 本身不是高可用的,存在单点故障。
  • 服务不能自动注册与自动发现。注册过程与反注册必须手动或者通过小程序通知DNS服务器。
  • 服务调用方通过内部域名轮训DNS,DNS会自动根据负载均衡策略提供其中一个调用方的IP。这会存在两个问题。
    • 第一是DNS服务器本身支持的负载均衡策略很少而且无法根据自己的要求自己定制。
    • 第二是调用方第一次轮训DNS后会在本地缓存查询结果,在有效期内是直接针对某个调用方发起调用。调用提供者集群存在上线、下线操作,DNS是更新了,但是某个调用方还是会缓存已经下线的服务提供者导致调用失败。
  • 没有提供心跳机制,提供方挂了都无法知晓。

类似的还有nginx,多用于http反向代理,提供负载均衡服务,并不能用于服务注册与发现。

0 0