第一个接触到的项目就是用SpringCloud开发的系统 ,一直只知道个大概,所以得找时间学习下。
文章目录
Spring Cloud是什么?
-
Sping Cloud为开发者提供了一套快速开发分布式系统的组件。
-
特点: 统一管理、区分环境、实时刷新、权限控制、版本控制、灰度发布
统一管理
配置的统一管理:配置中心服务端负责配置的管理(新增、修改、删除、发布),集成了配置中心客户端的微服务程序可以统一从配置中心服务端拉取配置,从而实现整个微服务系统的统一配置管理。
区分不同环境的配置
一个微服务应用中的某些配置项,在不同的环境(开发、测试、生产)通常是不同的,作为分布式配置中心需要具有隔离不同环境的功能,是的同一个微服务在不同环境下拉取到相应的配置。
配置动态实时刷新
当配置中心服务端中的配置发生了修改时,配置中心客户端需要能实时监听到配置的改变,使得微服务应用程序可以实时获取到最新配置,并且不用重新部署应用程序
配置的权限控制
在配置中心中,可以针对不同的角色或用户设置对应的权限,比如张三可以新建配置项但不能发布配置;小明可以查看配置项但不能修改配置。
配置的版本控制
配置时如果出现误操作,这时需要支持版本回退,所以版本的配置中心是一定要支持版本控制的。
配置的灰度发布
(先测试部分再整体发布):在需要发布一项配置时,如果需要发布到多个实例(集群),此时可以值发布到部分实例,待测试通过后再发布到全部实例,这就是配置的灰度发布
注册中心
注册中心相当于微服务架构中的各服务地址通讯录,每个微服务都会将服务及其地址注册到注册中心,服务消费者在调用某个服务时之前先会从注册中心中查找服务地址,然后进行调用。注册中心的特点(增删改):服务的自动注册、服务的健康检查、服务的自动发现
- 服务的自动注册:微服务应用在**启动时**,通过注册中心客户端组件,将服务相关信息**自动注册**给注册中心服务端。
- 服务的健康检查:已经注册到注册中心的微服务实例宕机后,注册中心服务端能发现实例已经宕机,然后把相关信息从注册中心删除掉。
- 服务的自动发现:服务消费者能实时监听到注册中心服务信息的变更,以能在真正调用服务时不会出现错误。
服务网关
服务网关是整个微服务架构中对外的统一入口,所有的客户端都通过统一的网关使用微服务,服务网关起到了隔离外部访问和内部系统的作用,他是微服务架构中的一个标配组件
特点:
- 高并发(承受高并发量并且高性能)、
- 安全(权限认证)、
- 路由转发(服务网关根据请求和配置,将请求转发到对应的后端微服务上去)、
- 监控与限流(服务网关遇到突发情况能及时限流,保证系统的稳定)、
- 灰度发布:某个微服务有新版本更新上线时,可以利用服务网关进行流量的切换、实现该微服务的灰度发布。
- 服务重试:当服务网关调用某个微服务失败后,可通过服务网关设置重试策略来重新尝试调用该服务
- 服务别名:可以在服务网关中给某个或某些为微服务设置别名,从而对外屏蔽内部微服务相关信息(保密性)
负载均衡
负载均衡算法:
- 简单轮询:将请求按顺序分发给后端服务器上,不关心服务器当前的状态,比如后端服务器的性能,当前的负载等
- 加权轮询
- 简单随机
- 甲醛随机
- 一致性哈希
- 最小活跃数
RPC调用(一个服务调另一个服务)
RPC就是远程过程调用,对于JAVA程序而言,RPC就是远程方法调用,表示一个方法调用远程的另一个方法,微服务架构中一个服务调用另一个服务可以用RPC调用
RPC调用和HTTP调用区别
HTTP调用协议使用的是HTTP协议,网络7层中的应用层协议,HTTP协议规定了数据传输格式。Restful风格就可以通过HTTP协议来实现。
RPC不是网络层面的协议,而是更上层的通信协议,RPC可自定义出具个事、数据传输方式、只要能保证调用到远程方法即可。
服务熔断
(需要触发条件)
服务A调用服务,B不可用时,上游服务A为保证自己不受影响,从而不再调用服务B而是直接返回一个结果,减轻服务A和服务B的压力,直到服务B恢复。
什么是熔断器
实现熔断功能的叫熔断器,代表组件为Hystrix、Sentinel。
熔断器的三种状态
- Closed:关闭状态
当调用失败次数达到阈值时则启动熔断器
- Open:打开状态
此时不会真正的调用下游服务,而是直接返回,当过了某段时间,熔断器会进入到半打开的状态。
- Half-Open:半打开状态
此时会有部分请求访问下游服务,如果这些请求都调用成功,则认为下游恢复了,否则熔断器回到打开状态
服务降级
(主动的)
当发现系统压力过载时,通过关闭某个服务,或者限流某个服务来减轻系统压力。这种过程叫做服务降级
服务降级与服务熔断的区别
- 都是为了防止系统崩溃
- 都让用户体验到某些功能暂时不可用
- 熔断是下游故障时触发的,降级是降低系统负载。
服务雪崩
(不断压迫下游最终导致自己不可用)
服务A调用B,B调用C,此时大量请求突然调用服务A。A能扛得住但C扛不住,会导致C请求堆积,从而B请求堆积,从而A不可用。
解决方式就是服务降级、服务熔断
服务限流
服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流非常重要
常用限流算法
固定窗口计数器
滑动窗口计数器
令牌桶
漏桶
全局锁
全局锁,就是我们常说的分布式锁,是分布式、微服务架构中的一种锁机制,通过全局锁可以很好的在分布式系统中互斥使用共享资源。
实现原理
Zookeeper:利用Zookeeper的watch机制与临时节点特性;
Redis:利用Redis的消费订阅机制与数据超时特性;
控制总线
(链接各个节点,进行通讯(广播等))
控制总线也称消息总线,是微服务系统中用来连接系统中所有服务节点的,微服务中的所有服务节点可通过控制总线进行通讯。。
应用场景
目前Spring Cloud Bus就是控制总线的具体实现,某个微服务可以通过Spring Cloud Bus来广播事件,而其他微服务可以接收到事件并进行相关处理。
分布式事务
再一次请求中,所设计的分散在多个为服务商的操作要保证同时成功、同时失败,这就是分布式事务,比如创建订单减库存、银行转账等。
实现分布式事务的方式
- 直接通过数据库
- 通过消息队列
- 两阶段提交
- 三阶段提交
分布式事务中的三个角色
事务协调器
事务管理者
资源管理者
什么是服务安全
对于企业来说,微服务系统中的服务安全性越来越重要,服务的认证和授权是企业必备的, Spring Cloud Security 是Spring Cloud提供的微服务安全组件
服务安全的特性
- 可扩展、可配置的认证和授权
- 单点登录(同域下、可以共享登录的Session和顶域下的Cookie)
- 防止会话固定、点击劫持、跨网站请求伪造等攻击。
4.与Servelet APi集成
链路追踪
(Sleuth、ZipKin)
链路追踪为微服务系统提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等功能、可帮助开发者快速分析和针对安微服务架构下的性能瓶颈
链路追踪的功能
- 分布式调用链查询和诊断
- 应用性能实时汇总
- 分布式拓扑动态发现
- 多语言开发程序介入
- 丰富的下游对接场景
集群管理
指的是,对微服务系统中的某个服务集群所提供的的针对集管理的功能,Spring Cloud Cluster的职责就是集群管理
集群管理有哪些功能
- 领导者选举
- 一致性存储
- 集群状态管理
- 一次性token
什么是事件驱动
事件驱动就是消息驱动,在Spring Cloud中提供了 Spring Cloud Stream来实现事件驱动,有了事件驱动,在微服务系统中可以更方便的通过发送消息来通信
事件驱动中的概念
目标绑定器,目标指的是kafka或rabbitmq
Kafka是分布式发布-订阅消息系统
绑定桥梁,连接消息系统和应用程序
消息,应用程序和消息系统之间传递的数据
事件驱动的特点
- 异步处理
- 流量削峰
- 服务解耦
云连接器
云连接器可以用来更方便的连接部署在云上的各种服务,SpringCloud中Cloud Connectors就是云连接器的组件实现
目前支持的云平台
- Spring Cloud Cloud Foundry
- Spring Cloud Heroku