如何使用Java框架Pronghorn迅速編寫應用程序
譯文【51CTO.com快譯】作為Akka和RxJava的替代者,Pronghorn為開發安全無垃圾的應用程序提供了一種可靈活擴展的開源方法。
1973年,Carl Hewitt受到了量子力學的啟發。他想開發能夠并行執行任務的計算機,這些計算機在含有各自本地內存和處理器的同時可彼此順利地通信。
actor模型由此而生,隨之誕生了一個很簡單的概念:一切都是actor。這有幾大好處:隔離業務和其他邏輯容易多了。由于你應用程序的每個核心組件都是隔離且獨立的,因此很容易獲得安全。又由于actor的性質及其相互關系,加快了構建原型的速度。
然而,將它們聯系在一起的是能夠同時在這些actor之間傳遞消息。actor基于輸入消息做出響應;然后,它可以發回確認,傳遞內容,并指定下次收到消息時采用的行為。比如說,一個actor從磁盤加載圖像文件,同時將數據塊傳送給其他actor作進一步處理,即圖像分析或轉換。隨后另一個actor將這些作為輸入,將它們寫回到磁盤或將它們記錄到終端。這些actor單獨無法完成強大的功能,但是一起構成了應用程序。
Pronghorn是什么?
今天有許多系統實現了這種actor模型。在Object Computing,我們一直在開發一種高度可擴展、高性能、完全開源的Java框架:Pronghorn(https://oci-pronghorn.gitbook.io/pronghorn/chapter-0-what-is-pronghorn/home),它以世界上跑得最快的陸地動物之一:叉角羚命名。
Pronghorn最近推出了版本1.0,試圖克服面向Java和Scala的兩種流行的actor框架:Akka和RxJava存在的幾個缺點。
因此,我們在開發Pronghorn時注重全面的功能特性:
1. 我們想要產生盡可能少的垃圾。不用垃圾收集器經常啟動,它就能達到前所未有的性能水平。
2. 我們想要確保Pronghorn占用盡可能少的內存。由于設計當初注重性能,它充分利用CPU預取功能和高速緩存,以獲得最高的吞吐量。它使用零拷貝直接訪問,只需數毫微秒即可從模式(schema)加載字段,根本不會讓核心停滯,同時又是非阻塞、無鎖的。
3. Pronghorn確保你安全地編寫正確的代碼。借助其API和合約,并使用“軟件堡壘”和行業領先的加密技術,Pronghorn讓你可以構建安全的、穩妥失效的應用程序。
4. 調試和測試可能壓力大、很煩人,需要趕時間時更是如此。Pronghorn可以與常用測試框架輕松集成,通過其自動生成、實時更新的遙測圖形,基于現有消息模式的模糊測試(在開發中)以及某些actor行為異常或耗用太多資源時發出警告,簡化重構和調試。這可幫助你迅速創建原型,將更多的時間用于關注業務需求上。
想了解更多詳細信息,請訪問Pronghorn功能列表(https://oci-pronghorn.gitbook.io/pronghorn/chapter-0-what-is-pronghorn/features)。
為什么是Pronghorn?
編寫并發高性能的應用程序絕非易事,我們也沒有承諾完全解決這些問題。然而,為了讓你了解Pronghorn的好處以及API的強大功能,我們編寫了一個小型的HTTP REST服務器,對照Node & Express、Tomcat 以及Spring Boot等常見行業標準對它進行了基準測試:
我們鼓勵你自己運行這些數字(https://github.com/oci-pronghorn/GreenLoader),分享結果,并添加自己的Web服務器。
如你所見,Pronghorn在這個REST例子中的表現非常好。Pronghorn幾乎比傳統解決方案快10倍,可以借助無垃圾、靜態類型的后端,將服務器成本(比如EC2或Azure)至少降低一半。它可以解析HTTP請求,actor并行工作時生成響應。調度和線程由Pronghorn功能強大的默認調度程序來自動處理。
如上所述,Pronghorn讓你可以迅速構建原型,并構思項目,通常遵循這三個基本步驟:
1. 定義數據流圖
這是至關重要的第一步。Pronghorn采用數據優先的方法,迅速處理大量數據。在你的應用程序中,考慮流經“管道”的數據類型――比如說,如果你在構建一個圖像分析工具,需要actor讀取、寫入和分析圖像文件。actor之間的數據格式也需要確立;它可能是含有JPG MCU的模式或原始二進制BMP文件。選擇最適合你所開發的應用程序的格式。
2. 定義每個階段之間的合約
合約讓你得以使用FAST輕松定義消息,FAST是金融行業用于股票交易的一種成熟的協議。這些合約用于測試階段,以確保實現與消息字段定義一致。這是一種契約方法;它必須得到遵守,那樣actor才能彼此通信。
3. 實施數據流圖時,使用生成測試,測試最初開發的組件
模式是你在開發應用程序時為你生成的代碼。測試驅動開發便于開發正確且安全的代碼,為你在準備發布時節省寶貴的時間。隨著程序越來越大,數據流圖也不斷變大,描述actor之間的每一次交互,并說明各階段之間管道上的消息數據流。借助自動遙測,你可以輕松跟蹤最復雜的應用程序,如下所示:
它是什么樣子?
你可能很想知道Pronghorn代碼是什么樣子。下面是我們的“Hello World”( https://oci-pronghorn.gitbook.io/pronghorn/chapter-1-getting-started-with-pronghorn/1.-hello-world-introduction/0.-getting-started)例子中生成消息模式的一段示例代碼。
要定義消息,創建類似這個文件的新XML文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <templates xmlns="http://www.fixprotocol.org/ns/fast/td/1.1">
- <template name="HelloWorldMessage" id="1">
- <string name="GreetingName" id="100" charset="unicode"/>
- </template>
- </templates>
然后,這個模式被Hello World例子中描述的階段所使用。使用該模式將數據流圖植入到你的應用程序中來得更容易:
- private static void populateGraph(GraphManager gm) {
- Pipe<HelloWorldSchema> messagePipe =
- HelloWorldSchema.instance.newPipe(10, 10_000);
- new GreeterStage(gm, "Jon Snow", messagePipe);
- new GuestStage(gm, messagePipe);
- }
這使用了Hello World教程(https://oci-pronghorn.gitbook.io/pronghorn/chapter-1-getting-started-with-pronghorn/1.-hello-world-introduction/0.-getting-started)中創建的階段。
我們使用一個Maven(https://maven.apache.org/)原型為你提供了開始構建Pronghorn應用程序所需要的一切。
開始使用Pronghorn
本文已大致介紹了Pronghorn如何幫助你使用Akka和RXJava的替代者:Pronghorn,用Java編寫高性能、高效、安全的應用程序。我們想聽聽你如何讓這個成為開發人員、經理、首席財務官及其他人士的一個理想平臺。
原文標題:Write fast apps with Pronghorn, a Java framework,作者:Tobi Schweiger
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

























