Vert.x 4將於年底發佈!它曾讓VMware和Red Hat掐架

Vert.x是一個基於JVM、輕量級、高性能的應用平臺。今年10月,Vert.x 開源項目的核心貢獻者Paulo Lopes將來到QCon全球軟件開發大會(上海站)2019,他透露,Vert.x 4將於2019年底發佈。爲讓大家對Vert.x 有一個更加清晰的瞭解,我們對他進行了採訪。

如果時間回到六年前,你會看到一場VMware和Red Hat的battle

一位名叫 Tim Fox 的開發人員曾在VMware的SpringSource部門工作。在此期間,他領導開發了Vert.x 項目。2012年,Tim跳槽到了Red Hat並希望能夠繼續從事該項目的開發,卻得到了一封律師函。VMware讓他交出Vert.x商標、域名、博客、GitHub帳戶及Google Group的控制權。此後 VMWare 與 RedHat 多次商討以尋找出一個雙方都滿意的解決方案,但都無疾而終。僵持許久之後,VMware最終同意將項目和相關IP轉移到Eclipse基金會。2016年1月12日,Tim Fox辭去了Vert.x項目負責人一職,目前該職務由長期貢獻者Julien Viet擔任。

Eclipse Vert.x是一個用於在JVM上構建響應式應用程序的工具包。根據官方描述,Eclipse Vert.x是事件驅動和非阻塞的。這意味着您的應用程序可以使用少量內核線程處理大量併發。Vert.x可讓您的應用程序以最少的硬件進行擴展。它有一個模塊化、高性能、易於使用的響應式生態系統。正因爲生態系統的多樣性,我們可以編寫像實時Web應用、IoT、協議適配器和分佈式應用等不同種類的程序,當然也可以構建微服務。

它的高性能、低延遲特性吸引了不少開發者,目前,該項目在GitHub上已經獲得了超過10k的star。


項目地址:https://github.com/eclipse-vertx/vert.x/

去年10月,Vert.x項目負責人、Red Hat 首席軟件工程師Julien Viet在QCon全球軟件開發大會(上海站)2018從HTTP性能基準測試出發與我們探討了Vert.x高性能的祕密。今年10月,Vert.x 開源項目的核心貢獻者Paulo Lopes也將來到QCon,他透露,Vert.x 4將於2019年底發佈。爲讓大家對Vert.x 有一個更加清晰的瞭解,我們採訪了Paulo 。

Vert.x是什麼?

InfoQ:請爲我們介紹一下Vert.x。

Paulo:Vert.x是一個運行在JVM中的事件驅動的、異步非阻塞、支持多種編程語言的應用開發工具。你可以把它當做一組積木,允許你開發在所需的工作負載下保持低延遲特性的高性能應用。Vert.x能讓開發人員自由決定應用程序應該如何工作。由於每個應用程序都是獨一無二的,我們並不提倡開發人員應該如何構建他們的應用程序;我們稱之爲“不固執己見”。我們觀察到,Vert.x的用戶主要將它用於嵌入較大的應用程序,這使得它非常通用,比如你可以在Spring應用程序中使用Vert.x。

InfoQ:Vert.x有哪些優點?我們能用它解決什麼問題?

Paulo:編寫非阻塞、併發和可伸縮的代碼是困難的。通過提供基於reactor模式的簡單編程模型,Vert.x 提供了構建此類應用程序的最簡單方法,這將允許應用程序高效地使用所有硬件資源。使用內置的集羣和事件驅動體系結構,可以讓開發人員專注於領域問題,而不是技術細節,擴展變得輕而易舉。

InfoQ:Verticle、event-loop、EventBus 分別是什麼?

Paulo:Verticle是由 Vert.x 部署和運行的代碼塊。一個Vert.x實例維護幾個事件循環線程(通常是可用CPU內核數的2倍)。Verticle 可以用Vert.x支持的任何語言編寫,單個應用程序可以包括用多種語言編寫的verticle。你可以把Verticle當做Actor模型中的Actor。

Vert.x 的 API 是事件驅動的。在大多數案例中,Vert.x使用一個叫做event loop的線程來調用你的處理程序。由於在Vert.x 或應用程序塊中沒有任何內容,event loop可以在事件到達時連續地將事件傳遞給不同的處理程序。

EventBus是Vert.x的神經系統。它允許應用程序的不同部分相互通信,而不管它們是用什麼語言編寫的,也不管它們是在同一個Vert.x實例中,還是在不同的Vert.x實例中(以集羣形式)。它甚至可以橋接以允許運行在瀏覽器中的客戶端JavaScript在同一EventBus上通信。

InfoQ:Vert.x線程是如何工作的?

Paulo:如上所說,Vert.x的API主要是事件驅動的,可以將事件看作計時器、HTTP請求、文件讀取等等)。如果可以立即提供結果,則會立即返回。如果沒有這個功能,您通常會在稍後提供一個handler來接收事件。

因爲沒有一個Vert.x API會阻塞線程,這意味着您可以使用Vert.x來處理大量的併發,只需使用少量的線程。

使用傳統的阻塞API,調用線程可能會在讀取文件、接收HTTP請求或向數據庫發送數據時阻塞。在上述所有情況下,當你的線程等待結果時,它不能做任何其他事情,在這段時間它就是無用的,這樣一來效率就太低了。

Vert.x很快,真的很快

InfoQ:您認爲誰需要Vert.x?何時使用Vert.x是必要的?

Paulo:每個人都可以在任何地方使用Vert.x。您可以構建一個小型web應用程序、一個複雜的分佈式電子商務解決方案或構建集成,例如,將ActiveMQ橋接到Kafka,而無需HTTP橋接。用戶最初對Vert.x的關注就在於它的優秀性能。想象一下,假如你是電子商務行業的,時間就是金錢,我們的每一秒都十分珍貴,Vert.X將幫助企業更快地向客戶提供產品,更快地完成交易。這不需要額外的硬件成本,多麼合算!

InfoQ:我們常用Vert.x來處理低延遲的問題,那麼,Vert.x能有多快?它是怎麼實現的?能否舉個例子?

Paulo:是的,Vert.x 速度非常快。然而,要給出具體的數字總是很困難的,因爲這些數字應該根據具體情況進行評估。不過我可以給你舉個最簡單的例子,比如我們建立了一個應用,它要在REST API 端點上返回"Hello World",TechEmpower(一個獨立的基準測試)表明,在相同的條件下,Vert.x應用可以提供超過450萬個請求/秒的模式,而優化後的Servlet在Tomcat上卻只能提供大約90萬個請求/秒的服務。

這種糟糕的性能差異確實可能存在。因爲Vert.x有效地使用了所有可用的計算資源。使用reactor模式,應用程序不受處理請求的線程數(就像在典型的Servlet容器上發生的那樣)的限制。Event loop使用所有請求的全部CPU容量(因爲沒有阻塞I/O),而不是等待I/O處理完畢單個請求的線程。這個小小的差別就是造成這種結果的原因。

InfoQ:爲什麼說 Vert.x 是創建輕量級,高性能微服務的理想選擇?

Paulo:簡而言之,微服務是分佈在網絡上的大量小型應用程序節點。這些節點通過網絡進行通信,這意味着任何兩個節點都有應用程序外部的I/O性能開銷。延遲是微服務中的一個關鍵問題,因爲服務之間的每一跳都會增加請求/響應時間。選擇Vert.x將允許微服務高效地使用CPU和網絡,從而減少整個應用程序的延遲。

Vert.x的未來

InfoQ:Vert.x 4.0版本是否很快就能與我們見面?其路線圖中提到,“Vert.x 4.0將使Vert.x 3的一些重要方面現代化,你甚至可以預期它會發生重大變化”,能否透露一下它將有哪些重大變化?

Paulo:Vert.x 4.0會在今年年底與大家見面。事實上,我們已經發布了一些里程碑式的更新,而且我們還將繼續。Vert.x 4.0專注於提供社區期望的兩個重要功能:它提供了一個面向未來的編程模型,它還集成了Java內置的CompletionStage,當然,這不會妨礙我們現在流行的與RxJava的集成。我們還將通過與Zipkin或OpenTracing等工具集成來支持分佈式跟蹤。

其實,Vert.x 4是Vert.x 3.x系列的演進版本, 它帶來了上面提到的兩個特性。因爲任何新的主要版本都會破壞一些API,對此我們有明確的政策,下面我會解釋一下。

首先,它不是破壞性改變的露天酒會,任何重大變化都必須有一個很好的理由。然後,任何破壞性改變在Vert.x 3.x系列中都會有相應解決辦法的替代方案。

例如,在Vert.x 4版本里,我們把Vert.x Web 中的 HTTP cookie API 移到了Vert.x Core裏面,爲了實現這一點,我們爲Vert.x 3.8的Vert.x Core提供了新的cookie API ,並棄用了Vert.x Web cookie API,因此應用程序可以爲升級到Vert.x 4做準備了。

總的來說,Vert.x 3.x現在正在加速遷移到Vert.x 4。

最後但同樣重要的是,目前在MEAP中的Vert.x行動手冊自然涵蓋了Vert.x 3。我們的基準是,本書中的所有示例也將適用於Vert.x 4。書中所有的例子都是Java代碼,我們用Vert.x 3.x和Vert.x 4的里程碑編譯來檢查這個代碼。

InfoQ:爲推動Vert.x跨過早期採用者階段,你們會做點什麼嗎?

Paulo:Vert.x已經成熟,並被證明是構建高性能和可伸縮應用程序的可靠框架。對於新用戶來說,學習成本可能很高,因爲它需要一種不同於我們過去幾年在Java世界中看到的思維方式。反應式編程在過去是一個複雜的主題,但今天,它已經被諸如Reactive Extension之類的庫廣泛使用。隨着越來越多的開發人員開始瞭解這個編程模型,將它應用到後端服務器代碼並採用Vert.x就越容易了。正如我們所討論的,它的優點是巨大的,所以我建議所有的讀者嘗試一下。

目前,VMware、Red Hat、Hulu、增信通、易快報、力譜宿雲、煉石網絡等公司都在使用它,具體可見官網。

InfoQ: 最後一個問題,Vert. X與Red Hat互相提供了什麼?

Paulo:Vert.x是 Eclipse Foundation的一個項目,因此,它是獨立的。這個項目由很多來自不同公司的貢獻者開發,有些是 Eclipse Foundation的成員。

Red Hat贊助了Vert.x項目,僱傭了一些貢獻者,讓他們能做喜歡的事情並以此謀生。當然,作爲RHOAR 產品的一部分,Red Hat爲Vert.x提供支持。Red Hat對Vert.x十分感興趣,因爲它構建了許多行之有效的解決方案,比如Strimzi項目(一個致力於將Apache Kafka 運行在Kubernetes 上的項目),另外,Quarkus項目(一個爲 GraalVM 和 OpenJDK HotSpot 量身定製的 Kubernetes 原生 Java 框架)最近也在使用Vert.x構建HTTP客戶端和服務器。

採訪嘉賓:Paulo Lopes 是 Vert.x 開源項目的核心貢獻者,目前就職於 Red Hat,任首席軟件工程師。他擁有超過 10 年的軟件開發經驗,在編寫、重寫、寫到想撞牆等方面的經驗十分豐富。爲讓 Vert.x 成爲一個更棒的框架,他一直在編寫和重新編寫高性能 Web 應用程序的道路上奮鬥着。

在QCon上海2019的演講中,Paulo 將介紹 Vert.x 在 ES4X(基於GraalVM 和 Vert.x 的開發的 JavaScript Runtime)中的應用,它爲 JavaScript 應用程序帶來了令人難以置信的性能提升。想要破解延遲難題,點此瞭解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章