写点什么

架构经典设计思想之池化

作者:三叶草
  • 2023-07-25
    贵州
  • 本文字数:990 字

    阅读完需:约 3 分钟

池化

  • 将资源统一使用资源池管理起来,精细化控制使用

  • 充分使用复用的思想,减少共享资源的创建开销


常见案例

数据库连接池、redis 连接池、fasthttp、FG 集群调度池、Go 协程池、K8S 调度、Go runtime 的 GMP 调度、操作系统调度、UB 统一内存池


数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 这项技术能明显提高对数据库操作的性能。


  • 实现连接池时,注意最小连接数、最大连接数、保活时间、连接健康探测时间。下面是 druid 连接池简单示例。

druid 开源参数配置参考:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

package test;
import com.alibaba.druid.pool.DruidDataSource;
import java.sql.Connection;import java.sql.SQLException;
public class JdbcConnectionPool { private volatile static JdbcConnectionPool instance;
private DruidDataSource dataSource;
private JdbcConnectionPool(String url, String username, String password) { dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setMaxActive(5); dataSource.setInitialSize(1); dataSource.setMinIdle(1); }
public static JdbcConnectionPool getInstance(String url, String user, String password) { if (instance == null) { synchronized (JdbcConnectionPool.class) { if (instance == null) { instance = new JdbcConnectionPool(url, user, password); } } } return instance; }
public Connection getConnection() throws SQLException { return dataSource.getConnection(); }
}
复制代码

redis 连接池


FG 集群调度池

GO 协程池

K8s 调度

Go runtime 的 GMP 调度

操作系统调度

UB 统一内存池


参考文献:

  1. 数据库连接池 https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0/1518538

用户头像

三叶草

关注

还未添加个人签名 2019-11-17 加入

还未添加个人简介

评论

发布
暂无评论
架构经典设计思想之池化_三叶草_InfoQ写作社区