摘要:三連接池實現原理連接池原理,可以具體看下阿里巴巴包的源碼連接池實現原理也不難,即德魯伊連接池,可以核心設計接口服務啟動,會創建一批指定數量的連接放入數組這樣每次請求,不會新建一個連接。
摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關注和轉載,保留摘要,謝謝!
目錄
連接
連接池產生原因
連接池實現原理
小結
TEMPERANCE:Eat not to dullness;drink not to elevation.一、連接
節制:食不過飽,飲不過量。
什么是連接?
連接,代表上游對下游的通信或會話。比如客戶端連接服務器、服務器連接數據存儲等
連接其通信的基本步驟,很類似 HTTP 操作:
上游對下游建立一個連接(客戶端與服務器需要建立連接。比如點擊某個超級鏈接)
上游通過連接,發送請求(建立連接后,客戶端發送請求給服務器)
上游通過連接,收到響應(服務器接到請求后,響應其響應信息)
上游關閉連接,釋放連接資源(客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機與服務器斷開連接)
再深入點,HTTP 持久連接是什么?HTTP 持久連接是指用同一個 HTTP 底層的 TCP 連接來發送/接收多個 HTTP 請求/響應。擴展點,只需要在頭部設置:
Connection: Keep-Alive
為什么要有持久連接?每次都是從建立連接開始也可以達到結果,并且最后是關閉連接釋放資源。這就是引出連接池產生原因。
二、連接池產生原因先看一下常見的 mysql-connector-java 包驅動下面 ConnectionImpl 源碼:
trackConnection() execSQL() commit() close()
對 MySQL 多半是進行連接(connection),增刪改查并提交(execSQL、commit),關閉連接(close)操作,然后實現業務相關邏輯。其操作也很清晰:
建立連接
發送請求(數據的 CRUD 操作)
關閉連接
但,為啥會需要有連接池?
其實在業務量流量不大,并發量也不大的情況下,連接臨時建立完全可以。
但并發量起來,達到百級、千級,其中建立連接、關閉連接的操作會造成性能瓶頸,所以得考慮連接池來優化上述 1 和 3 操作:
取出連接(業務服務啟動時,初始化若干個連接,放在連接存儲中)
發送請求(當有請求,從連接存儲中中取出)
放回連接(執行完畢,連接放回連接存儲中)
這里對連接存儲的數據結構,并維護連接,就是連接池。
三、連接池實現原理連接池原理,可以具體看下阿里巴巴 Druid 包的 DruidDataSource 源碼:
DruidConnectionHolder[] connections; createConnection() getConnection() recycle()
連接池實現原理也不難,DruidDataSource 即德魯伊連接池,可以核心設計接口:
createConnection:服務啟動 init ,會創建一批指定數量的連接放入 connections 數組
getConnection:這樣每次請求,不會新建一個連接。而是從 DruidConnectionHolder[] connections 數組中取出一個連接
recycle:每次請求結束后,不是關閉連接,而是回收連接到 connections 數組
其中有個重入鎖 ReetrantLock,具體作用如下:
獲取一個連接,鎖住
返回該連接,使用連接
使用完畢,回收連接,并釋放鎖
四、小結核心連接池也就這么點東西,具體還需要考慮其他點如下:
連接池連接設計遵守 LRU 策略,性能的關鍵點是連接是否 LRU 方式重用。LRU 資料:https://yq.aliyun.com/article...
通過 Hash 去連接,實現串行化
可以自動擴容連接數
連接數過多,可以自動關閉連接,釋放資源
等等
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73966.html
摘要:開頭正式開啟我入職的里程,現在已是工作了一個星期了,這個星期算是我入職的過渡期,算是知道了學校生活和工作的差距了,總之,盡快習慣這種生活吧。當時是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...
摘要:并發處理書摘第一,線程必須通過線程池來提供,不允許顯式創建線程。具體行鎖,表鎖大家可以自行百度了解。因為它是定義的標準統計行數的預發。二者得保留事故服務器現場。最后感謝小冊子阿里巴巴開發手冊,感覺不錯。 摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關注和轉載,保留摘要,謝謝! showImg(https://segment...
摘要:它就是史上最簡單的教程第三篇服務消費者后端掘金上一篇文章,講述了通過去消費服務,這篇文章主要講述通過去消費服務。概覽和架構設計掘金技術征文后端掘金是基于的一整套實現微服務的框架。 Spring Boot 配置文件 – 在坑中實踐 - 后端 - 掘金作者:泥瓦匠鏈接:Spring Boot 配置文件 – 在坑中實踐版權歸作者所有,轉載請注明出處本文提綱一、自動配置二、自定義屬性三、ran...
摘要:從使用到原理學習線程池關于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實現在軟件開發中,分散于應用中多出的功能被稱為橫切關注點如事務安全緩存等。 Java 程序媛手把手教你設計模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經風雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當初愛情萌芽的模樣…… Java 進階面試問題列表 -...
閱讀 2954·2021-11-17 09:33
閱讀 3118·2021-11-16 11:52
閱讀 482·2021-09-26 09:55
閱讀 2975·2019-08-30 15:52
閱讀 1313·2019-08-30 15:44
閱讀 1257·2019-08-30 13:59
閱讀 796·2019-08-30 13:08
閱讀 1157·2019-08-30 10:50