web-dev-qa-db-ja.com

分散プログラマーにはどのようなツールがありませんか?

私は分散プログラミングの世界を改善するという夢を持っています:)

特に、分散システムの動作をデバッグ、監視、理解、視覚化するために必要なツールが不足していると感じています(つまり、要件を満たすために独自のロガーとビジュアライザーを作成する必要がありました)。私の自由な時間にそのようなツールの。

コミュニティ、どのようなツールがありますかあなたこの点で欠けていますか?ツールが何をすることになっているのかを大まかに考えて、回答ごとに1つ説明してください。他の人はそのようなツールの存在を指摘することができます、あるいは誰かがインスピレーションを得てそれらを書くかもしれません。

50
jkff

OK、始めましょう。

高精度のグローバル時間軸を備えた分散ロガー -分散システム内のさまざまなマシンからのイベントを高精度で、クロックオフセットとドリフトに依存せずに登録できるようにします。数百台のマシンと数千のロギングプロセスの負荷を処理するのに十分なスケーラビリティを備えています。そのようなロガーは見つけることを可能にします トランスポートレベルの遅延のボトルネック 分散システムでは、たとえば、メッセージがメッセージキューを介して発行者からサブスクライバに移動するのに実際に何ミリ秒かかるかなどを確認します。

Syslogは十分にスケーラブルではないため、問題があります。1秒あたり50000のログイベントが多すぎるため、このような負荷がかかるとタイムスタンプの精度が大幅に低下します。

FacebookのScribeは、グローバルな時間軸を提供しないため、問題があります。

実際には、syslogとscribeはどちらも、発生タイムスタンプではなく、到着タイムスタンプでイベントを登録します。

正直なところ、私はそのようなツールを欠いていません-私は自分のためにそれを書きました、私はそれを大いに満足しています、そして私はそれをオープンソースにするつもりです。しかし、他の人はそうかもしれません。

P.S.私はそれをオープンソース化しました: http://code.google.com/p/greg

14
jkff

親愛なるサンタさん、分散システム内のコンポーネント間の相互作用を視覚化したいと思います。

以下を示す視覚的表現が欲しいのですが。

  • UMLコラボレーション図またはシーケンス図としてのコンポーネント間の相互作用。
  • 自己相互作用としてのコンポーネントのシャットダウン時間と起動時間。
  • コンポーネントが現在実行されているホスト。
  • それらのホストの場所(利用可能な場合)、建物内または地理的。
  • ホストのシャットダウン時間と起動時間。

私はできることを望みます:

  • 表示されるコンポーネントやインタラクションをフィルタリングして、関心のあるコンポーネントのみを表示します。
  • 相互作用を記録します。
  • 静的な図に必要な時間範囲を表示します。
  • 再生、一時停止、巻き戻し、早送りのための一般的なビデオコントロールを使用して、アニメーションでインタラクションを再生します。

私は一年中優れた開発者であり、本当にこれを望んでいます。

10
Andy Thomas

次に、この質問を参照してください--- 多くの同時多段階プロセスの動作を視覚化する方法は?

alt text

(私は恥知らずに自分のものを参照していますが、それはこのものによって解決された問題が私にとって重要であり、現在の質問は正確に誰かにとって重要な問題についてであるためです)。

9
jkff

Erlang/OTPに付属しているツールのいくつかを見ることができます。他の人が提案したすべての機能を備えているわけではありませんが、それらのいくつかは非常に便利で、多くの経験を積んで構築されています。これらのいくつかは、例えば:

  • 並行プロセスをリモートでもデバッグできるデバッガー、AFAIR
  • Mnesia/etsテーブルおよびプロセスヒープ用のイントロスペクションツール
  • メッセージトレース
  • ローカルノードとリモートノードの負荷監視
  • 分散ログおよびエラーレポートシステム
  • 分散シナリオで機能するプロファイラー
  • 分散システムのプロセス/タスク/アプリケーションマネージャー

もちろん、これらは、プラットフォームが提供する基本機能に加えて、Node Discovery、IPCプロトコル、RPCプロトコルとサービス、透過的な配布、分散型ビルド-データベースストレージ、プロセス名のグローバルおよびノー​​ドローカルレジストリ、およびプラットフォームをチックにするその他すべての基盤となるもの。

5
Amadiro

私の意見では、欠けているのは分散プログラミングプラットフォームです...分散システム上でのアプリケーションプログラミングを非分散プログラミングと同じくらい透過的にするプラットフォームです。

2
axilmar

Akkaもご覧ください: http://akka.io

2
Jonas Bonér

これは素晴らしい質問だと思います。これが、本当に便利だと思うツールの0.02です。分散プログラミングで私が見つけた課題の1つは、複数のマシンへのコードの展開です。多くの場合、これらのマシンの構成はわずかに異なり、さらに悪いことにアプリケーション設定も異なります。

私が考えているツールは、アプリケーションがデプロイされているすべてのマシンにオンデマンドで連絡を取り、システム情報を提供できるツールです。設定ファイルまたはレジストリなどのリソースを指定すると、すべてのマシンのリストが提供されます。また、アプリケーションを実行しているユーザーのユーザーアクセス権限を確認することもできます。

改良点は、設定が開発者によって提供されたマスターリストと一致しない場合に表示を提供することです。また、構成が異なり、差分機能を提供するサーバーを示している可能性もあります。

これは、構成(machine.config、application.config、IIS設定、ユーザー権限など)が非常に多いため、構成が異なる可能性が高いため、.NETアプリケーションに非常に役立ちます。

2
Nikhil

グレッグロガーを指して、この質問を気に入った人に通知しましょう- http://code.google.com/p/greg 。このスレッドの他の回答で説明したのは、高精度のグローバル時間軸を備えた分散ロガーです。

0
jkff

前述の「多数の同時多段階プロセスの動作を視覚化する」(splot)ツールとは別に、ログに定量的なパターンを表示するのに適した「tplot」も作成しました。

両方のツールに関する大規模なプレゼンテーション。ここにはたくさんのきれいな写真があります

0
jkff