分布式服务注册中心

注册中心

在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。服务之间如何相互感知?服务如何管理?这时就轮到注册中心出场了。

服务提供者启动后首先向注册中心注册当前地址,服务调用者向注册中心查询提供者的地址来调用服务。

Dubbo

上图是Dubbo框架图,Registry即是注册中心,通常使用zookeeper

Spring cloud中,则大部分使用eureka作为注册中心。其框架图如下:

Eureka

除了这两者之外,还有Consuletcd等可以选择,它们同异如下表:

Feature Consul zookeeper etcd euerka
服务健康检查 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳 可配支持
多数据中心 支持
kv存储服务 支持 支持 支持
一致性 raft paxos raft
cap ca cp cp ap
使用接口(多语言能力) 支持http和dns 客户端 http/grpc http(sidecar)
watch支持 全量/支持long polling 支持 支持 long polling 支持 long polling/大部分增量
自身监控 metrics metrics metrics
安全 acl/https acl https支持(弱)
spring cloud集成 已支持 已支持 已支持 已支持
关于CAP

CAP理论是分布式架构中重要理论:

一致性(Consistency) (所有节点在同一时间具有相同的数据)

可用性(Availability) (保证每个请求不管成功或者失败都有响应)

分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。

Eureka典型的AP,作为分布式场景下的服务发现的产品较为合适,服务发现场景的可用性优先级较高,一致性并不是特别致命。其次 CA 类型的场景 Consul,也能提供较高的可用性,并能 k-v store 服务保证一致性。 而Zookeeper,Etcd则是CP类型,牺牲可用性,在服务发现场景并没太大优势。

在部署注册中心集群的时候需要注意的是除了Eureka对部署数量没有特别的限制外,其他三种都因为使用了一致性协议(paxos,raft)需要部署基数个。

参考链接