Vert.x
近年來,行動網路、社交網路和電商的興起,使各大服務提供商的客戶端請求數量激增,傳統伺服器架構已不堪重負,致使基於事件和非同步的解決方案備受追捧,如Nginx、NodeJS。Vert.x框架基於事件和非同步,依託於全非同步Java伺服器Netty,並擴充套件了很多其他特性,以其輕量、高效能、支援多語言開發而備受開發者青睞。
事件模型
Vert.x是事件驅動的,其處理請求的高效能也是基於其事件機制。Vert.x的事件機制中有幾個非常重要的概念:Event Loop、Event Loop Vertical、Worker Vertical、Event Bus、Vert.x Module。 Event Loop:即事件迴圈,是由Vert.x啟動的事件處理執行緒,也是Vert.x專案對外開放的入口,Vert.x由此接收請求事件。一個Vert.x有一個或多個事件迴圈執行緒組成,執行緒最大數量為主機有效的CPU核數。事件模型流程
Vert.x以非阻塞IO的思想來實現高效能,非阻塞IO的實現,基於Event Loop Vertical和Worker Vertical的分離,在Vert.x中,Event Loop用於接收,並將短業務操作交由其內部的Vertical來處理,該模組是非阻塞的,這樣可以保證請求的處理效率;阻塞任務通過Vert.x的事件機制脫離當前執行緒,轉移到Worker Vertical中執行,並執行結果返回給Event Loop Vertical。 這一過程完成的核心是Event Bus,Event Bus中註冊了所有的事件,通過事件匹配完成事件轉移和結果返回,從而將整個流程銜接起來。資料傳遞
事件驅動的處理過程,資料傳遞是非常重要的,Vert.x支援任意物件的資料格式。但使用物件時經常會遇到序列化和載入類的問題,比如在使用Java物件的時候,這種情況下使用JSON會更方便,這也是Vert.x推薦採用的方式。特點
Vert.x的事件模型,有如下幾個特點: 1.非阻塞處理請求,非同步執行阻塞程式,保證了請求處理的高效性。 2.使用Event Bus事件匯流排來進行通訊,可以輕鬆編寫出分散式、鬆耦合、高擴充套件性的程式。 3.使用Event Bus事件匯流排是Vert.x真正實現了多語言支援的基礎,已支援Java、JavaScript、Ruby、Python、Groovy、Clojure、Ceylon。VertX這項技術其實有年頭了。因為國內基本都是Spring生態。以至於大部分人,沒有Spring Boot就不會開發了。這裡不是說Spring Boot有什麼問題,只是覺得不應該被Spring禁錮我們程式設計師得思維。
下面帶大家來了解VertX。進入之前,請忘記Spring。忘記了Spring你就學會了VertX
Eclipse Vert.x是eclipse旗下的一個開源專案。Eclipse Vert.x是基於事件驅動和非阻塞的(基於netty之上,netty是一個天然的純非同步容器),換句話說這框架適合高併發的處理。
Vert.x非常靈活 ,無論是簡單的網路實用程式,複雜的現代Web應用程式,HTTP / REST微服務,大容量事件處理還是完整的後端訊息匯流排應用程式,Vert.x都非常適合。比如遊戲後端開發、銀行業務開發等等。
Vert.X 中沒有MVC、IOC、AOP、ORM這些概念,而是用自己的一套解決方案處理。
概念
1、verticle是vert.x中可被部署執行的最小程式碼塊,可以理解為一個verticle就是一個最小化的業務處理引擎。 一個應用程式可以是單個verticle或者由EventBus通訊的多個verticles構成。
2、verticle被髮布部署後,會呼叫其內部的start方法,開始業務邏輯處理,完成後會呼叫stop方法,對該程式碼塊執行銷燬動作。
3、Verticles在Vert.x例項中執行。 一個Vertx可以承載多個verticles,每個Vert.x例項在其私有的JVM例項執行。 一臺伺服器可以執行一個或多個Vert.x例項(建議執行Vertx例項的數量和CPU核數相關)。
4、一個Vert.x例項,保證其承載的verticles例項總是在同一個執行緒執行, 併發Vert.x 是單執行緒的。
簡單來說,Vert.X是一個非同步響應式框架。是基於Netty實現的。
官網地址:https://vertx.io/
官網中文地址:http://vertxchina.github.io/vertx-translation-chinese/