对于微服务的治理而言,核心就是服务的注册和发现。所以选择哪个组件,很大程度上要看它对于服务注册与发现的解决方案。在这个领域,开源架构很多,最常见的是 Zookeeper,但这并不是一个最佳选择。除了服务注册与发现,还有负载均衡、断路容错、服务监控等等。
在分布式系统领域有个著名的 CAP 定理:
- 一致性(Consistency):一致性主要指的是数据一致性,在分布式系统中的所有数据备份,在同一时刻是否同样的值。
- 可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。
- 分区容错性(Partition tolerance):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。
Spring Cloud 服务注册和发现
Spring Cloud 的服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息。不仅如此,即使服务提供者的信息发生变化,服务消费者也无须修改配置文件。
服务注册发现组件提供这种能力。在微服务架构中,服务注册发现组件是一个非常关键的组件。
Spring Cloud 的服务注册与发现有很多种选择,如 Eureka、Consul、Zookeeper 等。
Eureka
Eureka 是 Netflix 开源的服务注册发现组件,本身是一个基于 REST 的服务。它包含 Server 和 Client 两部分。Spring Cloud 将它集成在子项目 Spring Cloud Netflix 中,从而实现微服务的注册与发现。
Eureka 的 GitHub : https://github.com/Netflix/eureka。
Netflix 是一家在线影片租赁提供商。
Consul
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案。Consul 使用 Go 语言编写,因此具有天然可移植性,安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
Zookeeper
Zookeeper 也可以作为 Spring Cloud 的服务注册与发现。ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
各组件比较
下面是 Spring Cloud 支持的服务注册发现组件以及特性对比:
Feature\Component | euerka | Consul | Zookeeper | etcd |
---|---|---|---|---|
服务健康检查 | 可配支持 | 服务状态,内存,硬盘等 | (弱)长连接,keepalive | 连接心跳 |
多数据中心 | - | 支持 | - | - |
KV 存储服务 | - | 支持 | 支持 | 支持 |
一致性 | - | raft | paxos | raft |
CAP | AP | CA | CP | CP |
使用接口(多语言能力) | http(sidecar) | 支持 http 和 dns | 客户端 | http/grpc |
watch 支持 | 支持 long polling/大部分增量 | 全量/支持long polling | 支持 | 支持 long polling |
自身监控 | metrics | metrics | - | metrics |
安全 | - | acl /https | acl | https 支持(弱) |
spring cloud 集成 | 已支持 | 已支持 | 已支持 | 已支持 |