Spring Cloud Zuul 网关
- 微服务架构中,后端服务往往不直接开放给外部程序调用(否则会有越权等安全问题...),所以需要一个 API 网关,根据请求的 Url 路由到相应的服务。API 网关负责外部应用到微服务系统之间的请求路由、负载均衡和校验过滤等功能的实现。
- 在 Spring Cloud 体系中,Spring Cloud Zuul 组件提供 API 网关的支持。
通过 Spring Cloud Eureka 实现高可用服务注册中心
- 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用。随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果我们每新加一个微服务,就要在其它用到此微服务的地方手动加上它的URL地址或者其他通信协议的地址。
- 它通常与SpringCloudRibbon搭配使用。
通过 Spring Cloud Ribbon 或 Feign 实现服务间负载均衡的接口调用
- Ribbon组件来提供客户端负载均衡。负载均衡是实现高并发、高性能、可伸缩服务的重要组成部分,它可以把请求分散到一个集群中不同的服务器中,以减轻每个服务器的负担。(有点类似zookeeper么)。
通过 Spring Cloud Hystrix 实现线程隔离和熔断,防止故障扩散
- 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
-
Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:
image.png -
较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。
image.png - 断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。(如"网站正在升级中,尽请等待"等告警)
Spring Cloud Config 配置中心
- Spring Cloud Config 用于为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,分为服务端和客户端。
- 服务端为分布式配置中心,是一个独立的微服务应用;客户端为分布式系统中的基础设置或微服务应用,通过指定配置中心来管理相关的配置。
- 在安全的角度看,可以用来做配置与代码分离,未来快速应急(如来漏洞时避免紧急发布,直接调整某开关降级就好了)
Spring Cloud Sleuth 全链路追踪
- 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。
- 举个例子,在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后通过远程调用,达到系统的中间件B、C(如负载均衡、网关等),最后达到后端服务D、E,后端经过一系列的业务逻辑计算最后将数据返回给用户。对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程的数据记录下来呢?这就需要用到服务链路追踪。
- Google开源的 Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。 目前,链路追踪组件有Google的Dapper,Twitter 的Zipkin,以及阿里的Eagleeye (鹰眼)等,它们都是非常优秀的链路追踪开源组件。
Spring Cloud Bus 消息总线
- Spring Cloud Bus用轻量级的消息代理将分布式系统的节点连接起来。这可以用来广播状态的该表(比如配置的改变)或者其他关联的指令。一个关键的想法是,总线就像是一个分布式Actuator,用于Spring Boot应用程序的扩展,但它也可以用作应用程序之间的通信通道。Spring Cloud提供了AMQP 传输的代理和Kafka启动Starters,对具有相同的基本功能集的其他传输组件的支持,也在未来的规划中。
- Spring Cloud Bus是在Spring Cloud Stream的基础上进行的封装,对于指定主题的消息的发布与订阅是通过Spring Cloud Stream的具体binder实现。
-
从安全上的理解,SpringCloud Bus可以提供一个接口给后端服务进行订阅与发布。
image.png
Spring Cloud Feign 文件传输
- 普通的文件上传下载中间件。
网友评论