一、SpringCloud介绍

简介

Spring Boot:旨在简化创建Spring 应用和服务,约定优于配置的Web框架,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。spring boot本身并没有新增多少功能,只是将现有的常用的框架和类库整合起来。

Spring Cloud:微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。

SpringCloud组件

在这里插入图片描述
Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。
Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

服务治理组件(Eureka)

在这里插入图片描述
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。由两个组件组成:Eureka服务端和Eureka客户端。
Eureka服务端用作服务注册中心。支持集群部署。
Eureka客户端是一个java客户端,用来处理服务注册与发现。在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

配置管理组件(Config)

在这里插入图片描述
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都依靠必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。于是 Spring Cloud 提供了 Spring Cloud Config 来解决这个问题
Spring Cloud Config 为服务端和客户端各应用的所有环境,提供了适用于分布式系统的,一个中心化的外部化配置支持。说白了:服务端和客户端的所有应用针对每套部署环境,可能都有不同的配置,发布环境时都要注意所使用的配置文件。而通过 Spring Cloud Config 实现的配置中心,能够达到所有应用的所有环境的配置文件统一集中管理,且支持热更新。它默认采用 git 存储配置信息,这样通过 git 客户端工具就可以很轻松的管理配置内容,维护环境配置的版本

断路器组件(Hystrix)

在这里插入图片描述
微服务架构中,一般都存在着很多的服务单元。这样就有可能出现一个单元因为网络原因或自身问题而出现故障或延迟,导致调用方的对外服务也出现延迟。如果此时调用方的请求不断增加,时间一长就会出现由于等待故障方响应而形成任务积压,最终导致自身服务的瘫痪。

为了解决这样的问题:断路器(Cricuit Breaker,或者叫熔断器)模式便出现了。微服务架构中的断路器,其作用就是:当某个服务单元发生故障(类似用电器短路)之后。通过断路器的故障监控(类似熔断保丝),向调用方返回一个错误响应,而不是长时间的等待,这就不会使得线程被故障服务长时间占用而不释放,避免了故障在分布式系统中的蔓延。

而 Hystrix 正是 Netflix 开源的 javanica 提供的微服务框架套件之一,它是由 Java 实现的,用来处理分布式系统发生故障或延迟时的容错库,它提供了断路器、资源隔离、自我修复三大功能。
1)断路器
实际可初步理解为快速失败,快速失败是防止资源耗尽的关键点,当 Hystrix 发现在过去某段时间内对服务 AA 的调用出错率达到某个阀值时,Hystrix 就会“熔断”该服务,后续任何向服务 AA 的请求都会快速失败,而不是白白让调用线程去等待。
2)资源隔离
首先,Hystrix 对每一个依赖服务都配置了一个线程池,对依赖服务的调用会在线程池中执行,比如,我们设计服务 AA 的线程池大小为20, 那么 Hystrix 会最多允许有20个容器线程调用服务 AA,如果超出20,Hystrix 会拒绝并快速失败,这样即使服务 AA 长时间未响应,容器最多也只能堵塞20个线程,剩余的线程仍然可以处理用户请求。
3)自我修复
处于熔断状态的服务,在经过一段时间后,Hystrix 会让其进入“半关闭”状态(即允许少量请求通过),然后统计调用的成功率。如果这个请求都能成功,Hystrix 会恢复该服务,从而达到自我修复的效果,其中:在服务被熔断到进入“半关闭”状态之间的时间,就是留给开发人员排查错误并恢复故障的时间,开发人员可以通过监控措施得到提醒并线上排查。
Hystrix 基于命令模式 HystrixCommand 来包装依赖调用逻辑,其每个命令在单独线程中 / 信号授权下执行(Command 是在 Receiver 和 Invoker 之间添加的中间层,Command 实现了对 Receiver 的封装)Hystrix 提供了熔断器组件,可以自动运行或手动调用。

Hystrix 支持两种隔离策略:线程池隔离和信号量隔离(都是限制对共享资源的并发访问量)
1)ThreadPool
根据配置把不同命令分配到不同的线程池中,这是比较常用的隔离策略。
优点是:隔离性好,并且可以配置断路,某个依赖被设置断路之后,系统不会再尝试新起线程运行它,而是直接提示失败,或返回fallback值。
缺点是:新起线程执行命令,在执行时必然涉及上下文的切换,这会造成一定的性能消耗,但是 Netflix 做过实验,这种消耗对比其带来的价值是完全可以接受的,具体的数据参见 Hystrix Wiki。
2)Semaphores
顾名思义就是使用一个信号量来做隔离,开发者可以限制系统对某一个依赖的最高并发数,这个基本上就是一个限流的策略,每次调用依赖时都会检查一下是否到达信号量的限制值,如达到,则拒绝,该策略的优点是不新起线程执行命令,减少上下文切换,缺点是无法配置断路,每次都一定会去尝试获取信号量。

负载均衡组件(Ribbon)

在这里插入图片描述
Ribbon是一个客户端负载均衡器,能够给HTTP和TCP客户端带来灵活的控制。 Feign已经使用了Ribbon,因此如果你正在使用@FeignClient,那么本部分的说明同样试用。

Ribbon的核心概念是命名的客户端。每一个负载均衡器都是一系列工作在一起的组件的一部分,并用于按需联系远程服务。你可以给这一系列一个名字(例如使用@FeignClient注解)。Spring Cloud使用RibbonClientConfiguration为每一个命名的客户端建立一个新系列为满足ApplicationContext的需求。 这包括一个ILoadBalancer, 一个RestClient和一个ServerListFilter。

智能路由组件(Zuul)

在这里插入图片描述
路由是微服务体系不可或缺的一部分, 例如 / 可以映射到Web 应用, /api/users 可以映射的用户服务 , api/shop 可以映射到商店服务。 Zuul是一个基于JVM的路由器,同时也是一个服务端负载均衡。 它由Netflix公司开源。

Netflix使用Zuul做如下事情:
认证鉴权。
审查
压力测试
金丝雀测试
动态路由
服务迁移
负载剪裁
安全
静态应答处理

控制总线组件

Spring Cloud Bus 通过一个轻量级消息代理连接分布式系统的节点。这可以用于广播状态更改(如配置更改)或其他管理指令。当前唯一的实现方式是通过一个AMQP代理作为消息传输,但相同的基本特征(传输上的一些依赖)是其他传输的路线。

全链路监控组件

spring-cloud-sleuth提供了分布式追踪的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值