联通光纤限制连接数_从数百万个光纤(而不是数千个线程)中查询数据库
聯通光纖限制連接數
jOOQ是在Java中執行SQL的好方法,而Quasar光纖帶來了大大提高的并發性
我們很高興在平行世界的 Fabio Tudone的jOOQ博客上宣布另一個非常有趣的來賓帖子。
Parallel Universe開發了一個開放源代碼堆棧,使開發人員可以輕松地在JVM上對極端的并發應用程序進行編碼。 使用Parallel Universe堆棧,您可以構建與現代硬件協調工作的軟件,而不必動fight動腦,同時保持您的編程語言和簡單,熟悉的編程風格。
Fabio Tudone開發和維護Quasar集成模塊,這是Comsat項目的一部分。 在加入Parallel Universe團隊之前,他參與了基于云的企業內容治理平臺的開發工作,并領導了幾年的開發工作。在整個職業生涯中,他一直在編寫JVM軟件。 他的興趣包括Dev和DevOps實踐,可伸縮性,并發和功能編程以及運行時平臺。 他自然好奇,喜歡探索,他喜歡從人,地方和文化中收集知識和理解。 他還對意識練習感興趣,喜歡寫各種各樣的東西。
Quasar作為Comsat項目的一部分,具有JDBC和jOOQ的集成,因此讓我們來看看它的內部。
JDBC,jOOQ和Quasar
comsat-jdbc提供了JDBC API的光纖阻塞包裝程序,因此您可以在光纖而不是常規Java線程中使用連接。
為什么要這么做? 因為光纖是輕量級線程,并且與正在運行的JVM中的線程相比 ,您可以擁有更多的光纖。 “更多”意味著我們要說的是數百萬人,而不是數千人。
這意味著在等待JDBC執行時,您的系統中有更多的并行能力來并行執行其他操作,無論是并發/并行計算(例如在高度可靠的類Quasar Erlang類actor系統中 交換actor消息 )阻止I / O(例如, 服務 Web 請求 , 調用微服務 ,通過光纖NIO讀取文件或訪問其他啟用光纖的數據源(如MongoDB ))。
如果您的數據庫能忍受它,而更多的常規線程不會使您的系統崩潰(甚至),您甚至可以增加光纖JDBC池(請參閱附加點:后面的等待線 )并發送更多并發的jOOQ命令。
由于jOOQ使用JDBC連接訪問數據庫,因此在光纖上運行jOOQ就像引入comsat-jooq依賴項并將啟用光纖的JDBC連接傳遞到jOOQ上下文一樣簡單:
import java.sql.Connection; import static org.jooq.impl.DSL.*;// ...Connecton conn = FiberDataSource.wrap(dataSource).getConnection(); DSLContext create = DSL.using(connection);// ...當然,您也可以將ConnectionProvider配置為從FiberDataSource獲取連接。
從這一刻起,您可以使用常規的jOOQ,一切都會在光纖阻塞模式下發生,而不是在線程阻塞下發生。 而已。
不,真的, 絕對沒有其他東西了:您將繼續使用出色的jOOQ,僅使用效率更高的光纖而不是線程。 Quasar是一個好公民,不會強迫您使用新的API(特別是當原始API很好時,這很好)。
由于JVM 目前不支持可用于實現輕量級線程的本機綠色線程或延續 ,因此Quasar通過字節碼檢測實現了延續(以及它們之上的光纖)。 這可以在編譯時完成,但是使用Quasar的代理通常更方便(尤其是在檢測第三方庫時),因此這是一個基于Dropwizard的Gradle示例項目 ,其中還包括Quasar代理設置(不要忘了Capsule ,這是一種非常出色的Java部署工具,可滿足各種需求,這無疑使使用Quasar和代理變得輕而易舉。 該示例未使用所有的jOOQ功能,而是屬于SQL構建用例 (用于查詢和CRUD),但是建議您對其進行更改以適合您的需求。 without-comsat分支包含一個線程阻止版本,因此您可以比較并查看與Comsat版本的(最小)差異。
排隊等候在哪里?
您可能現在想知道:好的,但是JDBC是一個線程阻塞 API,Quasar如何將其轉換為光纖 阻塞 API? 因為JDBC沒有異步模式,所以Quasar在后臺使用線程池,光纖在該線程池中分派JDBC操作,并且在JDBC操作完成后將其解凍并安排恢復(有關更多信息,請參閱Quasar的集成模式)信息)。
是的,這是討厭的等待行 :等待線程池執行的JDBC命令。 盡管您并未將數據庫并行性提高到超過JDBC線程池的大小,但是即使您仍在使用簡單且熟悉的阻塞API,也不會損害光纖。 您仍然可以擁有數百萬條纖維。
是否可以改善總體狀況? 沒有標準的異步Java RDBMS API,我們將無能為力。 但是,如果數據庫是您的瓶頸,那么這可能根本不重要。 關于此主題,有好幾篇不錯的文章和討論 ,該論據等于確定您要將等待線移到哪里。
好處:巧妙的jOOQ集成在幕后
目前,Quasar需要開發人員(或集成商)告訴它要進行檢測的內容,盡管正在進行自動檢測(此功能取決于Java 9之前不會發布的一些較小的JRE更改)。 如果您可以方便地更改源代碼(或已編譯的類),則可以使用@Suspendable注釋方法,或者讓它們throws SuspendExecution @Suspendable便足夠了,但是庫通常不是這種情況。 但是可以在META-INF/suspendables和META-INF/suspendable-supers中分別列出具有要檢測的固定名稱的方法,分別用于可以具有可掛起實現的具體方法和抽象/接口方法。
如果有很多(或涉及代碼生成),則可以編寫SuspendableClassifier隨集成一起提供,并在Quasar的SPI中注冊它以提供其他檢測邏輯(請參見jOOQs )。 SuspendableClassifier的工作是在檢測階段檢查有關運行時類路徑中每個方法的簽名信息,并確定該方法是否可掛起,是否可以掛起,是否可以實現或不確定。 (其他一些分類器稍后可能會說“可懸浮”或“可懸浮-超級”)。
總結一下
好吧……只需享受高效纖維上的出色jOOQ!
翻譯自: https://www.javacodegeeks.com/2015/06/querying-your-database-from-millions-of-fibers-rather-than-thousands-of-threads.html
聯通光纖限制連接數
總結
以上是生活随笔為你收集整理的联通光纤限制连接数_从数百万个光纤(而不是数千个线程)中查询数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美图秀秀下载安装2023(美图秀秀下载安
- 下一篇: 悲观锁 引起死锁_悲观锁定时如何避免可怕