[ はじめに |特長 |使用例 |サンプル |変更ログ / 新機能 / バージョン |ユーザーグループ |モチベーション |デモ |パフォーマンス |比較 |寄稿者 |概要 |ニュース |プラグイン | 中文介绍 ]
[ API の概要 |タスクの生成と送信 |ステータスの追跡と応答の検査 |構成]
Akka の作成者によってツイートされ、[ 今週の #Scala | で特集されました] OSChina - 2015 トップ 100 ]
Parallec は、Akka に基づく高速並列非同期 HTTP(S)/SSH/TCP/UDP/Ping クライアント Java ライブラリです。 20 行のコードを記述することで、API 応答をスケーラブルに集約して処理し、どこにでも送信できます。非常に便利な応答コンテキストを使用すると、応答を処理するときに任意のオブジェクトを入出力できます。スケーラブルな API 呼び出しを実行し、集計されたデータをどこにでも簡単に Elastic Search、kafka、MongoDB、graphite、memcached などに渡すことができるようになりました。1,000 スレッドのスレッド プールを作成せずに、柔軟なタスク レベルの同時実行制御が可能になりました。 Parallec は、 Paralle l C lient (「パラっぽい」と発音します) を意味します。 www.parallec.io にアクセスしてください
デモを見る: 8,000 Web サーバーの HTTP 応答をメモリに12秒で集約し、ElasticSearch に16秒で集約します。
集約されたエラー メッセージ - 完全な可視性によりデバッグしやすい: 同時環境でのデバッグに問題がありますか?もうない!すべての例外、タイムアウト、スタック トレース、リクエストの送信時間とレスポンスの受信時間がキャプチャされ、レスポンス マップに集約されます。これは、タスクを非同期で実行した直後に、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 ドキュメントとサンプル コードを参照してください。
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 ();
同じターゲットへの異なるリクエスト
次に、リクエスト テンプレートを使用して複数の異なるリクエストを同じターゲットに送信する方法がいかに簡単かを見てみましょう。投稿本文、URL、ヘッダーでは変数の置換が可能です。続きを読む..
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 アクターと Async HTTP クライアント / Netty / Jsch に基づいて構築されています。このライブラリは HTTP に焦点を当てていますが、SSH/Ping/TCP を介したスケーラブルな通信も可能にします。
90% 以上のテスト カバレッジにより、各機能の例が常に見つかることが保証されます。
過去 1 年間の内部使用とREST Commanderのオープンソースからのフィードバック、教訓、改善をもとに、REST Commander のコアを使いやすいスタンドアロン ライブラリとして作成しました。 15 以上の新機能を追加し、コードの 70% 以上を書き直し、 90% 以上のテスト カバレッジで自信を持って使用し、貢献できるようにしました。今回は、ほとんどの内部開発をここで直接行えるように、構造も改善しました。
[デモを見る](https://www.youtube.com/watch?v=QcavegPMDms「Parallec デモ - Click to Watch!」): Parallec は 100 の Web サイトのステータスをエラスティック検索に集約し、20 行のコードで視覚化します。
8000 サーバーでの HTTP 呼び出しのデモを見る: 8,000 のWeb サーバーの HTTP 応答をメモリに12秒で集約し、ElasticSearch に16秒で集約します。
[ Ping デモを見る](https://www.youtube.com/watch?v=9m1TFuO1Mys「Parallec Ping vs FPing デモ - クリックして視聴!」): Parallec は、同じ正確な結果で、最も努力して調整された FPing の2 倍の速度であり、 11.1 秒以内に 8000 台のサーバーに ping を実行します。詳細はここで確認してください。
速度はネットワーク速度、API 応答時間、最も遅いサーバー、タイムアウト、同時実行設定によって異なることに注意してください。
25 行のコードを記述することで、3,000 台のサーバー上でリモート タスク実行 API を実行し、応答をエラスティック検索に集約し、15 秒以内に視覚化しました。
別の高速 API を使用すると、同じデータセンター内の 8,000 台のサーバーを呼び出し、応答が 12 秒でメモリに集約されます。
1500 台のサーバーでは、Parallelc が 2.2 秒、FPing が 4.5 秒でした。 Parallec は、同じ ping 結果を取得しながら、1500 台のサーバーに ping を実行する FPing の速度 (ベストエフォート チューニング後: -i 1 -r 0 v3.12) の 2 倍です。 Parallelec は 8000 台のサーバーに 11.1 秒以内に ping を簡単に送信します。
いつものように、これらの数値に依存せず、独自のベンチマークを実行してください。
Parallec では、Worker (集約前: 並列) または Manager (集約後: シングルスレッド) で応答を処理できます。続きを読む..
関連作品のレビューについては、こちらをご覧ください。
特徴 | パラレック | REST コマンダー | スレッドプール + 非同期クライアント |
---|---|---|---|
直感的なビルダーパターンインターフェイスを備えた組み込みライブラリ | |||
GUI ウィザードベースのリクエスト送信とレスポンス集約を備えたすぐに使用できるアプリケーション | |||
スレッドサイズに制限されないシンプルな同時実行制御 | |||
すべての応答が返されるのを待たずに即時応答ハンドラ | |||
容量を意識したタスクスケジューラとグローバル容量制御 | |||
応答処理と API 集約の完全な自由: プラグ可能で汎用的な応答ハンドラーと応答コンテキスト | |||
SSL クライアント認証を有効にする 1 行のプラグイン | |||
90% のテスト カバレッジ | |||
CMS クエリ、JSON パス、テキスト、リスト、URL/ローカルからの文字列からターゲット ホストをロードします | |||
非同期 API のタスク レベルの同時実行性とオーケストレーション: タスクの進行状況の自動ポーリング | |||
タイムアウト時のタスク レベルの設定と非同期 HTTP クライアントの置き換え | |||
進行状況のポーリングとキャンセルによる非同期および同期タスク制御 | |||
パスワードとキーベースのログインを備えたスケーラブルなパラレル SSH | |||
実稼働環境の 100,000 を超えるターゲット ホストで実証済みのスケーラビリティと速度 | |||
同じ/異なるターゲット ホストに異なるリクエストを送信するための変数置換を含む汎用リクエスト テンプレート | |||
再試行を伴うスケーラブルな Ping | |||
アイドル タイムアウトを備えたスケーラブルな TCP/UDP | |||
ワーカー (並列) またはマネージャー スレッドのいずれかでの柔軟なハンドラーの場所 | |||
ステータスコードに関するすぐに使用できる 2 レベルの応答集約 | |||
設定可能な応答ログの一定間隔でのトリミング | |||
ターゲットホストのリスト上のタスクをキャンセルする |
すべての貢献者のご尽力に深く感謝いたします。
Parallec は、eBay Inc. のクラウド インフラストラクチャ & プラットフォーム サービス (CIPS) の Yuanteng (Jeff) Pei および Teng Song によって提供されます (原著者)。
Apache License v2.0 に基づいてライセンスされたコード
© 2015-2017 eBay ソフトウェア財団