什么是服务发现?
服务发现,Service Discovery,是一项提供服务发布和查找的服务,其实质就是键值存储,通过键(Key,在当前语境应是服务名)找到值(Value,在当前语境是服务)。DNS 就是一个简单的例子,人们或其他服务使用域名向 DNS 请求 IP 地址,Key 就是域名,Value 就是 IP 地址。
服务发现是支持大规模 SOA(service-oriented architecture)的核心服务,需具备以下关键特性:
- 注册(Registration),新增服务到服务列表;
- 目录(Directory),即服务列表;
- 查找(Lookup),通过服务名找到服务。
服务元数据(metadata,包括服务的 IP、端口、提供的服务等等信息)存储是服务发现的关键。
服务发现还需提供查询所有服务的部署状态和集中控制所有服务实例的方式。
服务发现解决方案
解决方案 | 特性 | 发起人 |
---|---|---|
Redis | 用 Redis 作为服务中介是最简单的,但不适用于分布式系统,不具备下面的解决方案的优点 | 无 |
ZooKeeper | 提供了包括配置管理、领导人选举和分布式锁在内的完整解决方案 | Apache |
etcd | 与 ZooKeeper 具有相似的架构和功能 | CoreOS |
doozerd | 与 ZooKeeper 具有相似的架构和功能 | Blake Mizerany & Keith Rarick |
Consul | 提供了 DNS 和 HTTP 两种 API | Hashicorp |
Eureka | 在出现网络分区时, Eureka 选择可用性,而不是一致性,适合 AP( Availability and Partition ) 系统。 | Netflix |