高并发解决方案总结

      本文总结面对高并发场景可以采用的解决方案,文章只是介绍整体相关概念,其中每一项都可以利用多种不同中间件或者框架来实现,可以根据需要选择某几个进行更加深入的学习和理解。

1. 扩容

  • 垂直扩容(纵向扩展):提高系统部件能力
  • 水平扩容(横向扩展):增加更多系统成员来实现

(1) 数据库扩容:

  • 读多写少--读操作扩展:使用memcache、redis、CDN等缓存
  • 读少写多--写操作扩展:使用Cassandra、Hbase等

2. 缓存
(1) 缓存特征概念:

  • 命中率:命中数/(命中数+没有命中数)
  • 最大元素(空间)
  • 清空策略:FIFO、LFU、LRU、过期时间、随机等

(2) 缓存命中率影响因素:

  • 业务场景和业务需求
  • 缓存的设计(粒度和策略)
  • 缓存容量和基础设施

(3) 缓存分类和应用场景:

  • 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache
  • 分布式缓存:Memcache、Redis

(4) 高并发场景下缓存常见问题:

  • 缓存一致性
  • 缓存并发问题
  • 缓存穿透问题
  • 缓存的雪崩现象

3. 消息队列

(1) 消息队列特性

  • 业务无关:只做消息分发
  • FIFO:先投递先到达
  • 容灾:节点的动态增删和消息的持久化
  • 性能:吞吐量提升,系统内部通信效率提高

(2) 消息队列使用原因:生产和消费的速度或稳定性等因素不一致

(3) 消息队列好处:

  • 业务解耦
  • 最终一致性
  • 广播
  • 错峰与流控

4. 应用拆分

(1) 应用拆分的原则

  • 业务优先
  • 循序渐进
  • 兼顾技术:重构、分层
  • 可靠测试

(2) 应用拆分时的思考

  • 应用之间通信机制:RPC(dubbo等)、消息队列
  • 应用之间数据库设计:每个应用都有独立的数据库
  • 避免事务操作跨应用

5. 应用限流

(1) 应用限流的算法

  • 计数器法
  • 华东窗口
  • 漏桶算法
  • 令牌桶算法

6. 服务降级和服务熔断

(1) 服务降级的分类

  • 自动降级:超时、失败次数、故障、限流
  • 人工降级:秒杀、双11大促等

(2) 服务降级与服务熔断的比较

  • 共性:目的、最终表现、粒度、自治
  • 区别:触发原因、管理目标层次、实现方式

(3) 服务降级要考虑的问题

  • 核心服务、非核心服务
  • 是否支持降级,降级策略
  • 业务放通场景,策略

7. 数据库切库分库分表

8. 高可用手段

  • 分布式任务调度:elastic+zookeeper,schedulerx
  • 服务器主备切换:apache curator+zookeeper分布式锁实现
  • 监控报警机制
  • 阿里的中间件:tddl,diamond,精卫,txc,opensearch等

 

 

你可能感兴趣的:(高性能)