乐趣区

线程池

《别再乱改数据库连接池的大小了》


解释了数据库连接池。
Tomcat 设置过大的数据库连接池:
Tomcat 同时向数据库并发很多连接,会导致大量请求连接到数据库,数据库主机任务很多,CPU 频繁上下文切换,导致查询耗时增加。

而应用程序使用连接池的用途就是,减少应用程序(Tomcat)本身创建连接和销毁的损耗。


数据库主机瓶颈:CPU、磁盘 IO、网络 IO、内存

数据库连接池即为 cpu 同时处理连接的数据量。连接数 = ((核心数 * 2) + 有效磁盘数)
高并发业务,需要的是一个小连接池和一个等待连接的队列。
如果,场景很复杂。比如:
系统同时混合了长事务和短事务,这时,根据上面的公式来计算就很难办了。正确的做法应该是创建两个连接池,一个服务于长事务,一个服务于 ” 实时 ” 查询,也就是短事务。
还有一种情况,比方说一个系统执行一个任务队列,业务上要求同一时间内只允许执行一定数量的任务,这时,我们就应该让并发任务数去适配连接池连接数,而不是连接数大小去适配并发任务数。

对于容器来说,
docker 默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制。- c 只是改变容器在资源紧张情况下的优先级。
K8S CPU 限制,是限制容器占用 CPU 的时间,爆发后可以多占用 CPU 时间片。

进程是操作系统进行资源(包括 cpu、内存、磁盘 IO 等)分配的最小单位。
线程是 cpu 调度和分配的基本单位。


网站并发和 TPS

系统吞度量要素:
系统吞吐量几个重要參数:QPS,TPS、并发数、响应时间(RT)

QPS:每秒钟 request 数量
TPS:每秒钟事务数量

一般 TPS 是对整个系统来讲的。一个应用系统 1s 能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用 QPS 比较多。

吞吐量: 吞吐量是指系统在单位时间内处理请求的数量。
并发数:系统同一时候处理的 request/ 事务数
响应时间:一般取平均响应时间

nginx 每一次成功的请求,记录一条日志。所以统计 nginx 日志条数,应该是统计的请求量,统计一分钟请求数 /60=QPS。

理解了上面三个要素的意义之后,就能推算出它们之间的关系:
QPS = 并发数 / 平均响应时间
或者
并发数 = QPS* 平均响应时间

退出移动版