类比Eureka 相关的服务注册中心
首先思考自研一套服务注册中心需要考虑的因素:
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(P):就是当由于网络故障之时,导致集群里的机器不能保证其互相保持正常通信之时,每台机器所具备各自为战能力,保证服务能否正常使用
自研一套分布式注册中心如果要做得相对完善,对技术(并发,线程安全)还是有一定的深度的要求的。
中小型公司在成本的考虑下可选择现在市场上主流的几个服务发现的产品:(引用文档)
Feature | euerka | Consul | zookeeper | etcd |
---|---|---|---|---|
服务健康检查 | 可配支持 | 服务状态,内存,硬盘等 | (弱)长连接,keepalive | 连接心跳 |
多数据服务中心 | — | 支持 | — | — |
kv 存储服务 | — | 支持 | 支持 | 支持 |
一致性 | — | raft | paxos | raft |
cap | ap | cp | cp | cp |
使用接口(多语言能力) | http(sidecar) | 支持http和dns | 客户端 | http/grpc |
watch支持 | 支持 long polling/大部分增量 | 全量/支持long polling | 支持 | 支持 long polling |
自身监控 | metrics | metrics | — | metrics |
安全 | — | acl /https | acl | https支持(弱) |
spring cloud集成 | 已支持 | 已支持 | 已支持 | 已支持 |
虽然官方说过:
The existing open source work on eureka 2.0 is discontinued. The code base and artifacts that were released as part of the existing repository of work on the 2.x branch is considered use at your own risk.
Eureka 1.x is a core part of Netflix's service discovery system and is still an active project.
来自:https://github.com/Netflix/eureka/wiki
大概的意思是关于Eureka 2.0项目已经中断。1.x目前仍是一个活跃的项目。
官方正式发布的版本:https://github.com/Netflix/eureka/tags
maven中:
至今位置官方正式发布的版本已经到1.9.12并且社区还是活跃状态,所谓的2.x停止维护,其实对我们的影响可以说是微乎其微。因为目前所使用的都是1.x版本。所以Eureka仍然是一个很好的选择。但是互联网中各种技术的发展和取舍不妨尝试其他的技术,也许会更合适某些需求场景。
个人见解:用户体验重要的项目首选Eureka,保证高可用。至于一致性嘛,能够保证最终一致性就好。如果追求强一致性,例如金融行业可以选择Consul或许更加合适。
阅读参考链接:
服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
本人才疏学浅,以上纯属个人理解,如有不对,还望批评指正。