Spring cloud 分布式总结 精(阿里十年顶级架构师)

发布于:2022-11-15 ⋅ 阅读:(745) ⋅ 点赞:(0)

分布式系统微服务概念:为应对大用户量,大数据量,高并发而生,是一组小型服务来开发一个系统,服务实例之间通过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登录,进行相关设置管理

 

 

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到