使用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线程数跑满,或者直接挂了