HikariCP 數據庫連接池實戰

朱政科 著

買這商品的人也買了...

商品描述

這是一本從設計思想、功能使用、原理實現、工程實踐、技術擴展5個維度全面講解數據庫連接池HikariCP的著作。得到了褚霸、德哥、張亮、吳晟等近10位來自阿裡、京東等因特網企業的技術專家的高度評價,同時也在社區里獲得廣泛好評。
系統性上,本書從基本功能到擴展技術,內容涵蓋HikariCP的方方面面;深度上,本書從原理闡述到源碼分析,直擊HikariCP的本質;實操性上,本書不僅有小案例和綜合性的大案例,還有針對疑難問題提出的解決方案。
全書共14章,在邏輯上分為四大部分:
準備篇(第1~3章) 通過阿裡連接池極致優化案例展示了不使用連接池和使用連接池在QPS方面的天壤之別,帶領讀者瞭解數據庫連接池的背景、歷史及原理,以及本書的主角HikariCP。
基礎篇(第4~5章) 系統梳理HikariCP的基礎知識,包含參數配置、JDBC等核心模塊,這些內容都是HikariCP基礎的重中之重。
原理篇(第6~9章) 直擊HikariCP的“靈魂”,深入淺出地分析了HikariCP的原理。首先,全方位剖析了HikariCP可實現性能極致的原因,其會成為讀者面試、工作中的談資; 其次,以連接原理、參數原理、動態代理與字節碼技術這3個維度作為切入口,分別對HikariCP進行了源碼級別的解析,這樣全方位的剖析不同於單視角的源碼解析,能將HikariCP的原理更加立體化地展示在讀者面前。
實戰篇(第10~14章) 這是本書的精華部分。HikariCP的監控、擴展技術、常見問題等都是讀者在工作中會經常用到的知識點,這些內容來自作者多年實戰經驗的積累及對大量文獻資料的收集整理,包羅萬象、精妙絕倫。

作者簡介

朱政科
資深架構師,十年IT老兵,對各種數據庫連接池有深入的研究。
曾在阿里等一線互聯網公司長期從事中間件的研發及團隊管理工作,連續經歷過3年“雙11”大促,在大量的實踐中積累了豐富的經驗。
熱愛開源,熱愛新技術,對Apache ShardingSphere、Apache Skywalking等技術社區都做出過貢獻。除了中間件技術,先後主導和參與了多個重要的物聯網、人工智能等大型項目,對軟件系統架構有深刻的積累和沈淀。
運營公眾號《工匠人生》和知識星球《豬豬的架構師私密圈》。

目錄大綱

讚譽
前言
第一篇準備篇
第1章阿里中間件實戰,第一個案例2 
1.1物聯網MQTT單機壓測130萬參數調優2 
1.2阿里中間件TCP四次揮手性能調優實戰4 
1.2.1億級消息網關Rowan架構4 
1.2.2人臉識別服務:異曲同工的架構6 
1.2.3 “雙十一大促”全鏈路壓測發現TCP問題9 
1.2.4 Linux內核網絡參數調優11 
1.2.5 Linux TCP參數調優12 
1.2.6一行代碼大幅提升QPS 13 
1.3技術驅動業務,結果為導向16 
1.4本章小結17 
第2章數據庫連接池江湖19 
2.1為什麼使用數據庫連接池19 
2.2數據庫連接池原理22 
2.3數據庫連接池百曉生《兵器譜》 23 
2.3.1 c3p0 24 
2.3.2 Proxool 29
2.3.3 XAPool 30 
2.3.4 DBCP 32 
2.3.5 Tomcat JDBC Pool 34 
2.3.6 BoneCP 36 
2.3.7 Druid 38 
2.4主流數據庫連接池對比41 
2.4.1性能對比41 
2.4.2代碼複雜度42 
2.4.3功能對比42 
2.4.4數據庫中斷43 
2.5本章小結46 
第3章初識HikariCP 47 
3.1 Hikari背景、特色及前景47 
3.2 SpringBoot數據庫連接池加載順序剖析51 
3.3 SpringBoot整合HikariCP實戰53 
3.3.1 Spring Initializr 53 
3.3 .2添加HikariCP依賴55 
3.3.3 JdbcTemplate 56 
3.3.4 Database Initialization 57 
3.3.5啟動運行59 
3.4本章小結60 
第二篇基礎篇
第4章HikariCP參數配置64 
4.1校時64 
4.2 HikariCP配置手冊68
4.2.1必需配置69 
4.2.2非必需配置72 
4.3 HikariCP連接池配置多大合適78 
4.4 Fixed Pool Design思想81 
4.5 MySQL高性能配置82 
4.6 Hibernate配置83 
4.7 JNDI配置85 
4.8本章小結86 
第5章HikariCP與JDBC 87 
5.1 HikariCP JDBC Logging 87 
5.2 JDBC 90 
5.2.1 JDBC定義91 
5.2.2 JDBC實戰案例93 
5.2.3 JDBC剖析95 
5.2.4 PreparedStatement和Statement 100 
5.3 JDBC與SPI 101 
5.3.1 SPI簡介101 
5.3.2 SPI實戰案例102 
5.3.3 JDBC的SPI機制104 
5.3.4 SPI高級實戰:基於Dubbo的分佈式日誌鏈路TraceID追踪106 
5.4拓展:線程池技術109 
5.4.1 MySQL線程池簡介110 
5.4.2 MySQL線程池技術內幕111 
5.4.3 MySQL線程池實戰114
5.5本章小結117 
第三篇原理篇
第6章HikariCP性能揭秘120 
6.1華山論劍120 
6.2第三方測評124 
6.2.1環境配置125 
6.2.2獲取關閉連接性能測試125 
6.2.3查詢一條語句性能測試127 
6.2.4 psCache性能對比128 
6.2.5測試結論129 
6.3 HikariCP為什麼這麼快129 
6.3.1精簡字節碼130 
6.3.2 FastList 132 
6.3.3 ConcurrentBag 134 
6.4本章小結147 
第7章HikariCP連接原理148 
7.1獲取連接148 
7.2歸還連接155 
7.3關閉連接158 
7.4生成連接163 
7.5擴展閱讀:DCL為什麼要加volatile 166 
7.6擴展閱讀:Log4j2為何性能優秀169 
7.7本章小結173 
第8章HikariCP參數源碼解析174 
8.1 SpringBoot 2.x HikariCP參數加載原理174
8.2 allowPoolSuspension 181 
8.3 validationTimeout 187 
8.4 leakDetectionThreshold 189 
8.5本章小結202 
第9章HikariCP動態代理與字節碼技術203 
9.1 HikariCP字節碼工程203 
9.1.1 HikariCP的字節碼技術204 
9.1.2代理技術原理209 
9.1 .3 HikariCP JIT方法內聯優化213 
9.2 JMH基準測試216 
9.2.1 JMH常用註解216 
9.2.2 JMH實戰案例Orika 219 
9.3本章小結223 
第四篇實戰篇
第10章HikariCP監控實戰226 
10.1監控體系層次226 
10.2為什麼需要數據庫連接池監控228 
10.3 HikariCP監控指標231 
10.3.1 hikaricp_pending_threads 233 
10.3.2 hikaricp_connection_acquired_nanos 234 
10.3.3 hikaricp_idle_connections 235
10.3.4 hikaricp_active_connections 235 
10.3.5 hikaricp_connection_usage_millis 235 
10.3.6 hikaricp_connection_timeout_total 235 
10.3.7 hikaricp_connection_creation_millis 236 
10.4 HikariCP監控指標實戰236 
10.4.1連接風暴236 
10.4.2慢SQL 237 
10.4.3監控指標與參數配置237 
10.5 SpringBoot 2.0暴露HikariCP Metrics 238 
10.6 SpringBoot 2.0監控HikariCP JMX 241 
10.7微服務架構下的監控平台選型246 
10.8本章小結250 
第11章從HikariCP Metrics談微服務監控架構實戰252 
11.1 HikariCP Metrics 253 
11.2 Micrometer 258 
11.3 SpringBoot 2. x自定義埋點實戰260 
11.3.1引入依賴260 
11.3.2配置application.properties 261 
11.3.3註冊Metrics 261
11.3.4支付接口埋點統計總次數262 
11.3.5查看指標數據262 
11.4 SpringBoot 2.x集成Micrometer源碼解析266 
11.5 SpringBoot 1.5.x自定義埋點實戰269 
11.5.1引入Micrometer依賴269 
11.5.2創建Bean並註冊Metrics指標270 
11.5.3在Controller中進行支付業務埋點271 
11.6監控架構重點272 
11.6.1 Prometheus 272 
11.6.2 Grafana 275 
11.7本章小結278 
第12章HikariCP擴展技術280 
12.1 Flexy-Pool 280 
12.2 Apache ShardingSphere 284 
12.3自研集成HikariCP和Sharding-JDBC數據庫中間件295 
12.4時鐘回撥300 
12.5本章小結311 
第13章HikariCP常見問題312 
13.1 HikariCP故障分析技巧312 
13.2 leakDetectionThreshold參數解決Spark/Scala連接池洩露318 
13.3詳解JDBC超時320
13.4快速恢復323 
13.5 Oracle Connection Reset問題327 
13.6 HikariCP關閉連接的5種情況329 
13.7如何獲取HikariDataSource的active connection 330 
13.8如何對HikariCP配置文件中的服務器名、用戶名、密碼加密330 
13.9 HikariCP神奇的配置dataSourceProperties 330 
13.10如何獲取HikariCP連接池中的原始連接332 
13.11 HikariCP並不是萬能工具332 
13.12本章小結333 
第14章HikariCP詭案實錄334 
14.1問題描述334 
14.2 Brett經典回答336 
14.3另一個類似的案例337 
14.4分析問題338 
14.5解決問題344 
14.6本章小結344