引言

spring cloud是什么?看官网的介绍

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.

翻译如下

Spring Cloud为开发人员提供了快速构建分布式系统中常见功能模式(比如,配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式session、集群状态)的工具。分布式系统的协调性需求引致了这些boilerplate模式。开发人员可以使用SpringCloud快速的构建起使用了这些模式的应用和服务。而且可以在不同的分布式环境下工作良好,包括开发者的笔记本电脑,裸机数据中心或者Cloud Foundry这样的云平台。

可见,spring cloud提供的快速实现分布式环境下常用的功能模式的能力。所以学习spring cloud的前提是要了解这些所谓的功能模式是什么含义。

下面列举spring cloud的常用组件和对应的模式的意义,多为自己总结,仅供参考。

常见模式及对应组件

服务注册及发现[eureka、consul]

微服务环境下,服务间需要互相调用。那么存在两个问题,从调用方来说,如何找到需要调用的服务?从被调用方,如何让调用方发现自己的服务?最简单的是硬编码,显然耦合太多,但是在运维方面的问题就会很大,无法自动化,无法实现如负载均衡,自动扩容等等。另一个办法就是提供一个服务注册和发现的server,所有的服务提供方将自己能够提供的服务注册到该server,调用方则去该server上去查找相应的服务。server居中管理服务,与各客户端保持服务状态的同步。这个过程就是服务的注册与发现过程。

spring cloud提供了多个服务发现和注册方案。其中Netflix的eureka曾经很流行,但2.0后将不再维护。hashicorp开源的consul则是功能更为全面的选择,除了服务注册发现,consul还提供了k-v存储等其它功能,并且原生支持跨数据中心。

API网关(SpringCloudGateway\Zuul)

微服务架构下的服务粒度很细,对外部而言使用难度增加,完成一个业务操作可能会调用多个服务,同时从外部而来的服务调用都需要验证鉴权这类的安全处理,每个服务都去重复此类操作是毫无意义而且成本高昂的。为此,在微服务之前加入API网关,技术上统一处理重复的验证鉴权等操作,业务上聚合微服务给外部使用,降低使用成本。

Netflix提供了zuul,技术上来说是接管请求,并且加载各种Filter组成责任链依次执行。因此,zuul可以提供Filter来验证鉴权等操作,也可以通过提供另外的Filter来作路由转发。

Spring Cloud Gateway,基于spring5提供的reactor技术栈,异步处理,性能更好。