数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划


数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
作者 | 阿凡博客
出品 | CSDN博客
封图 | 视觉中国
某些App怎么扛住1分钟10亿请求? 架构的演进路线 百万级并发:1秒100万次请求 。
千万级并发:一分钟6亿次请求 , 差不多就是需求的极限 。
架构的设计和架构优化要符合需求本身 , 不能无限制优化 。
基本概念
(1)分布式(系统中 , 多个模块在不同服务器上部署)
(2)集群(一个软件部署在多台服务器 , 并作为一个整体 , 提供一类服务)
(3)高可用(系统中部分节点失效 , 其他节点能够接替它继续工作或有相应的处理预案)
(4)负载均衡(把请求均匀的发到多个节点上)
架构演进:
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
单机架构
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
DNS服务器 , 做域名解析的服务器 , 作用是 , 经过DNS将www.taobao.com这类的域名转换为实际IP地址 , 浏览器转而访问这个IP对应的tomcat 。
瓶颈:用户增长 , tomcat和数据库之间竞争资源 , 单机性能不足以支撑业务 。
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
第一次:Tomcat和数据库分开部署(最常见架构)
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
Tomcat和数据库分别独占服务器资源 , 显著提高两者各自性能(tomcat服务器找一个内存大的 , DB服务器找一个硬盘大的 , 带宽更宽的) 。
瓶颈:用户量增长 , 数据库并发读写 , 尤其是读 , 成为瓶颈 。
注意 , 不会通过数据库集群解决 。
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
第二次演进:引入本地缓存甚至分布式缓存
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
在Tomcat服务器上(Java程序所在的地方)加入缓存 , 可以把绝大多数请求(尤其是查询)在访问数据库前拦截掉 。
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
Redis放在Tomcat服务器上 , 如果不够用 。
那么Redis可以自己放在一个服务器 , 也可以多弄几台Redis服务器 , 配置成主从同步(提升可用性可以加上哨兵) 。
瓶颈:用户数量增长 , 并发压力主要在单机的tomcat上 , 响应逐渐变慢 。
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
第三次演进:引入反向代理和负载均衡
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
使用反向代理 , 将大量的用户请求 , 均匀分发到每个Tomcat中(一般来讲 , Tomcat对应100个并发 , nginx对应5万个并发 , 具体的要看服务器性能) 。
瓶颈:应用服务器可支持的并发量大大增加 , 缓存能力也可以轻易扩展 , 并发量增长意味着更多请求穿透到数据库 , 单机的数据库最终成为瓶颈 。

数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划
本文插图
第四次演进:数据库读写分离
数据库1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划


推荐阅读