常用方案
1.异步化+MQ
即非阻塞,化繁为简,拿到你需要处理的资源后尽快回复。适用于事务处理场景,且无需对上游返回数据场景。
2.无锁设计
本质上是要降低锁冲突,基于数据版本的乐观锁 有效的减少了互斥资源的范围,优点不言而喻。
3.batch处理
批量查询、批量commit,基本上操作慢速设备或者不能并行化的对象或者资源时,使用batch 永远是最好的手段。
4.副本设计
使用cache、静态化等手段,其核心思想在于 提前将结果准备好,实现的难点数据的更新。
5.集群+负载均衡
多个相同功能的节点均摊请求压力
6、系统拆分、分库分表、垂直拆分+水平拆分
分库:减少同库的连接数量,减少同库cpu、内存的负载
分表:减少sql时间
QPS(TPS)= 并发数/平均响应时间
要提高qps,我们必须做2个方面努力
1、增加并发数
1.比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。
2.增加数据库的连接数,预建立合适数量的TCP连接数
3.后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求
4.调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。
5.RPC调用的尽量使用线程池,预先建立合适的连接数。
2、减少平均响应时间
1.请求尽量越前结束,越好,这样压力就不要穿透到后面的系统上,可以在各个层上加上缓存
2.流量消峰。放行适当的流量,处理不了的请求直接返回错误或者其他提示。和水坝道理很类似
3.减少调用链
4.优化程序
5.减少网络开销,适当使用长连接
6.优化数据库,建立索引