读张开涛———《亿级流量-网站架构核心技术》所得。
1. 高并发
1.1 缓存技术
1.1.1 应用级缓存
1.1.2 HTTP缓存
1.1.3 多级缓存
1.1.4 连接池
1.2 队列技术
2. 高可用
2.1 限流技术
2.1.1 限流算法
2.1.1.1 令牌桶算法
- 按照固定的速率添加令牌—————>限制的是平均流入速率,允许一定程度的突发流量。
2.1.1.2 漏斗算法
- 按照固定的速率处理请求————->常量流出速率,平滑突发流入流量。
2.1.1.3 计数器(粗暴)
2.1.2 应用级限流
2.1.2.1 限流总并发、连接、请求数
2.1.2.2 限流总资源数
2.1.2.3 限流某一个接口的总并发、请求数
2.1.2.4 限流某一个接口的时间窗请求数
2.1.2.5 平滑限流某一个接口的请求数
2.1.3 单机限流
2.1.3.1 Guava限流
- Guava RateLimiter———-限制时间窗口内的凭据速率
- 平滑突发限流(SmoothBurst)
- 平滑预热限流(SmoothWarningUp)
- 主要方法:RateLimiter.create()和limiter.acquire()
2.1.4 分布式限流
2.1.3.1 Ngnix+Lua
2.1.3.2 Redis+Lua
思路上就很粗暴!!!比如当前限流为10000QPS/s,直接将当前秒作为key,每一个请求到达的时候都将这个key自增,当一个请求将其自增到10000后,就拒绝访问!这里一个关键的技巧就是将当前的时间的秒作为key!具体的实现见张开涛的《亿级流量网络架构核心技术》p75—-“分布式限流”。
2.1.5 接入层限流
2.1.6 节流
在特定的时间窗口内对于重复的相同事件最多只处理一次,或者希望限制多个连续相同的事件最小执行时间间隔,可以使用节流(Throttle)实现,防止多个相同的事件连续执行。