阿里開源專案 druid 相關資料彙總

2021-09-07 13:24:15 字數 3088 閱讀 1060

專案發起人訪談:

github主頁:

druid 專案,我想我能用很短的話進行總結:首先,是個資料庫連線池,這也就意味著,需要建立執行緒池,讓connection (jdbc中的介面)與真實的執行緒見不是強關聯。其次,我想要,能夠建立監測的機制,記錄有哪些sql語句,每條sql語句的執行時間,哪些sql語句我想禁止等等。其實,類似於***機制,我要在connection上加上乙個**proxy機制。在做攔截的過程中,我們可能要解析sql語句。

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>  

在上面的配置中,通常你需要配置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是阿里巴巴開源平台上的乙個專案,整個專案由資料庫連線池 外掛程式框架和sql解析器組成。該專案主要是為了擴充套件jdbc的一些限制,可以讓程式設計師實現一些特殊的需...

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 可以...