Spring Cloud 教程

Spring Cloud 笔记

Spring Cloud 服务治理


对于微服务的治理而言,核心就是服务的注册和发现。所以选择哪个组件,很大程度上要看它对于服务注册与发现的解决方案。在这个领域,开源架构很多,最常见的是 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 集成 已支持 已支持 已支持 已支持