分布式系统微服务概念:为应对大用户量,大数据量,高并发而生,是一组小型服务来开发一个系统,服务实例之间通过http类似协议来互相通信,对外如同一个一系统
◆可以指多 个不同组件分布在网络上互相协作,
◆也可以一 个组件的多个副本组成集群,互相协作如同一个组件,比如数据存储服务中为了
数据不丢失而采取的多个服务备份冗余,当数据修改时也需要通信来复制数据
主流框架:spring cloud
提供了:配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等工具集
简单的服务通信:
okhttp+RestTemplate 实现了服务通信
服务发现:nocos
服务在nocos 上注册IP地址和端口,方便服务发现调用
Ribbon内置策略:
负载均衡策略:轮询,随机,最小并发数,响应时间加权,
通过以上策略对多个服务实例进行调用,减缓服务器压力
通过openfeign发现服务
通过导入依赖,启动类上注解,一句在接口上注解服务名称实现服务发现
底层使用了jdk 的动态代理,反射获取相关参数,生成代理类,实现一系列的功能;
服务划分
- 服务分层:只能从上往下调,不能反向;如果实在需要,可以使用mq异步通信
- 同层可以互调
-
- 分层
- 聚合层:面对用户,每个用户端,提供一个服务
- 原子层:单纯的负责某个特定的领域
配置管理:
启动nocos
nocos 中统一配置commonyaml 文件
统一配置管理:导入依赖,配置
实现不同服务可以使用同一配置,减少重复配置
动态刷新:
通过注解 @RefreshScope 实现
在不重启服务的情况下,实现某一个属性值的刷新
分布式事务基本概念
目的:解决数据一致性(例如转账),因为有多个服务,所以必须进行协调,保证数据的安全一致
- 全局事务:分布式事务本身
- 分支事务:参与事务的各个事务
- 事务协调者:TC Transaction Coodinator 协调分支事务,同时提交,同时回滚
- 事务发起者:TM Transaction Manager 事务管理者 发起全局事务
- 事务参与者:RM Resource Manager 资源管理者 参与全局事务,维护分支事务
常见的分布事务解决方案
1.XA协议 占用资源,耗性能
2.TCC : Try-Confirm-Cancel 不消耗资源,但是接口增多,代码量增加
3.SAGAS 适用长事务
4.AT模式 seata 提供的AT模式 通过代理数据源,拦截sql,生成表,加入到事务中提交,当出现异常时,读取表,生成回滚sql,再执行提交 (不耗资源,不额外编码,注解实现,需要增加表)
5.重试+幂等性校验
服务网关Service Gateway
是分布式系统的唯一入口,对请求进行管理
功能:IP白名单 允许通过,ip黑名单 禁止通过,认真授权 ,转发请求给相应的服务 ,限流,性能统计
过滤器:
网关过滤器 GatewayFilter 针对某一个route做请求的修改处理
全局过滤器 GlobalFilter 针对所有的route,提供一些功能
对登录注册外的请求,拦截查看是否有合法jwt
路由转发
SPU:是商品信息聚合的最小单位,易检索的标准化信息的集合,通俗点讲,属性值、特性相同的商品就可以称为一个SPU
SKU:库存量单位。SKU即库存进出计量的单位,件、盒、个等,spu确定属性值后得到sku
单点登录:
主流框架:
- cas协议
- oauth2协议
- 基于redis共享+cookie的方式 sa-token
sa-token 测试实现方法:
1.设置hosts 文件
2.添加依赖,修改配置文件
3.写代码,接口,登录页面,主页面
服务容错:
解决:分布式复杂系统带来的高故障情况,避免系统崩溃
常见容错模式:
超时:调用方发出请求超过一定时间则释放资源
限流:控制请求流量
仓壁模式:利用线程池或者信号量等其他手段进行资源隔离,确保不会产生级联故障
熔断器:当1秒内异常达到一定比例,且数量必须大于5,此时停止服务,间隔一段时间后,服务重启,发请求,如果仍出现异常,继续停止服务,直到服务正常;
实现方法
加入sentinel到服务,更改配置,下载启动jar包,登录在控制台localhost:8840登录,进行相关设置管理