SpringCloud简介
名词解释:
1)SpringBoot:一种轻量级开发框架,“约定优于配置”,需要修改时在配合文件中进行配置。
2)SpringCloud:Java语言的微服务(详情见:https://www.cnblogs.com/docen/p/10663071.html)框架,依赖于SpringBoot。
3)服务:微服务的提出者Martin Fowler给出的定义:“服务是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件和组件之间通常使用HTTP这种轻量级的通信机制进行通信。”
4)负载均衡:所谓负载均衡,就是说如果一组计算机节点(或者一组进程)提供相同的(同质的)服务,那么对服务的请求就应该均匀的分摊到这些节点上。
【客户端层】到【反向代理层】的负载均衡,是通过“DNS轮询”实现的;
【反向代理层】到【站点层】的负载均衡,是通过“nginx”实现的;
【站点层】到【服务层】的负载均衡,是通过“服务连接池”实现的;
【数据层】的负载均衡,要考虑“数据的均衡”与“请求的均衡”两个点,常见的方式有“按照范围水平切分”与“hash水平切分”。
来源:https://blog.csdn.net/j2IaYU7Y/article/details/78891182
5)OAuth2:http://www.cnblogs.com/flashsun/p/7424071.html
6)JWT:JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范 。身份认证在这种场景下,一旦用户完成了登陆,在接下来的每个请求中包含JWT,可以用来验证用户身份以及对路由,服务和资源的访问权限进行验证。由于它的开销非常小,可以轻松的在不同域名的系统中传递,所有目前在单点登录(SSO)中比较广泛的使用了该技术。
来源:https://blog.csdn.net/qq_40081976/article/details/79046825
1、Spring Cloud介绍
SpringCloud是依赖于SpringBoot的,SpringBoot的主要特点简化了开发和部署的过程,简化了Spring复杂的配置和依赖管理,提高了开发和部署的效率。
SpringCloud通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。常用的组件如下:
1)服务注册和发现组件Eureka(欧蕾卡)
基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务治理可以说是微服务架构中最为核心和基础的模块,他主要用来实现各个微服务实例的自动化注册与发现。 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按照服务名分类组织服务清单,服务注册中心还需要以心跳的方式去监控清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。 服务发现:由于在服务治理框架下运行,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。Eureka Server:服务的注册中心,负责维护注册的服务列表, 同其他服务注册中心一样,支持高可用配置(服务注册中心集群化)。Service Provider:服务提供方,作为一个 Eureka Client,向 Eureka Server 做服务注册、续约和下线等操作,注册的主要数据包括服务名、机器 ip、端口号、域名等等(为了实现负载均衡,集群化)。Service Consumer:服务消费方,作为一个 Eureka Client,向 Eureka Server 获取 Service Provider 的注册信息,并通过远程调用与 Service Provider 进行通信。
2)路由网关
微服务系统通过将资源以API的形式暴露给外界来提供服务,在微服务系统中,API接口资源通过服务网关统一暴露,内部服务不直接对外提供API资源。这样做的好处是将服务内部隐藏起来,保护了微服务系统的安全。API的作用如下:
a、将所有服务的API接口资源统一聚合;
b、用于身份认证、权限认证;
c、实现监控功能,实时日志输出,队请求进行记录;
d、做流量监控,在高流量的情况下,对服务进行降级;
e、API接口从内部服务分离出来,方便做测试。
3)Spring Cloud Config
Spring Cloud Config组件提供了配置文件统一管理的功能,包括Server端和Client端,Server端读取本地仓库或者远程仓库的配置文件,所有的Client向Server读取配置信息,从而达到配置文件统一管理的目的。
4)Spring Cloud Security
Spring Cloud Security是对Spring Security的封装,向服务单元提供了用户验证和权限验证。一般会配合OAuth2组件使用,通过搭建授权服务,验证Token或JWT对整个微服务系统进行安全验证。
5)熔断组件Hystrix(海斯坠克斯)
产生原因:分布式系统是集群化部署,在分布式系统中,服务之间相互依赖,如果一个服务出了问题,在高并发的情况下会导致线程阻塞,很短时间内该线程资消耗殆尽,导致整个系统瘫痪,为了防止此类事情的发生,就添加了熔断器。
解决办法:设定阀值,当请求失败的次数超过阀值时,该服务就会自动开启熔断器,以后对该服务的请求会失败,返回失败信息,避免了其他服务因得不到响应而线程阻塞。使其他功能正常执行,减轻整个系统的压力,避免整体瘫痪。
熔断器的修复:自我修复功能,减轻人工压力。经过一段时间后,半打开熔断器,若测试请求可以通过,就完全打开熔断器,使得请求都可以得到相应。
6)负载均衡组件Ribbon(瑞本)
负载均衡组件。和Zuul配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。Ribbon和RestTemplelate、Feign配合,在消费服务时能够做到负载均衡。
7)Spring Cloud Sleuth(瑟鲁斯)
分布式链路追踪组件:对异常的服务进行定位,跟踪请求追寻服务,定位到具体服务,进行修改。Spring Cloud Sleuth是对Dapper、Zipkin、Kibana的封装,实时观察链路的调用情况。
8)Spring Cloud Stream
利用Spring Cloud Stream实现消息的接收和发送;它封装了RabbitMq、ActivceMq、Kafka和Redis等消息组件。