- ACP,BASE,ACID 理论
- 分布式事务
- 设计模式 5个程序设计原则
- RAFT同步
- 消息队列,RPC
- Reactor模型,netty 多路复用
分布式事务
2PC,典型的实现是MySQL的XA事务
准备阶段:事务管理器告知所有分支准备提交
提交阶段:事务管理器告知所有分支提交或回滚事务
缺点,长时间锁定资源,容易出现单点的问题
TCC
Try/Confirm/Cancel
需要自己实现2PC中的prepare/commit/rollback过程,相对于现成的2PC方案(MySQL的XA,和Seata的AT模式)需要自己实现三个过程,侵入性更强。
可靠消息最终一致性
要求使用该方案的服务保证如下:
本地事务与消息原子性 ,本地事务/消息发送 必须同时成功/失败 (RocketMQ实现了该要求)
消息接受可靠性
消息重复消费,保证幂等
该方案对业务入侵也是比较大的
程序设计的原则
S 单一职责原则
O 开闭原则
L 里氏替换原则
I 接口隔离原则 接口最小化
D 依赖倒置原则
迪米特法则 尽可能减小对外的控制权限
合成/聚合复用原则 尽可能组合而不是继承
Kafka
消息丢失,重复
消息生产: ack参数配置为异步时,可能出现未同步,主分区挂掉的情况,消息丢失
消息消费: 高等级的API可能出现消息消费途中挂掉的问题,此时offset还是会提交,导致消息丢失,可用低等级的接口控制offset
kafka为什么会快 参考 其中mmap即kafka官方文档的PageCache
消息分区选择逻辑可参考: API 可指定分区,未指定分区,则根据key进行hash,没有key则用round-robin
限流方案:
限制单位时间调用量(滑动窗口)
限制并发量(信号量semaphore)
令牌桶
漏桶法 个人理解跟限制并发量比较接近
TODO
MySQL Explain
Redis 哨兵
Spring生命周期