针对高并发、高吞吐的应用设计思路

总体设计

解决高并发要有思维宽度,需要从功能、使用、设计、数据库、缓存、OS各个层面去思考及其解决方法,深入的剖析的各个场景;同时针对高并发也要有一定的技术深度,考虑到应用程序的高并发性能,主要按如下几个思路进行方案设计。

数据评估

对应用需要负载的数据量进行评估,数据以理想状态的发展为基础进行库表设计。根据数据量级,制定数据库策略(是否需要对数据库进行分库分表处理)。

应用性能评估

对应用的性能进行评估,如应用需要10W用户同时在线通信。

网络性能分析

  • 网络负载,包括公网负载和内网负载
  • 应用服务器性能,包括CPU、内存、硬盘I/O访问、并发TCP/IP连接
  • 数据库服务器性能,包括参数配置、服务器性能(CPU、内存、硬盘)、数据结构的合理性
  • 不同的网络,不同WEB请求的处理方式,包括静态数据和动态数据

负载均衡

  • 主要难点是环上节点分布均衡与节点处理请求数均衡:
  • DNS负载均衡
  • 软四层交换负载均衡
  • 反向代理实现负载均衡,并实现页码请求缓存

数据存储设计思路

  • 数据库拆分,读写分离(主写,备读)
  • 将热数据保存进LRU队列中,提高CPU处理速度,主要针对数据库中高频、小字段进行缓存,保证50%的命中率才值得缓存IO开销。
  • 分布式Key-Value存储系统存储关键性信息
  • 采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储

不同网络用户访问考虑

  • 引入CDN来解决不同网络服务商的接入速度问题
  • 在不同运营商机房部署服务器,通过镜像技术来实现不同网络服务商的接入速度问题
  • 通过域名解析,访问所在网络运营商的nginx,然后通过专线传输到异地局域网访问应用服务器
  • 租用代理结点,转发请求

不同地域用户访问考虑

  • 不同区域部署服务器
  • DNS解析域名指向该地域所在接入的nginx,Nginx通过专线内网访问应用服务器。
  • 租用代理结点,转发请求

高并发(高负载)的定义

  • CPU/内存开销,都有哪些进程和服务占用,IO开销,服务读写频率;
  • 增长趋势线性增加、指数增加(无索引遍历)、收敛增加(支撑性);
  • 系统阀值请求超越了OS阀值:如https超时太长导致https超过最大值;mysql链接越界;
  • 峰谷的规律和预测原因分析;
  • 异常的监控和跟踪异常比例不超过万分之几可以忽略,而千分之几就要去研究了。

数据容灾

  • 备份恢复,提供如何进行备份以及进行恢复工作
  • 备份策略,提供不同备份策略,应对各种情况数据恢复问题,例如数据库升级
  • 灾难演练,发生灾难后是否能继续提供正常服务