微服务
# Spring Cloud组件
- 注册中心:Eureka,Nacos
- 负载均衡:Ribbon
- 远程调用:Feign
- 服务保护:sentinel
- 网关:Zuul,Gateway
# Eureka
注册中心,服务需要去注册中心进行注册,那么注册中心便可以知道当前有什么服务,以及对应的地址是什么,并每30秒服务向注册中心发送消息,表示我还活着。服务消费者可以到注册中心寻找响应的服务提供者来远程调用。
与Nacos区别
Nacos对于临时实例,采用心跳模式。对于非临时实例采用主动检测模式。
Nacos还支持配置中心。
# Ribbon
- RoundRobinRule:轮询服务列表来选择服务器
- WeightedResponseTime:按照权重来选择服务器,响应时间越长,权重越小
- RandomRule:随机选择一个可用的服务器
- ZoneAvoidanceRule:以区域为基础进行服务器选择
如果想自定义实现负载均衡策略,需要实现IRule接口
# 服务雪崩
- 熔断,降级
- 限流
服务降级,一种自我保护方式,确保服务不会受请求突增影响变得不可用
服务熔断,如果一定时间内,降级次数过多,则会触发服务熔断,熔断后不再对这个节点进行访问
# 监控
skywalking,分布式系统的应用程序性能监控工具,提供完善的链路追踪功能。
- 服务
- 端点
- 实例
# 限流
第一,并发的流量大,避免将服务器搞垮,影响可用性。第二防止用户恶意刷单刷接口。
Tomcat:可以设置最大连接数
Nginx:漏桶算法
网关:令牌桶算法
自定义拦截器
# CAP
CAP,分别是一致性,可用性,分区容错性,分布式系统无法同时满足这三个指标。
BASE
基本可用,有中间状态,但是保证最终一致性。
最终一致性,各个分支事务分别执行提交,如果不一致再想办法恢复数据
强一致性,各个分支事务执行完业务不要提交,等待彼此的结果,统一提交或回滚。
# seata
XA模式
# AT模式
# TTC模式
# MQ分布式事务
# 幂等
多次调用同一接口不会改变业务状态,保证结果一致。
- 用户重复点击
- MQ消息重复
- 应用使用失败或超时重试机制
通过添加字段,若字段的值已经是目标值,则放弃更改。
使用token+redis,对于新增和修改,在前一个页面,给客户端发放token,服务器将token存到redis中。若当前请求带有token,则是第一次访问,处理完后删除token。若是请求中没有带有token,说明这是重复的请求,忽略。
# xxl-job
解决集群中一些需要重复执行的任务,cron表达式定义灵活,并且支持任务分片。
路由策略
ROUND,轮询
SHARDING_BROADCAST,分片广播,广播集群中所有机器执行一次任务,同时系统自动传递分片参数,根据分片参数开发分片任务。
任务执行失败
查看日志分析,重试。
大数据量任务