该项目在阿里巴巴内部得到了广泛的部署,在外部也有大量的用户群。为了使大家更好地了解和使用Druid,我们采访了Druid项目的主要负责人——温少(博客)。
问:温少是ITeye的名人了,为了照顾新会员,先来个自我介绍吧!
温少:我2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。
2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。
问:Druid是什么?有什么作用?
温少:Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。
问:Druid的项目背景?目前的项目团队情况?开源目的?
温少:2010年开始,我负责设计一个叫做Dragoon的监控系统,需要一些监控组件,监控应用程序的运行情况,包括Web URI、Spring、JDBC等。为了监控SQL执行情况,我做了一个Filter-Chain模式的ProxyDriver,缺省提供StatFilter。当时我还做了一个SQL Parser。老板说,不如我们来一个更大的计划,把连接池、SQL Parser、Proxy Driver合起来做一个项目,命名为Druid,于是Druid就诞生了。
2011年2月春节期间,我完成了连接池(DruidDataSource)的第一个版本,4月开始在生产环境测试,2012年第一季度开始大规模实施。
提交过代码的开发者有5个人,主要代码是我维护,有一人专门负责内部实施。
通过开源,希望有更多使用场景,更多的反馈,更多人参与其中,共同打造最好的数据库连接池。
问:Druid支持哪些数据库?
温少:Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。
问:Druid是如何扩展JDBC的?
温少:Druid在DruidDataSourc和ProxyDriver上提供了Filter-Chain模式的扩展API,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用。
问:为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的?
温少:阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。
首先,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。
- 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
- SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
- 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等
其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。