通过负载均衡和反向代理实现分流,通过限流保护服务免受雪崩之灾,通过降级实现部分可用、有损服务,通过隔离实现故障隔离,通过设置合理的超时与重试机制避免请求堆积造成雪崩,
通过回滚机制快速修复错误版本;通过上述原则来保护系统,使得系统高可用。
以下是需要学习、考虑的方面关于高可用。
高可用
负载均衡
- 负载均衡算法
- 失败重试机制
- 健康检查机制
- 动态负载均衡。
限流
- 限流算法
- 应用级限流
- 分布式限流
- 接入层限流。
降级
- 降级预案
- 自动降级/开关降级
- 读服务/写服务降级
- 多级降级
- 配置中心
- 使用Hystrix降级
- 使用Hystrix熔断。
隔离
- 进程线程隔离
- 集群/机房隔离
- 读写隔离
- 动静隔离
- 爬虫/热点隔离
- 使用Hystrix隔离
- 基于Servlet3的请求隔离。
超时与重试
- 代理层超时与重试
- web容器超时
- 中间件客户端超时与重试
- 数据库客户端超时
- NoSql客户端超时
- 业务超时
- 前端Ajax超时。
回滚
- 事务回滚
- 代码库回滚
- 部署版本回滚
- 数据版本回滚
- 静态资源版本回滚
压测与预案
系统压测
- 压测方案: 压测接口/并发量/压测策略/压测指标
- 压测报告: 机器负载/QPS/响应时间/成功率
- 压测方式: 线下/线上压测
- 读写/仿真/引流/隔离集群/缩容压测/单机/集群/离散/全链路压测
系统优化和容灾: 单机调优、架构优化/系统扩容、跨机房容灾。
应急预案: 网络接入层、应用接入层、WEB应用层、服务层、数据层
监控报警: 服务器监控/系统监控/JVM监控/接口监控
报警策略: 监控时间段、报警阀值、通知方式
高并发
- 应用级缓存
- 缓存回收策略: 空间/容量/时间
- 缓存回收算法(FIFO/LRU/LFU)
- JAVA堆/JAVA堆外/磁盘缓存
- Guava/Ehcache/MapDB
- 缓存使用模式: cache-Aside/Cache-As-SoR/CoryPattern
HTTP缓存
- 浏览器缓存
- HttpClient客户端缓存
- Nginx代理层缓存
多级缓存
- 分布式缓存
- 热点数据与更新缓存
- 更新缓存与原子性
- 缓存崩溃与快速修复
池化
- 数据库连接池
- HttpClient连接池
- 线程池
异步并发
- 同步阻塞调用
- 异步Future
- 异步callback
- 异步编排CompletableFuture
- 请求缓存
- 请求合并
扩容
- 单体应用垂直扩容
- 单体应用水平扩容
- 应用拆分
- 数据库拆分: 水平/垂直拆分
- 使用sharding-jdbc
- 分库分表/读写分离
- 数据异构
- 任务系统扩容(Elastic-Job)
队列
- 异步处理/系统解耦
- 数据同步/流量削峰
- 缓冲队列/任务队列/消息队列/请求队列/数据总线队列
- Disruptor + Redis队列
- 基于Canal实现数据异构