Spiga

构建高可用应用(八):高并发高可用原则

2017-08-26 10:29:51

高并发原则

无状态:应用无状态,配置文件有状态
拆分:系统维度、功能维度、读写维度、AOP维度、模块维度
服务化:进程内服务->单机远程服务->集群手动注册服务->自动注册和发现服务->服务分组/隔离/路由->服务治理(限流/黑名单)
消息队列:实现服务解耦、异步处理、流量削峰/缓冲(需要注意:处理生产消息失败、消息重复接收处理、生产重试;作为大流量缓冲,牺牲强一致性,保证最终一致性;需要数据校对)
数据异构:异构数据形成闭环,数据存储到合适的存储引擎;聚合数据,使前端通过少量调用拿到所需数据;依赖系统出问题,还能正常工作
缓存:

  1. 浏览器缓存(时效性不强的数据)
  2. APP客户端缓存(大促前提前下发素材到客户端)
  3. CDN缓存(把资源推送到离用户最近的CDN节点)
  4. 接入层缓存(没有CDN缓存可以考虑使用Nginx搭建一层接入层)
  5. 应用层缓存(在应用所在机器上部署一组Redis,直接本机读取数据,多机之间主从同步数据)
  6. 分布式缓存(数据量太多,单机存储不了,用分片机制分散流量到多台要,或用分布式缓存实现,
    常见的分片规则:一致性哈希算法)
    并发化

高可用原则

降级:开关集中化管理,推送机制把开关推送到各个应用;可降级的多级读服务;开关前置化;业务降级,高并发流量来袭,保障核心业务,保证数据最终一致性即可,可同步改异步,优先处理高优先级数据
限流:恶意请求只到Cache层;对于穿透到后端的流量考虑Nginx的limit模块;对恶意IP可用Nginx deny屏蔽
切流量:可用Nginx切换故障的应用层
可回滚:版本化(事务回滚、代码库回滚、部署版本回滚、数据版本回滚、静态资源版本回滚)