前言
读者:对spring、spring boot有一定了解
难度:初中级,旨在快速应用于项目
参考文献:网络、书籍、官方文档,有任何错误欢迎大家留言拍砖指正
实战模拟源码:,使用spring-cloud dalston版本
2. Spring cloud
2.1. 版本说明
spring-cloud 版本号并没有像其他spring项目使用类似1.x.x的命名方式。由于spring cloud不像spring社区其他一些项目那样相对独立,它是一个拥有众多项目的大型项目,其包含的各个子项目也独立进行着内容更新与迭代,各自都维护着自己的发布版本号。因此每一个spring cloud的版本都会包含多个不同版本的子项目,为了管理每个版本的子项目清单,避免spring cloud的版本号与其他子项目版本号相混淆,没有采用版本号的方式,而是通过命名的方式。
2.2. 服务治理对比
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集成 | 已支持 | 已支持 | 已支持 | 已支持 |
总的来看,目前Consul 自身功能,和 cloud对其集成的支持都相对较为完善,而且运维的复杂度较为简单,Eureka 设计上比较符合场景,但还需持续的完善。根据自身业务场景自行选择最适合的服务治理方案。
分布式领域CAP理论
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
2.3. 实战模拟
我们会讲解企业经常使用的sping cloud 模块, 包括Spring Cloud Config(配置管理)、spring-cloud-starter-eureka(服务治理)、spring-cloud-starter-feign(声明式服务调用)、spring-cloud-starter-hystrix(熔断器)、spring-cloud-starter-ribbon(客户端负载均衡)、spring-cloud-starter-zuul(api网关)、Spring Cloud Zookeeper(服务治理与配置)
注意:在使用demo过程中DiscoveryClient服务发现的时间默认是30秒。比如先启动注册中心,已经启动了一个服务提供者client1,再启动消费者,这时消费者能消费client1,这时再启动client2,注册中心会看到client2已经注册成功,但是消费者并不能马上访问到client2服务,需要等30秒后方能访问