当前位置:   article > 正文

Druid连接池

Druid连接池

1.什么是Druid连接池

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

1.1 代码仓库、文档、下载

  • Github项目地址 https://github.com/alibaba/druid
  • 文档 https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
  • 下载 http://repo1.maven.org/maven2/com/alibaba/druid/
  • 监控DEMO http://120.26.192.168/druid/index.html

1.2 竞品对比

在这里插入图片描述

1.3 关于性能特性

对于连接池来说,连接池本身的性能消耗在整个调用链路中通常占比不大,连接池的性能关键点是,连接是否LRU的方式重用,是否支持PSCache(PreparedStatementCache)才是性能的关键点。当然DruidDataSource在没有使用Filter没有打开testOnBorrow的情况下,裸测也是极好。

2. 稳定性特性

稳定性是数据库连接池最关键的特性,他不仅是木桶原理中的短板,而是木桶的底部。由于涉及并发和数据库系统的交互,稳定性需要由内置稳定保障机制和长时间大规模验证来保证。

2.1 内置ExceptionSorter

Druid连接池内置经过长期反馈验证过的ExceptionSorter 。ExceptionSorter 的作用是:在数据库服务器重启、网络抖动、连接被服务器关闭等异常情况下,连接发生了不可恢复异常,将连接从连接池中移除,保证连接池在异常发生时情况下正常工作。ExceptionSorter是连接池稳定的关键特性,没有ExceptionSorter 的连接池,不能认为是有稳定性保障的连接池。

2.2 阿里大规模验证

Druid连接池是阿里巴巴内部唯一使用的连接池,在内部数据库相关中间件TDDL/DRDS 都内置使用强依赖了Druid连接池,经过阿里内部数千上万的系统大规模验证,经过历年双十一超大规模并发验证。

2.3. 社区大规模验证

Druid连接池自从2001年开源以来,在每年的“开源中国最受欢迎开源软件 ”评比中,基本都会排名前十。Druid在github上 star数量超过13000,Fork数量5000,Maven中央仓库月下载量超过30000。Druid连接池在中国社区使用非常广,占据统治地位,社区大规模使用也证明了Druid连接池的稳定。

2.4. 贴心的错误提示

当连接不够用时,申请链接超时报错,Druid连接池能够报错会告诉你当前RunningSQL有哪些,当前连接池的水平信息。通过错误日志很方便知道系统瓶颈在哪里。

3. 为监控而生

Druid连接池最初就是为监控系统采集jdbc运行信息而生的,它内置了StatFilter 功能,能采集非常完备的连接池执行信息Druid连接池内置了能和Spring/Servlet关联监控的实现,使得监控Web应用特别方便Druid连接池内置了一个监控页面,提供了非常完备的监控信息,可以快速诊断系统的瓶颈。

3.1 监控信息采集的StatFilter

Druid连接池的监控信息主要是通过StatFilter 采集的,采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等。具体配置可以看这个 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

3.2 监控不影响性能

Druid增加StatFilter之后,能采集大量统计信息,同时对性能基本没有影响。StatFilter对CPU和内存的消耗都极小,对系统的影响可以忽略不计。监控不影响性能是Druid连接池的重要特性。

3.3 SQL参数化合并监控

实际业务中,如果SQL不是走PreparedStatement,SQL没有参数化,这时SQL需要参数化合并监控才能真实反映业务情况。如下SQL:

select * from t where id = 1
select * from t where id = 2
select * from t where id = 3
参数化后:
select * from t where id = ?
  • 1
  • 2
  • 3
  • 4
  • 5

参数化合并监控是基于SQL Parser语法解析实现的,是Druid连接池独一无二的功能。

3.4 执行次数、返回行数、更新行数和并发监控
StatFilter能采集到每个SQL的执行次数、返回行数总和、更新行数总和、执行中次数和和最大并发。并发监控的统计是在SQL执行开始对计数器加一,结束后对计数器减一实现的。可以采集到每个SQL的当前并发和采集期间的最大并发。

4. 防SQL注入

SQL注入攻击是黑客对数据库进行攻击的常用手段,Druid连接池内置了WallFilter 提供防SQL注入功能,在不影响性能的同时防御SQL注入攻击。

5.1 基于语意的防SQL注入

Druid连接池内置了一个功能完备的SQL Parser,能够完整解析mysql、sql server、oracle、postgresql的语法,通过语意分析能够精确识别SQL注入攻击。

5.2 极低的漏报率和误报率

基于SQL语意分析,大量应用和反馈,使得Druid的防SQL注入拥有极低的漏报率和误报率。

5.3 防注入对性能影响极小

内置参数化后的Cache、高性能手写的Parser,使得打开防SQL注入对应用的性能基本不受影响。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/336946
推荐阅读
相关标签
  

闽ICP备14008679号