一、Nacos
Naocs是一个集动态服务注册、服务配置和服务管理的平台。
分布式配置中心
使用Nacos作为配置中心,优先级会高于配置文件,配置信息也被集中管理,更加高效,敏捷。
配置中有三个主要的属性,DataId(配置名称),group(配置分组),namespace(命名空间),通过@RefreshScope注解实现配置自动更新
服务注册中心
通过服务中心,服务提供者和消费者只需要通过注册中心交互就可以,降低了服务间的耦合度,应用场景有订单中心,购物车,会员中心,支付系统,商品中心等等
二、Ribbon负载均衡器
有两种负载均衡器,第一种是服务端负载均衡器 :在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件和软件,硬件有F5,软件有Nginx,OpenResty和国外的Kong
第二种是客户端负载均衡器:客户端根据自己的请求情况做负载均衡,Ribbon就属于客户端负载均衡器,Ribbon有几种常见的负载均衡算法,随机,轮询,权重,响应时长和地址Hash
设置负载规则,默认的是轮询,使用自己的规则可以用注解配置或者配置文件配置
Ribbon第一次加载为什么那么慢
Ribbon默认使用懒加载,第一次访问才加载创建LoadBalanceClient,优化方法就是使用饥饿加载,在项目创建时就加载,降低第一次打开的耗时
三、OpenFeign
OpenFeign是一个声明式的Web服务客户端,可以做到使用HTTP请求远程服务时就像请求本地方法一样方便
Feign和OpenFeign的区别
OpenFeign支持spring mvc注解,整合了更多的扩展,如超时控制、请求重试策略、请求拦截器
OpenFeign的使用就是在编写调用接口时加上@FeignClient注解,在启动类上添加@EnableFeignClients注解
自定义拦截器,创建一个拦截器类,并让其继承RequentInterceptor类
配置全局拦截器在配置类中配置自定义的OpenFeign拦截器
配置局部拦截器是在配置文件中对自定义的OpenFeign拦截器进行局部配置
四、Sentinel
分布式服务遇到的问题
服务可用性问题,服务雪崩效应
雪崩效应的根本原因是大量请求线程同步等待造成资源耗尽
常见的容错机制
限流:是对服务的保护,避免因瞬间高并发流量而导致的服务故障,避免雪崩问题,是预防措施
超时机制,隔离,降级,熔断是在部分服务故障 时,将故障控制到一定范围内,避免雪崩,是一种补救措施
熔断请求有三个状态,开,关,半开
Sentinel和Hystrix的区别
Sentinel支持流量整形,支持系统负载保护,控制台开箱即用,可配置规则
五、GateWay
流量网关和服务网关的区别
流量网关是提供全局性的,与后端业务应用无关的策略,如HTTPS证书认证、Web防火墙、全局流量监控、黑白名单等
服务网关:是指与业务紧耦合的,提供单个业务域级别的策略,如服务治理,token认证,负载均衡等
gateway配置项有三大属性:路由,断言,过滤器
- 路由:由ID,目标URL,断言集合,过滤器集合组成
- 断言:匹配HTTP请求中的内容
两个主要的内置断言:PathRoutePredicate和QueryRoutePredicate
path是匹配请求的路径,
host是匹配请求的主机名,
method是匹配HTTP方法,
header:匹配请求头
query:匹配查询参数 - 过滤器:有两种,前置过滤器和后置过滤器
三大案例组件
- 局部过滤器接口耗时
创建一个局部接口耗时过滤器,命名规则:以GatewayFilterFactory结尾,在配置文件中加入LogTime - 全局token认证
首先创建一个全局token过滤器实现GlobalFilter接口,然后为了这个过滤器被识别并使用,需要在配置类中注册,可以加入@Comonent注解实现 - traceId全局链路跟踪
首先,创建一个全局过滤器,在请求头上带入traceId参数,穿透到下游服务,下游服务中使用全链路跟踪Id,配置TranceId过滤器,启动类使用@SercleComponentScan注解开启扫描,配置文件中配置日志输出格式
六、分布式Seata
事务的四大特征
ACID
- 原子性(atomicity)
- 一致性(consistency)
- 隔离性(isolation)
- 持久性(durability)
常见分布式事务解决方案
- XA协议两段提交
- TCC三段提交
- 本地消息(MQ+Table)一致性
- 事务消息(RocketMQ)
- Seata
2PC和3PC的区别
2PC两个阶段:预提交和提交
3PC多了一个准备阶段,加入了超时机制
2PC存在的问题:性能问题,可靠性问题,数据一整性问题
TCC
针对每个操作,都要实现对应的确认和补偿操作
优点:粒度可以把控,性能提升,可靠性提升
缺点:业务耦合度高,提高了开发成本
Sage
核心思想是将长事务拆分成多个短事务并依次提交
两个恢复策略:向后恢复,向前恢复
优点:锁的时间短,性能高,异步执行,高吞吐
缺点:不能保证隔离性
Seata
开源的分布式事务解决方案,提供简单易用、高性能的分布式事务服务
Seata的三大角色
- TC:事务协调者
维护全局和分支事务的状态,驱动全局事务的提交和回滚 - TM:事务管理者
开始、提交或回滚全局事务 - RM:资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚
TC单独部署到Server服务端,TM和RM嵌入到应用中的Client客户端
设计原理:
第一阶段:业务数据提交,分析业务sql,反分析,同时写入undo_log表
第二阶段:分布式业务操作成功,TC通知RM异步删除undo_log
分布式事务操作失败,TM向TC返送回滚请求,TC通知RM回滚刚刚写入的undo_log表数据
涉及到四个表:global_table存储的全局事务信息,branch_table存储的短事务相关的信息,lock_table此时此刻锁的行信息(行锁),undo_log存储的是在业务库中操作sql前后的镜像数据