自顶向下看互联网”三高“

628 阅读3分钟

高并发

纵向扩展

加配置。提高单机的硬件性能,增加内存和CPU,磁盘升级SSD。

横向扩展

加机器。解决单机性能瓶颈。

缓存

  • 本地缓存

1.考虑强软弱虚引用的使用 2.考虑jvm垃圾回收影响 3.考虑缓存过期和击穿的问题 4. ehcache和guava

  • 分布式缓存

1.考虑缓存穿透(cache和db都没有数据),缓存击穿(缓存没有db有)和缓存雪崩(大量缓存同时失效)2. 缓存穿透-缓存短期空对象,缓存击穿-分布式锁,缓存雪崩-随机过期时间

  • 集中式缓存
  • CPU缓存
  • 操作系统缓存
  • HTTP缓存
  • 数据库缓存
  • 缓存一致性
  • 缓存命中率
  • 热点key
  • 缓存更新模式

Cache Aside模式;Read/Write Through模式;Write Behind Caching(Write Back)模式。参考: 缓存更新模式

异步

  • 分布式消息队列
  • 本地消息队列
  • 线程异步回调
  • NIO/AIO

高性能

增加并行计算能力

  • 加机器,加配置
  • 线程池
  • http连接池
  • 多路复用
  • 锁降级
  • 并行I/O

减小单次任务响应时间

  • 缓存
  • 时间复杂度
  • 池化
  • 锁降级
  • 线程预热
  • 长连接
  • 预先处理
  • 延后处理

高可用

故障转移

  • 对等节点

所有节点承担读写,且节点内部无状态。节点失败,无影响。

  • 非对等节点

基于分布式选举算法进行协同作业的主从备节点集群;基于分布式一致性算法进行存储的节点集群。"心跳检测机制"触发选举操作。(比如redis的哨兵模式或者集群模式、MySQL的主从切换等)

超时控制

不限制的让请求持续等待或占用资源,会导致流量挤压,引起雪崩似的超时。所以超时控制是一种"舍小家为大家"策略,体现的是牺牲少量请求,保证系统整体可用性的智慧。常用措施:同步自定义超时打断机制,异步wait/notify机制和利用future和countdonwlatch等关键字。

流量控制

超时控制是在请求处理阶段采取的截断措施,而流量控制则是在请求进入阶段根据系统负载利用qps指标进行拦截的措施。常用算法:漏桶算法和令牌桶算法。

  • 漏桶算法

以固定速率从桶中流出水滴,以任意速率往桶中放入水滴,桶容量大小是不会发生改变的。因为桶中的容量是固定的,如果流入水滴的速率>流出的水滴速率,桶中的水滴可能会溢出。那么溢出的水滴请求都是拒绝访问的,或者直接调用服务降级方法。前提是同一时刻。

  • 令牌桶算法

按照特定的速率生成令牌,以此控制流量速度。如果没有从令牌桶中获取到 token ,拒绝访问。

降级管理

降级是为了保证核心服务稳定而牺牲边缘服务的做法,是一种"舍卒保车"策略。

熔断机制

熔断机制是一种快速失败的实现方案,在下游服务故障时利用快速失败机制降低对整体系统性能的影响。

重试机制

重试是一种保障业务运行的容错补偿机制。包含:同步有限次重试,异步跑批重试。

幂等

幂等是支持重试机制的重要手段。常用措施:全局唯一id,锁(悲观锁乐观锁)

灰度发布

能支持按机器维度进行小流量部署,观察系统日志和业务指标,等运行平稳后再推全量。

监控报警

全方位的监控体系,包括最基础的CPU、内存、磁盘、网络的监控,以及Web服务器、JVM、数据库、各类中间件的监控和业务指标的监控。