跳至主要內容

三高问题

soulballad总结文字总结文字总结约 1194 字大约 4 分钟

三高问题

高并发

负载均衡 + 池化技术 + 漏斗模型

影响因素

技术架构

  • 分布式架构: master/slave架构、 p2p架构
  • 分层架构:
  • 削峰架构:
  • 限流架构:
  • 读写分离:
    • 超高并发读: 三级缓存
    • 超高并发写: 队列缓冲+批量写入、 二级队列缓冲模式

实现方案

  • 争用安全: 分布式锁
  • 降级: 熔断降级、 流控降级
  • 限流: 黑名单限流、 ip/用户限流、 应用限流
  • 缓存: 一级、 二级、 三级
  • 接入层高并发: 动静分离、 前后端分离、 页面静态化、 图片/文件单独存放、 CDN加速、 前端文件迁移到网关、 智能DNS
  • 数据一致性:
    • 数据分片一致性: CRC取模 -> 一致性Hash
    • 跨CPU内核执行: MESI协议
    • 集群内部节点一致性: 数据库副本、 ES副本、 缓存副本、 ZK副本
    • 系统内跨层数据一致性: 数据库DB和缓存数据一致性
    • 跨系统数据一致性: 分布式事务
    • 跨地域数据一致性: 缓存同步、 数据库同步、 业务补偿
  • 数据库高并发: 减少请求数量、 数据库集群、 分库分表
  • 动态伸缩: 公私结合、 K8s弹性收缩
  • 隔离策略: 基础设施隔离、 物理隔离、 服务隔离
  • 削峰: 消息队列
  • 读写分离: 写主库、 读从库
  • 异构索引: 写结构化数据、 查异构索引

高性能

系统参数优化 + 高性能缓存 + 高性能日志

影响因素

请求耗时 = 网络延迟+请求/返回处理耗时+业务处理+磁盘+算法计算+下游调用

  • 用户网络环境
  • 请求/返回数据大小
  • 业务系统 CPU、内存、磁盘等性能
  • 下游资源性能
  • 算法实现是否高效
  • 请求链路长短

技术架构

  • 通讯架构: Reactor模式
  • 无锁架构: MPSC、 线程本地缓存
  • 池化架构: 内存池、 对象池、 线程池、 连接池
  • 分治模式: 动作解耦、 数据分片、 G1Region、 磁盘Block Group
  • 副本模式: copy on write、 mvcc、 局部高速副本(javacache、redis、cdn、cpu、数据库、es、rocketmq、pagecache)

实现方案

  • JVM优化: 减少STW、 Spring调优
  • 无锁编程: CAS、 AQS、 原子类
  • 高性能IO: Reactor、 零拷贝、 Netty
  • 线程池: 减少线程创建和销毁

高可用

基础设施高可用 + 故障转移和切换 + 过载保护(限流+熔断) + Web安全(OWASP TOP 10)

影响因素

  • 服务自身因Bug挂掉或无法正常工作;
  • 服务因机器物理故障导致无法正常工作,比如磁盘坏块、内存颗粒坏了、主板故障等;
  • 服务器物理机因机房断网、断电、空调损坏无法降温等原因导致机房故障;
  • 地震、洪水、台风等灾害导致机房损坏;
  • 服务依赖的组件故障导致无法正常工作;
  • 被黑客攻击导致无法正常工作;
  • 并发量超过系统承载能力,导致系统崩溃、数据错乱。

技术架构

  • master/slave架构: kafka
  • P2P架构: redis cluster
  • Failover架构: kafka

实现方案

  • 目标: 4个9、 5个9
  • 接入层高可用: 异地多活、 智能DNS/HTTPDNS、 Keepalive保活、 防DDos
  • 服务层高可用: 注册中心高可用、 微服务实例>=2
  • 缓存层高可用: 代理/哨兵/cluster模式
  • 数据库高可用: 数据库集群、 数据定期备份
  • 中间件高可用: 反向代理高可用、 ES高可用、 MQ高可用
  • 容错方案: 客户端容错、 错误重试机制、 备用服务
  • 运维与监控:
    • 立体化监控: 基础设施监控、 应用层监控
    • 定期检测: 接口自动巡检、 假死自启动

高扩展

  • 无入侵架构: skywalking、 arthas
  • 插件式架构: skywalking、 shardingjdbc、 spring、 springboot
  • 微内核架构: skywalking

spring、mybatis、dubbo

参考

上次编辑于:
贡献者: soulballad