如何设计一个系统

数据库刚开始支撑到每秒并发二三千基本就完了,如果瞬间承载每秒5000/8000,甚至上万。一定会宕机。mysql压根扛不住这么高的并发量。 

 

很多app高峰期每秒并发几千,双十一甚至几万几十万。

1、系统拆分

如dubbo,每个系统连接一个数据库。

2、缓存

在计算机的世界中,CPU的处理速度可谓是一马当先,远远甩开了其他操作,尤其是I/O操作,除了那种CPU密集型的系统,其余大部分的业务系统性能瓶颈最后或多或少都会出现在I/O操作上,所以为了减少磁盘的I/O次数,那么缓存是必不可少的,通过缓存的使用我们可以大大减少I/O操作次数,从而在一定程度上弥补了I/O操作和CPU处理速度之间的鸿沟。而在我们ORM框架中引入缓存的目的就是为了减少读取数据库的次数,从而提升查询的效率。

大部分的高并发场景,都是读多写少,可以在数据库和缓存都写一份,读的时候大量走缓存。redis轻松单机几万的并发。

典型应用场景:一趟火车只有2000张票,200W人买,最多2000人下单成功,其他人都是查询库存。(可以加数据库二级缓存、和redis缓存来读吧-个人看法)

3、MQ

高并发写的场景,大量的写请求灌入MQ,排队,后面系统消费后慢慢写,控制在mysql承载范围之内。

用户100万请求--->全写入MQ---> 系统A每次去MQ消费2000条 --->mysql

3.1、MQ其余使用场景

发布订阅模型:

场景是系统A会产生用户ID:userId,要把userId通过调用系统B\C\D的接口传给他们做业务处理。若添加新系统,也需要此userId,则要再加一个接口调用。耦合严重。

解耦的做法就是:在系统A与系统BCD之间,增加消息队列MQ,系统A产生userId后,将其放入MQ,系统BCD通过监听MQ,来消费userId。

3.2、异步:主要解决请求的耗时

场景是用户发送请求到系统A,系统A执行完本地SQL(耗时100ms)后,还要调用BCD三个系统的接口,假设三次调用都耗时200ms。那么,总共一次请求耗时700ms。一旦调用接口变多,耗时会变得更长。

使用MQ解决耗时长的办法就是,在系统A与系统BCD之间分别增加MQ,系统A将数据消息写入MQ(耗时5ms),成功就返回并提示用户,剩余的BCD系统自己监听MQ并做相应业务操作。那么,这个请求耗时也就是100+5 = 105ms。

4、分库分表

可能到最后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值