- HikariCP數據庫連接池實戰
- 朱政科
- 3293字
- 2019-09-02 17:55:01
前言
為什么要寫這本書
我在年少時也曾做過許多夢,有些夢實現了,有些夢忘卻了,這些夢大多都是我一個人的夢。2017年我開始從事數據庫連接池中間件的研發和架構工作,并在公司內部寫了一系列原創的數據庫連接池HikariCP源碼解析和實戰的文章。在老板張聰的建議下,我申請了微信公眾號并堅持分享技術,公眾號的初心是:“寫的內容要有人閱讀,這樣才會引起互動交流;有朋友就不會覺得孤獨,而且互相的探討也有助于自身提高”。
也許是注定的安排,我從事的底層數據庫中間件采用了HikariCP這款數據庫連接池,這讓我和HikariCP結下了不解之緣。非常幸運的是,在長達近一年的時間內,每天都有大量的業務開發人員向我咨詢數據庫連接池的各項問題,最多的時候可以達到十多位同學排隊咨詢問題,頗有老中醫開堂坐診的感覺。我是一個細心的人,大家的疑問和最后的解決方式都會一一記錄下來,我也會協助網友以及其他公司的技術人員分析定位數據庫連接池問題,幫助他們的項目順利上線我也同樣可以分享喜悅,這段經歷是我技術之路上寶貴的財富。
我畢業于哈工大,哈工大的校訓是“規格嚴格、功夫到家”,母校影響著我的做事風格,我是一個追求極致的人。但每當我協助業務開發排查問題時,卻常常發現糟糕的事情。比如很多業務項目里充斥著HikariCP、Druid、BoneCP、c3p0、Tomcat JDBC等多種數據庫連接池依賴項,而開發人員卻并不知道自己究竟使用的是哪款數據庫連接池,而將依賴做到精簡是中間件崗位最基本的素養,美國童子軍也有一條 “讓營地比你來時更干凈”的軍規,這也是《Clean Code》這本經典書強烈建議的;再比如,我發現很多業務開發同學咨詢的問題如果總結下來是可以分門別類的,但是部分人解決了問題并不會分享、傳播、傳承,進而造成其他人接二連三的因為類似的問題再度陷入費時費力的排查之中;再比如,很多技術人員在學習使用數據庫連接池之后想對更深入的技術進行探索,然而市面上卻沒有任何一本體系、深入地介紹數據庫連接池的書,導致他們遺憾得繼續投入到其他項目中從而沒有完成深入了解數據庫連接池的夢。因此,我決定著書立說,這是全中國抑或是全世界第一本介紹數據庫連接池的書,由于這本書中凝結的更多的是我多年的實踐經驗、我對于社區數據庫連接池上千條問題討論的研讀等等,所以這本書稱之為《HikariCP實戰》。
HikariCP日語意思是光,代表了極致。極致無處不在,極致可以小到一次代碼提交,可以大到整個研發流程;極致可以小到一行JDK底層代碼,也可以大到整個電商系統架構;極致可以運用在技術選型,也可以運用在團隊管理。極致也是分場景的,有些是大規模高并發的極致要求,有些原則上不到一定的數量級輕易勿用。極致的追求,不僅僅需要對基礎技術原理有足夠深入了解,還需要配套的中間件支持,相關的業務協助改造。極致之路,沒有銀彈,不要想一招斃命,一口吃成個胖子,而是要審時度勢,根據當前的現狀來裁定。在和HikariCP打交道的期間,我發現這是數據庫連接池屆一款以追求極致為追求的藝術作品。不論是從相關文獻資料、問題討論、源碼更新,還是從HikariCP多年來不辭辛勞一步一個腳印的社區貢獻,我都能深深感受到HikariCP在極致之路上一次又一次得超越自我,以狼心追求卓越并面對未來的抉擇。
光不但是極致,更是希望。這些年,尤其是寫這本書的期間,我承受了不少的委屈,也遭遇了很多的坎坷,經歷了生離,也經歷了死別。然而我堅持將自己的夢實現,希望能活成一束光,能夠溫暖到別人能夠照亮別人,這才是真正的正能量。《HikariCP實戰》,是我的孩子,也是我夢想的實現,但我希望它不再是屬于我一個人的夢,更希望能夠將HikariCP的光亮照進每一名讀者心中,最后送大家一段話:“在一無所有時,也請堅持做一名追光者,愿大家都能找到自己內心深處的光,接近它成為它,去發光去發亮,成為別人眼中的和照亮別人的光,用更亮的光芒照亮世界的每一個角落。你就是太陽,蒸發了彷徨,有你的地方就是天堂。”
讀者對象
本書適合所有Java程序員閱讀,尤其適合以下讀者:
?Java初中級開發者。
?系統架構師。
?中間件開發者。
?Java多線程、并發開發者。
?使用HikariCP參與工作流程的公司與集體。
?開設Java相關課程的大專院校。
?其他對數據庫連接池技術感興趣的人員。
本書特色
本書是國內抑或是全球第一本系統介紹數據庫連接池HikariCP的書,在本書寫作的過程中,我盡量避免讓這本書成為“代碼書”或者“概念書”,全部用自己的實戰經驗和大量文獻涉獵將其凝結為一本高內涵高價值的實戰書籍。這本書準確的說寫了兩年的時間,第一年是我數據庫連接池的實踐工作以及零散的文字記錄,第二年是較為體系化的書籍的梳理成冊。本書的目錄結構也經過了好幾個版本的迭代修改,旨在讓讀者用最短的時間循序漸進的學完相關知識點;本書的篇幅也做過很多的壓縮、刪減,聚焦核心內容,像“瑞士軍刀”一樣短小鋒利,可以幫助讀者快速學習并解決問題。
本書以阿里大型消息中間件的無池化TCP調優開篇,這也是我在阿里晉升答辯的內容之一,在擴展性能調優知識的同時順帶引出Java平臺下性能調優的利器——數據庫連接池,這樣的開頭可以讓讀者真真切切感受到數據庫連接池出現的必要性。接著,從數據庫連接池出現的背景、原因入手,循序漸進的一步步為大家盤點了主流的數據庫連接池并進行了對比,這也彌補了市面上并沒有一本書體系收錄介紹各種數據庫連接池的遺憾。
當然,這還只是“前戲”,本書最精彩的部分在于對數據庫連接池已經有了基本的認識之后,我們將一起剖析HikariCP這款數據庫連接池的設計理念和原理,并對其重點功能和模塊逐一進行講解。在分析之余,這本書還會將HikariCP的關聯技術、具體實戰、擴展內容等等進行補充說明,旨在幫助讀者能夠舉一反三、觸類旁通。本書最后以一個疑難雜癥問題為例,通過排查問題,幫助大家一起對HikariCP的相關內容回顧和展望,以求融會貫通、溫故而知新。
如何閱讀本書
本書分為四大部分:
第一部分為準備篇,以阿里連接池極致優化案例引入,幫助讀者了解數據庫連接池的背景、原理,并全面了解主流的數據庫連接池,包含本書的主角HikariCP。
第二部分為基礎篇,著重講解HikariCP參數配置、JDBC等核心模塊。這些內容都是HikariCP重中之重的基礎,除了原理性介紹以外,為了幫助讀者夯實數據庫連接池的基礎,本書還特地對技術細節、設計理念、實戰擴展等方面進行了小知識點的補充。
第三部分為原理篇,首先,全方位的剖析了HikariCP性能極致的原因,這些都會成為讀者面試、工作中的談資;其次,從連接原理、參數原理、動態代理與字節碼技術等三個維度作為切入口,分別對HikariCP進行了源碼級別的解析,這樣全方位的剖析不同于單視角的源碼解析,更能將HikariCP的原理立體化的展示在讀者面前。
第四部分為實戰篇,這是本書精華的部分。HikariCP的監控、擴展技術、常見問題等都是讀者工作中較為迫切了解到、使用到的知識點,這些內容大多來自我實戰經驗的積累及大量文獻資料的收集整理,內容包羅萬象、精妙絕倫。本部分可以獨立閱讀,做為案頭的工具書使用。
勘誤和支持
由于作者的水平有限,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,我再在GitHub網站上專門新建了一個issue項目(https://github.com/CharlesMaster/Hikari/issues)。你可以將書中的錯誤、疑問、改進建議以GitHub Issue的形式發布在Bug勘誤表頁面中,我將盡量在線上為讀者提供最滿意的解答。當然,更希望大家可以通過issue關于HikariCP展開討論,互相切磋和共同成長。如果你有更多的寶貴意見,也歡迎發送郵件至郵箱just_love_zzk@126.com,期待能夠得到你們的真摯反饋。
致謝
首先要感謝偉大的HikariCP作者Brett Wooldridge,他開創了一款影響我整個人生的軟件。
感謝Apache ShardingSphere PPMC張亮、Apache SkyWalking PPMC吳晟在我從事數據庫連接池工作過程中給予的指導與幫助。感謝奇點云應用研發總監、首席架構師張聰做為引路人將我領入了數據庫連接池的領域,在你的支持與鼓勵下才促成了這本書的撰寫與出版。
感謝技術圈子中每一位充滿創意和活力的朋友——何濤、程超、右軍、李艷鵬、楊俊,以及名單之外的更多朋友,感謝你們長期對我的幫助與信任。
感謝機械工業出版社華章公司的編輯楊福川老師和孫海亮老師,在這一年多的時間中始終支持我的寫作,你們的鼓勵和幫助引導我能順利完成全部書稿。
感謝加工編輯王玉嬋老師為本書付出的勞動。
最后感謝我的爸爸、媽媽、小姨、姨夫、爺爺、奶奶、外公、外婆,感謝你們將我培養成人,并時時刻刻為我灌輸著信心和力量!
謹以此書獻給我最親愛的家人,以及眾多熱愛HikariCP的朋友們!
- Learn ECMAScript(Second Edition)
- Learning LibGDX Game Development(Second Edition)
- Oracle 18c 必須掌握的新特性:管理與實戰
- Mastering Xamarin.Forms(Second Edition)
- Babylon.js Essentials
- Java SE實踐教程
- C專家編程
- Couchbase Essentials
- ActionScript 3.0從入門到精通(視頻實戰版)
- Python程序設計開發寶典
- 快樂編程:青少年思維訓練
- 趣味掌控板編程
- 基于Docker的Redis入門與實戰
- Learning Azure DocumentDB
- 精通Oracle 12c 數據庫管理