druid是阿里巴巴開源平台上的乙個專案,整個專案由資料庫連線池、外掛程式框架和sql解析器組成。該專案主要是為了擴充套件jdbc的一些限制,可以讓程式設計師實現一些特殊的需求,比如向金鑰服務請求憑證、統計sql資訊、sql效能收集、sql注入檢查、sql翻譯等,程式設計師可以通過定製來實現自己需要的功能。
該專案在阿里巴巴內部得到了廣泛的部署,在外部也有大量的使用者群。為了使大家更好地了解和使用druid,我們採訪了druid專案的主要負責人——溫少(
部落格)。
溫少是iteye的名人了,為了照顧新會員,先來個自我介紹吧!
我2023年畢業於深圳大學,畢業後到金蝶軟體研發中心工作9年,工作內容包括工作流引擎、多資料庫支援引擎、簡訊網閘道器等。
2023年3月加入阿里巴巴至今,主要的工作是設計和實現阿里巴巴應用監控系統dragoon,druid和fastjson都是監控系統實現的副產品。
druid首先是乙個資料庫連線池,但它不僅僅是乙個資料庫連線池,它還包含乙個proxydriver,一系列內建的jdbc元件庫,乙個sql parser。
2023年開始,我負責設計乙個叫做dragoon的監控系統,需要一些監控元件,監控應用程式的運**況,包括web uri、spring、jdbc等。為了監控sql執**況,我做了乙個filter-chain模式的proxydriver,預設提供statfilter。當時我還做了乙個sql parser。老闆說,不如我們來乙個更大的計畫,把連線池、sql parser、proxy driver合起來做乙個專案,命名為druid,於是druid就誕生了。
2023年2月春節期間,我完成了連線池(druiddatasource)的第乙個版本,4月開始在生產環境測試,2023年第一季度開始大規模實施。
提交過**的開發者有5個人,主要**是我維護,有一人專門負責內部實施。
通過開源,希望有更多使用場景,更多的反饋,更多人參與其中,共同打造最好的資料庫連線池。
druid支援所有jdbc相容的資料庫,包括oracle、mysql、derby、postgresql、sql server、h2等等。
druid針對oracle和mysql做了特別優化,比如oracle的ps cache記憶體占用優化,mysql的ping檢測優化。
druid在druiddatasourc和proxydriver上提供了filter-chain模式的擴充套件api,類似serlvet的filter,配置filter攔截jdbc的方法呼叫。
阿里巴巴是乙個重度使用關聯式資料庫的公司,我們在生產環境中大量的使用druid,通過長期在極高負載的生產環境中實際使用、修改和完善,讓druid逐步發展成最好的資料庫連線池。druid在監控、可擴充套件性、穩定性和效能方面都有明顯的優勢。
首先,強大的監控特性,通過druid提供的監控功能,可以清楚知道連線池和sql的工作情況。
其次,方便擴充套件。druid提供了filter-chain模式的擴充套件api,可以自己編寫filter攔截jdbc中的任何方法,可以在上面做任何事情,比如說效能監控、sql審計、使用者名稱密碼加密、日誌等等。
druid內建提供了用於監控的statfilter、日誌輸出的log系列filter、防禦sql注入攻擊的wallfilter。
阿里巴巴內部實現了用於資料庫密碼加密的circefilter,以及和web、spring關聯監控的dragoonstatfilter。
第三,druid集合了開源和商業資料庫連線池的優秀特性,並結合阿里巴巴大規模苛刻生產環境的使用經驗進行優化。
效能不是druid的設計目標,但是測試資料表明,druid效能比dbcp、c3p0、proxool、jboss都好。
這裡有一些測試資料:
druid提供了mysql、oracle、postgresql、sql-92的sql的完整支援,這是乙個手寫的高效能sql parser,支援visitor模式,使得分析sql的抽象語法樹很方便。
簡單sql語句用時10微秒以內,複雜sql用時30微秒。
通過druid提供的sql parser可以在jdbc層攔截sql做相應處理,比如說分庫分表、審計等。druid防禦sql注入攻擊的wallfilter就是通過druid的sql parser分析語義實現的。
druid提供filter-chain模式的外掛程式框架,通過編寫filter配置到druiddatasource中就可以攔截jdbc的各種api,從而實現擴充套件。druid提供了一系列內建filter。
druid的優勢是在jdbc最低層進行攔截做判斷,不會遺漏。
druid實現了oracle、mysql、postgresql、sql-92的parser,基於sql語法分析實現,理解其中的sql語義,智慧型、準確、誤報率低。
druid是阿里巴巴監控系統dragoon的副產品,從dragoon監控系統的資料來看,在阿里巴巴已經部署了600多個應用。在阿里巴巴外部也有很多druid的使用者,外部使用者沒有正式統計資料,但經常有反饋。
可以通過druiddriver把內建的filter用在其他連線池中。在2023年上半年druiddatasource不成熟的時候,我們也是這麼做的。在其他連線池中使用內建的filter,需要修改jdbc-url,使用druiddriver作為乙個proxydriver。
druid是乙個開源專案,基於apache 2.0協議,你可以免費自由使用。druid只支援jdk 6以上版本,不支援jdk 1.4和jdk 5.0。
為了方便大家遷移,druid的配置和dbcp是基本一致的,如果你原來是使用dbcp,遷移是十分方便的,只需要把corg.apache.commons.dbcp.basicdatasource修改為om.alibaba.druid.pool.druiddatasource就好了。
xml**
<
bean
id="datasource"
class="com.alibaba.druid.pool.druiddatasource"
init-method="init"
destroy-method="close"
>
<
property
name="url"
value="$"
/>
<
property
name="username"
value="$"
/>
<
property
name="password"
value="$"
/>
<
property
name="filters"
value="stat"
/>
<
property
name="maxactive"
value="20"
/>
<
property
name="initialsize"
value="1"
/>
<
property
name="maxwait"
value="60000"
/>
<
property
name="minidle"
value="1"
/>
<
property
name="timebetweenevictionrunsmillis"
value="60000"
/>
<
property
name="minevictableidletimemillis"
value="300000"
/>
<
property
name="validationquery"
value="select 'x'"
/>
<
property
name="testwhileidle"
value="true"
/>
<
property
name="testonborrow"
value="false"
/>
<
property
name="testonreturn"
value="false"
/>
<
property
name="poolpreparedstatements"
value="true"
/>
<
property
name="maxpoolpreparedstatementperconnectionsize"
value="50"
/>
bean
>
在上面的配置中,通常你需要配置url、username、password、maxactive這幾項。
在druiddatasource中,你可以不配置driverclass,它根據url自動識別。druid能夠自動識別20多中url,常見的jdbc driver都包括了。
從dbcp遷移最方便,把org.apache.commons.dbcp.basicdatasource修改為om.alibaba.druid.pool.druiddatasource就好了。
druid**上提供了
druid/dbcp/c3p0/jboss/weblogic的引數對照表,通過這個對照表來遷移你目前的配置。
druid原始碼託管在github.com上,專案位址是
你可以在github上提交patch和issue(包括bug和新特性)。你也可以加入我們的qq群92748305,和開發者以及其他使用者一起交流。
Druid 與 阿里巴巴開源專案Druid
druid 單詞 於西方古羅馬的神話人物,中文常常翻譯成德魯伊。本問介紹的druid 是乙個分布式的支援實時分析的資料儲存系統 data store 美國廣告技術公司metamarkets 於2011 年建立了druid 專案,並且於2012 年晚期開源了druid 專案。druid 設計之初的想法...
阿里巴巴開源平台新增專案Druid
阿里巴巴開源平台新增專案druid druid是什麼?druid是乙個jdbc元件,它包括三部分 druiddriver driver,能夠提供基於filter chain模式的外掛程式體系。druiddatasource 高效可管理的資料庫連線池。sqlparser druid可以做什麼?1 可以...
學習阿里巴巴開源專案dubbo
1.dubbo使用場景 高併發,高訪問量的移動網際網路或物聯網。京東,阿里巴巴等都在使用它。它是乙個分布式服務框架,致力於提供高效能和透明化的rpc遠端服務呼叫方案,以及soa服務治理方案.不適合大檔案的傳輸。2.支援協議 1 dubbo service 穩定,適合小資料量傳輸,大字串和檔案不適合 ...