Spring Cloud(十二):分布式配置管理 Config 之 配置详解
本篇是前面两篇 Config Git 和 JDBC 实现的文章的延续,主要对 Spring Cloud Config 服务器端和客户端的相关配置进行详细的描述。
具体包括引导启动、服务存储库、健康检测、安全认证、集成服务发现、请求失败重试等配置详解。
本篇是前面两篇 Config Git 和 JDBC 实现的文章的延续,主要对 Spring Cloud Config 服务器端和客户端的相关配置进行详细的描述。
具体包括引导启动、服务存储库、健康检测、安全认证、集成服务发现、请求失败重试等配置详解。
Spring Cloud Config 支持 Git 和 JDBC 做为后端存储库,默认是 Git 存储库,对于开发来说是方便且易于理解的;但对于运维来说,因涉及 Git 操作,可能就不那么方便了。
另外,如果能给分布式配置管理提供 Web 控制台来操作就非常直观和方便了,JDBC 存储库就可以较好的应用在 Web 应用中。
在微服务架构集群部署的环境中,可能会有十几甚至几十个服务,若要修改项目属性参数,手动的方式是很糟糕的,所以就有了分布式配置管理这个概念。
将服务器的配置外部化,可以存在文件或数据库中,一个专门用于管理应用服务配置的应用,可以随时修改和自动更新到目标服务器上。目前已有开源项目,如,smconf、disconf、QConf。
Spring Cloud Config 为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Config Server,可以在所有环境中管理应用程序的外部属性。Spring Cloud Config 官方文档,spring-cloud-config Github。
该篇是 Spring Cloud系列(八):路由和过滤器之API网关 Zuul 的延续,主要讲解 Zuul 的相关配置,比如编码、过滤器、熔断回退、超时、跨域等。
API 网关是对外服务的一个入口,隐藏了内部架构的实现,是微服务架构不可或缺的一部分。
Zuul 是 Netflix 基于JVM的路由器和服务器端负载均衡器。Zuul 能够与 Eureka、Ribbon、Hystrix等组件配合使用。
相关文档可参考Spring Cloud文档:Router and Filter-Zuul Netflix Zuul GitHub,Zuul Wiki 文档
HystrixCommand 中除了 fallbackMethod,还有很多的配置。详细可查看 原生 Netflix Hystrix,Netflix Hystrix Wiki 文档。
微服务架构中,会有多个可调用的微服务,一个请求可能会连续调用多个服务,若其中某一个服务失败可能会导致级联失败(连锁反应),最终导致整个系统不可用,这种情况称之为服务雪崩效应。
Netflix 为微服务架构开发了一个 Hystrix 中间件(库),用于实现断路器功能,类似于电路中的保险丝。Hystrix 通过 HystrixCommand 对服务调用进行隔离来阻止故障连锁反应,能够让接口调用快速失败并迅速恢复正常、或者回退并优雅降级到另一个受 hystrix 保护的调用。
原生 Netflix Hystrix,Netflix Hystrix Wiki 文档,Spring Cloud Hystrix 文档。
Feign 是一个声明式 Web 客户端,让 Rest 服务调用更简单。要使用 Feign ,只需在编写接口并添加其注解,就可以定义好 http 请求的参数、格式、地址等信息。
Feign 会完全代理 Http 请求,只需向调用方法一样调用 feign 注解的客户端就可以完成服务请求及相关处理。
Spring Cloud 支持集成 Ribbon 和 Eureka,Feign 和他们一起使用时支持客户端负载均衡功能。Spring Cloud OpenFeign 文档。
Ribbon 是 Netflix 开源的内置了软件负载均衡器的进程间通信(远程调用)库。支持负载均衡、容错处理、异步和响应式模型中的多协议(HTTP、TCP、UDP)支持、缓存和批处理。
目前行业常见的负载均衡方案分两种:一种是集中式负载均衡,在消费者与服务提供方中间使用独立的代理方式进行负载,有根据 IP 的硬件负载(如 F5,Array), 有软件的负载(如 Nginx,LVS等);另一种是客户端自己做负载均衡,根据自己对目标的请求做负载,Ribbon 就是属于客户端侧的负载均衡。
后续要讲到的 Rest 客户端 Feign 也是基于 Ribbon 实现的。
Spring Cloiud - Client Side Load Balancer: Ribbon 文档,Netflix Ribbon 官方文档,Ribbon 负载均衡文档,
分布式微服务在生产环境必须搭建集群来保证高可用,集群至少需要搭建两台服务器。
Eureka 的集群搭建配置非常简单,每一台 Eureka 只需在配置中指定另外多个 Eureka 的地址就可实现集群的搭建。官方文档:12. Service Discovery: Eureka Server。