给个例子,你的系统部署的机器是4核8G,数据库服务器是16核32G。
此时假设你的系统用户量总共就10万,用户量很少,日活用户按照不同系统的场景有区别,我们取一个较为客观的比例,10%吧,每天活跃的用户就1万。
按照28法则,每天高峰期算他4个小时,高峰期活跃的用户占比达到80%,就是8000人活跃在4小时内。
然后每个人对你的系统发起的请求,我们算他每天是20次吧。那么高峰期8000人发起的请求也才16万次,平均到4小时内的每秒(14400秒),每秒也就10次请求。
然后系统层面每秒是10次请求,对数据库的调用每次请求都会好几次数据库操作的,比如做做crud之类的。
那么我们取一个一次请求对应3次数据库请求吧,那这样的话,数据库层每秒也就30次请求,对不对?
集群化部署
- 添加负载均衡层,将请求均匀打到系统层。
- 系统层采用集群化部署多台机器,扛住初步的并发压力。
数据库分库分表 + 读写分离
对系统做分库分表 + 读写分离,也就是把一个库拆分为多个库,部署在多个数据库服务上,这是作为主库承载写入请求的。
然后每个主库都挂载至少一个从库,由从库来承载读请求。
缓存集群引入
数据库其实本身不是用来承载高并发请求的
缓存系统的设计就是为了承载高并发而生,用缓存集群来承载大部分的读请求。
- 不要盲目进行数据库扩容,数据库服务器成本昂贵,且本身就不是用来承载高并发的
- 针对写少读多的请求,引入缓存集群,用缓存集群抗住大量的读请求
引入消息中间件集群
假如说你所有写请求全部都落地数据库的主库层,当然是没问题的,但是写压力要是越来越大了呢?
比如每秒要写几万条数据,此时难道也是不停的给主库加机器吗?
消息中间件技术,也就是MQ集群,他是非常好的做写请求异步化处理,实现削峰填谷的效果。