限流, 熔断,降级笔记

数据库主从复制包括四种:

一主一从

一主多从

互为主从

级联主从

主从复制会有延迟, 其实现方式如下, 首先主库要开启binary log, 从库开启异步IO线程同步主库日志到本地Relay日志, 开启另外线程轮询relay log, 经筛选的日志同步到从库中, 鉴于主库日志增长速度,网络,IO等原因, 从库可能数据同步有延迟.

  

CAP理论: 互联网公司更多的是追求AP, 牺牲C,来提高系统响应时间, 它们追求的是最终一致性. 

分布式事务: 由X/Open公司提供的DTP标准(分布式事务协议), 

JTA: JAVA版的DTP标准, 主要包括TM,AP,XA组成. 其中TM是核心(分布式事务管理组件)

目前开源的分布式事务主要有Atomikos/JoTM , 

分布式事务效率不高, 目前互联网公司大多避免使用, 或者绕道使用, 而是追求最终一致性, 

Base理论: 是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写, BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性

软服务:对于未知状态提供两种方式: 

1. 最大化重试

2. 衰减重试: 15S->3m->10m->30m->1h->2h->6h->15h

弱一致性可以由消息队列辅助实现.

消息队列实现时要主语幂等性, 

幂等性的实现方式: 

1. 数据库加上唯一性约束

2. 传参是带上token,并判断token是否重复.

3. 使用状态机, 即每次更新时检查状态机状态.

Openrestry+lua+DB实现缓存, 限流, 熔断,降级等功能.

熔断是限流的一种方式. 

常见的限流算法有:

漏桶算法: 无预留容量, 能保证输出数据的稳定, 容量慢了之后直接抛弃

令牌桶算法:有预留容量, 可以容纳一定的突发容量

使用方式:

1. 使用Guava库, 直接使用两种限流算法

2. 可以由第三方中间件实现, 如Redission,(其核心是由lua脚本模拟实现)

其他限流措施包括: SQL连接池, 线程池等

线程池四种拒绝策略: Abort, Discard,DiscardOldest , Caller run

原文地址:https://www.cnblogs.com/snow-man/p/9837867.html