沃達豐希臘公司用Quarkus代替Spring Boot - quarkus
沃達豐希臘公司是希臘第二大電信公司,為超過600萬訂戶提供固定和無線電話服務。
沃達豐希臘分公司在本地和雲上執行許多應用程式,因此雲資源消耗成本對其極為重要。其體系結構的一個組成部分是數字體驗層(DXL),這是一種基於Kubernetes的軟體,它透過提供易於使用的REST充當沃達豐核心系統(基於SOAP的通訊)和客戶端(Web /移動)之間的中介軟體,是一個基於TMF規範的API(https://www.tmforum.org/),其目標是在未來數年內成為沃達豐數字服務的骨幹。其元件利用MongoDB,Kafka Streams和Redis等技術將舊服務的響應速度提高了800%以上,同時將其轉換為REST友好的通用API。DXL是使用Spring Boot實施的,並且完全在雲上執行,並且他們一直在消耗大量記憶體資源並且啟動時間很長,因此他們開始尋找減少這些資源的方法。
沃達豐希臘公司關心的另一個關鍵領域是應用程式啟動時間長,儘管沃達豐希臘公司可以為DXL分配更多的雲資源以縮短啟動時間,但這將意味著更高的雲成本。因此,他們著手尋找最佳化DXL的方法,以使其消耗更少的雲資源。
除了DXL之外,Vodafone Greece還使用Spring Boot執行很大一部分微服務。目前,他們在開發和生產中執行的微服務中有80%基於Spring Boot,但它們中還包含4個Node.js微服務。
他們為何選擇Quarkus
他們選擇Quarkus 替代Spring Boot的主要標準是開發人員效率,更低的雲資源消耗和更短的應用程式啟動時間。他們認為後者對雲資源消耗成本以及使用者體驗的改善具有重大影響。
他們研究並評估了其他技術和框架,例如其他本機可編譯框架Node.js和Vert.x。他們認為Node.js對他們來說不是一個好選擇,因為這會給Java開發人員帶來負擔,使他們無法學習Java應用程式並將其遷移到Javascript。某些框架也沒有被削減,原因是它們渴望有強大的支持者和贊助者。未選擇另一個本機可編譯框架,因為它無法編譯MongoDB驅動程式-當時不支援在本機模式下使用MongoDB驅動程式,並且無法跳過未編譯為本機的MongoDB驅動程式部分。
他們幾乎選擇了Vert.x,因為它具有出色的上下文傳播功能和出色的效能。然而,當他們在2019年4月瞭解Quarkus並且在其堆疊中包含Vert.x並提供記憶體和啟動時間最佳化時,他們決定使用Quarkus。
根據Quarkus Vodafone Greece DXL技術負責人Christos Sotiriou的說法“似乎可以提供我們所需的效能提升,同時擁有良好的支持者(Red Hat)並依靠經過考驗的技術。” 在2019年6月,Vodafone Greece首次成功實現了微服務部署,該部署依賴於他們在Quarkus中有限的重寫公共庫集。
選擇Quarkus而非其他競爭技術的另一個原因是開發人員能夠編寫自己的擴充套件。此外,專案的高活動性,例如社群成員,專案明星,Quarkus開發人員對社群問題的答覆和修復的快速週轉以及透過專案溝通渠道徹底回答技術問題的紅帽開發人員的數量是積極的指標讓他們選擇Quarkus。最後,他們對Red Hat的信任以及在軟體市場中的信譽為其提供了保證,他們選擇了贊助商為Red Hat的Quarkus來做出正確的選擇。
解決方案
一旦他們決定前進的道路,沃達豐希臘公司便開始將其常見的內部庫從Spring Boot遷移到Quarkus。它們的公共庫涵蓋了跨領域的關注點,例如:
- 記錄中
- 安全
- 資料庫連線
- Kafka連線
- 分散式日誌
根據Christos的說法,“使用Spring Boot很難實現分散式日誌記錄,而對於Quarkus,建立這個新的公共庫是可行和可行的。與Spring Boot相比,至少在我們的用例中,在Quarkus中設定標頭傳播並對微服務的入站-出站請求執行操作的方法至少在我們的用例中允許更好的可重用性,並允許我們為我們的跨國公司進行更簡單的設定團隊”。
截止到今天,他們已經擁有大約15個Quarkus微服務,其中有5個於2019年9月底投入生產。就工作量而言,有2個開發人員致力於處理這前5個微服務,這些服務現在已經以JVM模式執行。目前,他們的團隊正在努力在未來3個月內提供20種微服務。值得一提的是,根據克里斯托斯的說法,根據他們的經驗,他們的Spring開發人員很容易選擇Quarkus Java堆疊,因為“從Spring Boot遷移到基於CDI的框架不需要很多工作”。
儘管Quarkus具有Spring API相容性,但Vodafone Greece沒有計劃使用它,因為Christos認為“在微服務中混合兩種程式設計模型沒有意義”。為了保持程式碼的清潔,Vodafone Greece正在“僅使用Quarkus構造,而不會使用Spring語法弄混水”,這是Christos所指定的。對於他們的需求,Quarkus堆疊已經提供了他們所需的一切,因此根本不需要任何Spring Boot。
好處
沃達豐希臘公司已經發現使用Quarkus有很多好處。其中之一是,在JVM模式下,記憶體資源消耗減少了一半。此外,無需任何最佳化,啟動時間已減少到將近四分之一。值得一提的是,其中許多微服務都很複雜,因為它們“具有大量的Kafka和資料庫連線”,如Christos所述。
他們的使用Kafka的日誌記錄系統使用大量記憶體,因為它處理大訊息並將其轉換為JSON。例如,某些微服務在使用Spring Boot時需要1 GB RAM。相比之下,對於生產而言,他們現在可以部署具有512 MB RAM的Quarkus微服務。“對於80種微服務而言,這是一筆可觀的節省!” Christos強調並補充說:“在預設情況下(在JVM模式下),Quarkus提供的內容(不嘗試對其進行最佳化)比Spring在最佳化後提供的內容(在JVM模式下)提高了50%-60%照顧依賴關係,使用JVM選項,等等)”。
關於啟動時間,其中很大一部分時間用於等待訊息代理和資料庫接受連線,這使Spring Boot微服務在大約50秒內啟動。但是使用Quarkus微服務,可以在不到四分之一的時間(14秒)內啟動。
他們獲得的巨大的開發人員效率收益是出乎意料的,也是令人驚喜的:
首先,他們意識到從Spring Boot遷移到基於CDI的框架不需要他們的Spring開發人員花費很多精力,因此學習曲線很小。
其次,使用Quarkus實時編碼功能(又稱開發模式)導致開發人員生產率的提高,克里斯托斯稱這是“一件非常好的事情”。例如,每個開發週期包括1到2個衝刺(1個衝刺= 2周的週期),具體取決於所開發邏輯的複雜性,並且使用Quarkus,他們看到“開發人員的生產率比以前提高了30%到40%”根據Christos的說法,“這是Spring Boot,這是針對前Spring Boot開發人員的。”
另一個令Quarkus印象深刻的功能是Quarkus使用企業Java的方式的有效性,例如,將CDI與上下文傳播結合使用的簡潔方法用於非同步方法。微服務呼叫其他微服務然後聚合其他微服務返回的資訊並不少見,並且透過MicroProfile Context Propagation和MicroProfile Reactive Messaging擴充套件毫不費力地與Quarkus一起工作。事實上,“ MicroProfile是為什麼我們喜歡Quarkus作為開發工具的一個很好的理由” Christos說。
下一步是什麼
就下一步而言,希臘沃達豐微服務的數量現在只涵蓋了他們打算做的一小部分。他們希望將目前的數量增加一倍,換句話說,將微服務的數量和致力於該計劃的開發人員的數量增加一倍。為此,他們計劃在接下來的三個月中釋出20個Quarkus微服務。根據Christos所說,隨著他們的成長,“編排和開發人員的生產力對於他們所消耗的資源將變得更加重要”。
當前,當它們與MongoDB進行介面時,它們以JVM模式執行Quarkus,但他們正在考慮將來與MongoDB一起使用本機編譯。沃達豐(Vodafone Greece)幾個月前開始使用Quarkus時,它並未包括MongoDB的擴充套件,但是Quarkus確實包括MongoDB客戶端擴充套件,因為它們可以利用。此外,他們計劃使用更多的Quarkus擴充套件,例如MicroProfile Fault Tolerance的斷路器,並更廣泛地採用MicroProfile反應訊息規範。
此外,儘管有了Quarkus,他們已經以一半以上的速度在JVM模式下執行以減少記憶體消耗和啟動時間,但他們仍計劃將來在純模式下執行Quarkus微服務,以更好地消耗記憶體並啟動時間。
相關文章
- TomEE、Spring Boot與Quarkus比較 - BaptistaSpring BootAPT
- Quarkus vs. SpringBoot - RedditSpring Boot
- windows下體驗quarkus原生編譯打包Windows編譯
- 用Quarkus實現乾淨清晰的Clean架構 - Sourced Blog架構
- 雲原生時代高效能Java框架—Quarkus(一)Java框架
- 雲原生時代高效能Java框架—Quarkus(二)Java框架
- quarkus依賴注入之八:裝飾器(Decorator)依賴注入
- Quarkus和MongoDB微服務簡單案例原始碼MongoDB微服務原始碼
- 沃達豐為中小企業提供智慧路由和光纖路由
- Quarkus入門:構建PetClinic REST API - Rafał BorowiecRESTAPI
- Quarkus後端開發優勢:安全和JSON支援後端JSON
- 傳蘋果沃達豐歐洲推出iPhone交易已到最後階段蘋果iPhone
- 帶有Quarkus的Neo4J OGM(影片)-Sebastian DaschnerAST
- Quarkus中基於角色的許可權訪問控制教程
- 帶有Quarkus的Neo4J OGM(視訊)-Sebastian DaschnerAST
- Quarkus簡介:下一代Kubernetes原生Java框架Java框架
- flight-tracker-demo:一個Quarkus + Kafka演示原始碼專案Kafka原始碼
- 將SpringBoot PetClinic REST遷移到Quarkus的開源專案Spring BootREST
- Python和JavaScript是雲原生微服務的最佳語言?Quarkus來了! – Javier RamosPythonJavaScript微服務
- Spring Boot (十九):使用 Spring Boot Actuator 監控應用Spring Boot
- Spring Boot 之路(一):一個簡單的Spring Boot應用Spring Boot
- spring-boot-route(十八)spring-boot-adtuator監控應用Springboot
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- 玩轉spring boot——MVC應用Spring BootMVC
- Istio 可以代替 Spring Cloud 嗎?SpringCloud
- Spring Boot (十三): Spring Boot 小技巧Spring Boot
- 使用 Spring Boot 快速構建 Spring 框架應用Spring Boot框架
- 用Spring Boot顛覆Java應用開發Spring BootJava
- Spring boot應用如何支援httpsSpring BootHTTP
- Spring Boot應用程式有哪些功能?Spring Boot
- 如何預熱Spring Boot應用? - sebsteinSpring Boot
- 用gradle搭建spring boot專案GradleSpring Boot
- Spring Boot應用監控實戰Spring Boot
- Spring Boot 應用程式中的 QueryDSLSpring Boot
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- Spring Boot 2.0(八):Spring Boot 整合 MemcachedSpring Boot
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot學習6:Spring Boot JDBCSpring BootJDBC