[ 開始使用 |特點|使用案例 |樣品|更改日誌/新增內容/版本 |用戶群組|動機|演示 |性能|比較 |貢獻者 |關於 |新聞 |插件 | 中文介紹]
[ API 概述 |生成並提交任務 |追蹤狀態並檢查回覆 |配置]
由 Akka 的創建者發推文並在 [本週 #Scala | 中精選] OSChina - 2015年百強]
Parallec 是一個基於 Akka 的快速並行非同步 HTTP(S)/SSH/TCP/UDP/Ping 用戶端 Java 函式庫。無論如何,可擴展地聚合和處理 API 回應,並透過編寫 20 行程式碼將其發送到任何地方。超級方便的回應上下文可讓您在處理回應時傳入/傳出任何物件。現在您可以進行可擴展的 API 呼叫,然後輕鬆地將聚合資料傳遞到任意位置到 Elasticsearch、kafka、MongoDB、Graphite、memcached 等。 Parallec 的意思是Paralle l Client (發音為“Para-like”)。請瀏覽 www.parallec.io
觀看示範: 8,000 個Web 伺服器 HTTP 回應在12秒內聚合到記憶體/在16秒內聚合到 ElasticSearch。
聚合錯誤訊息 - 調試友好且具有完全可見性:在並發環境中調試時遇到問題?不再!所有異常、逾時、堆疊追蹤、發送的請求和接收回應的時間都被捕獲並聚合在回應映射中。它可以在 ParallelTask 中用於在非同步執行任務後立即進行輪詢。多層(工作人員/管理人員)逾時可以保證即使有 100,000 個請求也能返回任務。
生產用例:廣泛應用於基礎設施軟體中作為輪詢和聚合引擎
下載最新的 JAR 或從 Maven 取得:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Sonatype 的snapshots
儲存庫中提供了開發版本的快照。
或搖籃:
compile 'io.parallec:parallec-core:0.10.6'
6 行範例
在下面的範例中,只需將prepareHttpGet()改為prepareSsh() 、 prepareTcp() 、 prepareUdp() 、 preparePing()即可進行並行SSH/TCP/Ping。詳細資訊請參考Java Doc和範例程式碼。
import io . parallec . core .*;
import java . util . Map ;
ParallelClient pc = new ParallelClient ();
pc . prepareHttpGet ( "" ). setTargetHostsFromString ( "www.google.com www.ebay.com www.yahoo.com" )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
System . out . println ( res . toString () ); }
});
20行範例
現在您已經了解了基礎知識,請了解使用方便的回應上下文如何輕鬆地傳遞彈性搜尋用戶端以在您喜歡的任何地方聚合資料。您也可以將雜湊映射傳遞給responseContext
,在onCompleted
期間將處理結果儲存到映射中,並在外部使用該映射進行進一步的工作。
...
import org . elasticsearch . client . Client ;
import static org . elasticsearch . node . NodeBuilder .*;
ParallelClient pc = new ParallelClient ();
org . elasticsearch . node . Node node = nodeBuilder (). node (); //elastic client initialize
HashMap < String , Object > responseContext = new HashMap < String , Object >();
responseContext . put ( "Client" , node . client ());
pc . prepareHttpGet ( "" )
. setConcurrency ( 1000 ). setResponseContext ( responseContext )
. setTargetHostsFromLineByLineText ( "http://www.parallec.io/userdata/sample_target_hosts_top100_old.txt" , HostsSourceType . URL )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
Map < String , Object > metricMap = new HashMap < String , Object >();
metricMap . put ( "StatusCode" , res . getStatusCode (). replaceAll ( " " , "_" ));
metricMap . put ( "LastUpdated" , PcDateUtils . getNowDateTimeStrStandard ());
metricMap . put ( "NodeGroupType" , "Web100" );
Client client = ( Client ) responseContext . get ( "Client" );
client . prepareIndex ( "local" , "parallec" , res . getHost ()). setSource ( metricMap ). execute ();
}
});
node . close (); pc . releaseExternalResources ();
對同一目標的不同請求
現在看看如何輕鬆地使用請求範本向相同目標發送多個不同的請求。貼文正文、網址和標題中允許變數替換。閱讀更多..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
更多詳情請查看變更日誌。
0.10.x
,我們在生產中使用。async-http-client
(目前使用 AHC 版本2.0.15
)的 Parallec.io 版本是0.20.0-SNAPSHOT
。該版本已通過全面的單元測試,但尚未在生產中使用。由於 AHC 2.x,該版本需要 JDK8 ,並且可以與同版本0.20.0-SNAPSHOT
的 parallec-plugins 一起使用,詳細資訊請查看#37。Parallec 建構於 Akka Actor 和非同步 HTTP 用戶端/Netty/Jsch 之上。該程式庫專注於 HTTP,同時也支援透過 SSH/Ping/TCP 進行可擴展的通訊。
90% 以上的測試覆蓋率可確保您隨時找到每個功能的範例。
憑藉過去一年REST Commander內部使用和開源的反饋、經驗教訓和改進,我們現在將 REST Commander 的核心作為一個易於使用的獨立庫。我們增加了15 個以上的新功能,重寫了 70% 以上的程式碼, 90% 以上的測試覆蓋率,以確保自信的使用和貢獻。這次我們也把它架構得更好,這樣大部分內部開發就可以直接在這裡進行。
[觀看演示](https://www.youtube.com/watch?v=QcavegPMDms"Parallec 演示- 點擊觀看!"):Parallec 將100 個網站狀態聚合到彈性搜索,並透過20 行程式碼進行視覺化。
觀看 8000 個伺服器上的 HTTP 呼叫示範: 8,000 個Web 伺服器 HTTP 回應在12秒內聚合到記憶體/在16秒內聚合到 ElasticSearch。
[觀看 Ping 演示](https://www.youtube.com/watch?v=9m1TFuO1Mys“Parallec Ping 與 FPing 演示 - 點擊觀看!”):Parallec 的速度是盡力調整的 FPing 的 2 倍,並且具有相同的準確結果和在 11.1 秒內 ping 8000 個伺服器,詳細資訊請查看此處。
請注意,速度會因網路速度、API 回應時間、最慢的伺服器、逾時和並發設定而異。
我們在 3,000 台伺服器上執行遠端任務執行 API,透過編寫 25 行程式碼,將回應聚合到彈性搜索,並在 15 秒內可視化。
借助另一個更快的 API,可以呼叫同一資料中心內的 8,000 台伺服器,並在 12 秒內將回應聚合到記憶體中。
在 1500 台伺服器上,Parallec 2.2 秒 vs FPing 4.5 秒。 Parallec 是 ping 1500 台伺服器的 FPing 速度的 2 倍(在盡力調整後:-i 1 -r 0 v3.12),同時獲得相同的 ping 結果。 Parallec 在 11.1 秒內輕鬆 ping 8000 台伺服器。
像往常一樣,不要依賴這些數字並執行您自己的基準測試。
在Parallec中,您可以在Worker(聚合之前:並行)或Manager(聚合之後:單執行緒)中處理回應。閱讀更多..
更多相關工作回顧,請造訪此處。
特徵 | 帕拉萊克 | 休息指揮官 | 線程池+非同步客戶端 |
---|---|---|---|
具有直覺式建構器模式介面的嵌入式庫 | |||
即用型應用程序,具有基於 GUI 嚮導的請求提交和回應聚合 | |||
簡單的並發控制,不受線程大小限制 | |||
立即響應處理程序,無需等待所有回應返回 | |||
容量感知任務排程器和全域容量控制 | |||
回應處理和 API 聚合的完全自由:可插入的通用回應處理程序和回應上下文 | |||
1 行外掛程式啟用 SSL 用戶端身份驗證 | |||
90% 測試覆蓋率 | |||
從 CMS 查詢、JSON 路徑、文字、清單、URL/本機字串載入目標主機 | |||
非同步 API 的任務級並發與編排:自動輪詢任務進度 | |||
關於超時和替換異步 HTTP 用戶端的任務等級配置 | |||
具有進度輪詢和取消功能的非同步和同步任務控制 | |||
可擴展的並行 SSH,具有基於密碼和金鑰的登錄 | |||
在生產環境中超過 100,000 台目標主機上經過驗證的可擴充性和速度 | |||
具有變數替換的通用請求模板,用於向相同/不同的目標主機發送不同的請求 | |||
具有重試功能的可擴展 Ping | |||
具有空閒逾時功能的可擴充 TCP/UDP | |||
在工作線程(並行)或管理線程中靈活的處理程序位置 | |||
開箱即用的狀態代碼兩級響應聚合 | |||
可設定的回應日誌間隔修剪 | |||
取消目標主機清單上的任務 |
我們深深感謝所有貢獻者的努力。
Parallec 由 eBay Inc. 的雲端基礎設施和平台服務 (CIPS) 的 Yuanteng (Jeff) Pei 和 Teng Song(原作者)提供服務
程式碼根據 Apache License v2.0 獲得許可
© 2015-2017 eBay 軟體基金會