1、我为PostgreSQL生态开发的几个开源软件唐成中启乘数科技&联合创始人01.01.我做开源软件的一个历程我做开源软件的一个历程02.02.开源连接池软件开源连接池软件ZQPoolZQPool03.03.开源开源PostgreSQLPostgreSQL高可用软件高可用软件CLupCLup04.04.几个开源小工具几个开源小工具如把表永远cache在文件系统缓冲中的工具filecache,清理一个文件的缓冲的工具fincache,拷贝数据块的工具blkcpy,修改数据块中事务状态的工具pg_fix分享内容分享内容PART 01:PART 01:我做开源软件的一个历程我做开源软件的一个历程我做开
2、源软件的一个历程我做开源软件的一个历程开源的初衷爱好编程提升自我使用开源,回馈开源一些认识开源不是免费,也可以是一个商业模式开放心态:不要担心自己开源的东西被被人抄去促进自我提升我做开源软件的一个历程我做开源软件的一个历程0102030405先做一些小的工具参与社区开发慢慢做一些功能更多的模块做开源之前,要充分了解是否已经有类似功能的开源软件在公司里做开源,与公司一起成长PART 02:PART 02:开源连接池软件开源连接池软件ZQPoolZQPool开源连接池软件开源连接池软件ZQPoolZQPool为什么要开发为什么要开发ZQPoolZQPool?Java应用已经有了连接池C3P0、DB
3、CP,为啥还需要数据库侧的连接池软件?已经有了pgbouncer和pgpool-II,为啥需要ZQPool?先说pgpool-II:pgpool-II虽然名字中有pool,实际上起不到连接池作用?是不是很诧异?通常连接池是需要解决到数据库本身连接太多的问题前面到pgpool-II有1万个连接,pgpool-II到数据库中就需要有1万个连接?pgpool-II是一个伪装成连接池的读写分离的软件那么pgbouncer呢?pgbouncer是一个真实的连接池软件但其通常情况下不能减少java应用到数据库上的连接压力?为什么呢?听我给大家娓娓道来开源连接池软件开源连接池软件ZQPoolZQPool有了
4、C3P0、DBCP等等java应用侧的连接池,软件是否还需要数据库侧的连接池软件?应用的机器数目远远超过数据库机器。C3P0、DBCP等等这些应用侧的连接池并不能跨机器复用假设应用的台数300台,每台机器上的应用C3P0或DBCP的连接数给30,这样到数据库的连接数就为300*30=9000应用机器1应用机器2应用机器3应用机器n开源连接池软件开源连接池软件ZQPoolZQPool应用机器1应用机器2应用机器3应用机器n改进方法是在应用和数据库之间加入一个数据库侧连接池软件,假设应用的台数300台的9000个连接到数据库侧连接池软件上,然后连接池软件通过连接复用的机制,把连接从9000个聚合成
5、300个,然后再连接到数据库上,这样就大大的降低了数据库上的连接数。数据库侧连接池软件pgpoolpgpool-II:II:一个伪装成连接池的读写分离的软件一个伪装成连接池的读写分离的软件应用到pgpool-II有1万个连接,pgpool-II到数据库中也会产生1万个连接也就是pgpool-II不能减少到数据库上的连接pgpool-II目前主要做为透明读写分离的软件使用?pgbouncerpgbouncer的缺点的缺点两大缺点:难以减少java应用到数据库的连接数是单线程程序,单个pgbouncer无法支持海量的查询pgbouncer适合于短连接应用,如php使用了高性能的libevent,单
6、线程内处理的效率是很高的,如果超过了单核性能,会立即进入瓶颈pgbouncerpgbouncer难以难以减少减少javajava应用到数据库的连接数原因应用到数据库的连接数原因与绑定变量有关,jdbc执行SQL是分两个步骤的:先使用Prepare的SQL,即:“prepare S_1 as select*from test01 where id=$1;”然后再“execute S1(1);”这两个步骤必须一个连接中执行,但pgbouncer连接池不能跟踪的这两个步骤,有可能把这两个步骤分到两个不同的数据库连接中执行,导致了执行错误org.postgres