预先善其事,必先利其器。 我们想要设计好一个高并发系统,必须要了解清楚底层基础原理,才能更好的去思考高并发接口功能的设计与实现。
一、高并发系统优化逻辑
01 什么事高并发?
就是指系统能够承载的最大并发数量,通常也指系统同时能够处理的最大请求数量。
关键指标: TPS 表示系统每秒处理的事务数量(写操作) ,QPS表示系统每秒处理的查询数量(读操作)
02 提高系统高并发的硬件因素
CPU: 增加CPU的核数,提高CPU的计算能力和处理能力,提升系统处理性能。
内存: 增加内存,将磁盘IO操作转化为内存操作,提升系统读写性能。
磁盘: 增加磁盘并更换为固态存储,提升硬件IO性能。
网卡: 升级网卡为万兆字节,提高网络带宽, 提升网络通信性能。
03 提高系统高并发的软件因素
使用缓存: 减少与数据库直接的直接交互计算,提升IO性能。
处理异步化: 采用线程异步处理请求,直接返回结果标志。(关键因素,基础因素)
集群化部署: 通过节点负载均衡,分摊请求流量,提升请求最大数量。
二、高并发业务应用场景
04 常用高并发业务场景
1.网络请求分发场景: tomcat处理请求。
2.大任务分解为小任务处理场景: 大型文件的下载/导入。
3.异步业务场景: 银行转账。
4.Socket通信场景: netty 高并发通信。
三、多线程常规优化
05 线程的运行状态切换
NEW新建状态 : new Thread()
RUNNABLE运行状态: xxx.start()
BLOCKED阻塞状态: synchronized加锁,并未抢到同步锁
WAITING等待状态: Object.wait()
TIMED_WAITING等待超时状态: sleep(xxx)
TERMINATED终止状态: run()执行结束
06 线程安全中断的方式
在while循环处添加信号量。
07 减少上下文切换
1.减少线程数量。
2.采用无锁设计方案解决线程间共享资源竞争问题。比如CAS自旋操作。
做一个有灵魂的开发者。
