池化技术整理
0. 大纲
- 池化背景
- 基本概念回顾
- 为什么要连接复用
- 什么是一个连接
- Java线程池
- 连接池
- Jedis (redis连接)
- Hikari(数据库连接池)
- kafka
池化技术背景
池,一种资源抽象的形象化说法。编程世界中的池是一组资源, 可以随时使用, 但不随时地创建和释放。资源池(resource pool)被认为是一种设计模式,这里的资源主要是指系统资源, 这些资源不专属于某个进程或内部资源。客户端向池请求资源, 并使用返回的资源进行指定的操作。当客户端使用完资源后, 会把资源放回池中而不是释放或丢弃掉。
任何技术都有自己的应用边界,池作为一种资源使用技术,典型的使用情形是:
- 当获取资源的成本较高的时候
- 当请求资源的频率很高且使用资源总数较低的时候
- 当面对性能问题,涉及到处理时间延迟的时候
池中的资源主要有两类:需要系统调用(system call) 的系统资源,或主演需要网络通信的远程资源, 如数据库连接、套接字连接、线程和内存分配等等。池中的资源一般不包括像字体库或图片等大的数据对象, 那些资源的存储一般是通过是数据缓存或数据库技术实现的。由于资源池的存在, 从池中获取资源所需的时间变成了可预知的,从而在一定程度上解决性能的问题。
基本概念回顾
连接的基本概念

我们讨论的连接里,大部分值得是TCP,按照上图的理解,其实真正连接的是物理媒介,再往上才是我们了解的网络逻辑分层模型。
媒介和链路层不做过多查阅了,重点记录TCP/IP链路的相关知识。
《TCP/IP 卷一 协议》第17章到第22章一共六章描述TCP相关内容,可见其重要性。因为是总结连接池的部分,这里之记录第18章《TCP连接的建立与终止》
TCP提供一种面向连接的,可靠的字节流服务:
-
面向连接:一个IP地址和一个端口号我们称之一个插口(Socket),典型的Client-Server模型中对应着一组插口对(Socket Pair),可以唯一确定互联网中每个互联网中每个TCP连接的双方。
也就是说【客户端IP,客户端端口,服务端IP,服务端端口】四元组可以唯一确定一个TCP连接。- 这里如果要继续深究,那么可以问什么是IP,什么是port?和硬件里网卡对应关系是什么?
- 我们知道ip是网段+主机组成,基本上通过ip能定位网络中的一台主机(这里姑且认为对主机的概念没什么疑惑)。那这时,主机是有cpu,内存,磁盘balabala组成的,而其中线程是其最小执行单元。一个主机上可以运行多个进程,而端口则主机的对外的出口,俩个概念。关系是,一个进程(多线程)可以监听多个端口,也就是说一个执行单元可以通过多个出口和主机之外通信。回过来,port又分为固定端口0-1024,和动态端口1024~49151。我们的tomcat-8080,jetty,undertown,nginx,redis-6379,mysql-3306每次的连接使用的是动态端口,每个请求会动态再申请server的端口。
-
可靠性保证:
- 数据分块:客户端上,应用数据被分割成TCP认为最合适发送的数据块
- 确认机制:客户端上,当一个TCP发出一个段(segment)后,它启动一个定时器,等待服务端确认收到这个报文段。如果不能收到报文段,客户端重发。
- 延时确认:服务端上,当收到客户端发来的数据,他将发送一个确认,这个确认不是立即发送,通常将推迟几分之一秒(数据捎带ACK)
- 校验:客户端上保持它首部和数据的校验和,服务端校验差错,将丢戏报文段和不确认收到(第3点),希望客户端超时重发
- 排序:服务端上,由于IP数据报到达可能会失序,TCP会重新排序,交给应用层有序数据
- 去重:服务端上,IP数据报会重复,服务端需要做去重。
- 流控:TCP连接的每一方都有固定大小的缓存空间,服务端只语训客户端缓存区所能接纳的数据,防止较快的主机导致较慢的主机缓存溢出。
那么一个连接基本的生命周期是 建立 -> 通信 -> 终止,到了大家熟知的建立三次握手,终止四次握手

相关文章:

浙公网安备 33010602011771号