欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

面试题四如何设计一个高并发的架构系统

时间:2023-07-26
一、系统拆分

使用dubbo、SpringCloud实现分布式,拆分系统,不同业务访问不同数据库

二、缓存

大量读请求直接从缓存里取

三、MQ

读请求解决好后,就要解决写请求,加入MQ进行削峰

四、分库分表

加入MQ可以针对平时数据量不大,但秒杀时数据量很大的场景,但如果平时数据量就很大,那MQ削峰了也没用。这时进行分库分表,将请求分摊到各个库

五、读写分离

要更新缓存中的数据,所以主库负责写,从库负责读

六、ELK

分布式系统上ELK

七、简述

阿里云ECS弹性伸缩,高峰特别是秒杀时,NGINX限流一个IP每秒1个,前端CDN静态化,还有秒杀前不要暴露真实秒杀地址,单机+cache,配置ECS感应流量,自动扩展到20-30台,单台扛几百用户单纯响应是没啥问题的(这里说的是单纯响应,就是说先确保不出现500或502这类错误),后端代码逻辑Redis防刷,需要同步调用的接口尽可能少(比如一般只走支付网关,拉起支付接口),redis+lua预热加减库存,如果需要限流redis队列排序限流等(比如队列里用户数控制最多50000),同步接口返回速度尽可能高(这里面需要JVM、各种SQL优化以及读写分离、分库分表),能走异步的尽量走异步,比如短信通知,购买成功加积分级别,抵用券等。事务尽可能的小,就是说都是小事务提交(不要把什么写日志,调接口也包在开启事务逻辑里面),还有乐观锁,悲观锁,间隙锁(特别是间隙锁,MySQL在RR隔离级别下产生的间隙锁要特别小心),快照读,当前读,mvcc这些一定要清楚认知和使用恰当,不然事务隔离级别下的锁竞争,平峰时快速普通SQL不光会跑到十几甚至几十秒,而且会造成MySQL线程数跑满,或者直接挂了

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。