0

これらの基本的なコンポーネントを備えたシステムを設計する必要があります。

  • 〜100リクエスト/秒を取得するWebサーバー。Webサーバーは、生データリポジトリにデータをダンプするだけで済みます。
  • Webサーバーから100行/秒を取得する単一のテーブルを持つ生データリポジトリ。
  • 生データ処理ユニット(単純な処理、それほど多くありません。無効な生データの削除、破損した生データへの欠落したコンポーネントの挿入など)
  • 処理されたデータリポジトリ

このようなシステムでは、すべてのコンポーネントが構築されるサービスレイヤーを持つことは理にかなっていますか?コンポーネント間の相互作用はすべて、サービスレイヤーを通過します。これにより、システムのアップグレードと保守が容易になりますが、処理するトラフィックが非常に多いため、パフォーマンスに大きな影響はありませんか?

4

4 に答える 4

2

あなたがそれを警戒しない限り、これが起こり得ることです。

レイヤー間の通信では、XMLなどの形式が選択されます。次に、それをビルドして実行し、パフォーマンスが不十分であることがわかります。

次に、プロファイラーをいじって、問題が何であるかを推測します。

このような問題に取り組んだとき、私はスタックショット手法を使用して、すぐに問題を見つけました。あなたはそれがI/Oだと思ったでしょう。いいえ。データをXMLに変換し、XMLを解析してデータ構造を復元するのに約80%の時間がかかっていました。それを行うためのより良い方法を見つけるのはそれほど難しくありませんでし。結果-5倍のスピードアップ。

于 2010-08-06T16:06:47.250 に答える
1

個人的には、システムを設計するときに、低レベルの実装の詳細に集中しすぎている可能性があると感じています。コンポーネント、アセンブリ、またはサービスをレイアウトする方法を検討する前に、システムを設計する方法を検討する必要があります。

システムアーキテクチャを構築するための次の高レベルのステートメントから始めることができます。

  1. 開発チームと運用/サポートチームの技術スキルセットを確認します。
  2. サービスに統合するシステムの最初の有限リスト、それらがサポートするプロトコル、およびいくつかのSLAについて合意します。
  3. メッセージング戦略を決定します。
  4. サービス/システムをどのようにデプロイするかを理解します。
  5. ミドルウェア(ESB、メッセージブローカーなど)、データベース(SQL、Oracle、Memcache、DB2など)、およびサードパーティのフレームワーク/ツールの選択を決定します。
  6. キャッシングとデータレイテンシの戦略を決定します。
  7. アプリケーションをビジネス責任のさまざまな領域に分割します-これにより、作業を分割し、開発/テストおよび実装中にマイルストーンをより簡単に伝達できるようになります。
  8. 責任範囲を満たすために、必要に応じて各コンポーネントを設計します。責任範囲は、コンポーネント、アセンブリ、またはサービスの設計方法を自動的に決定するように導く必要があります。

明らかに、上記のすべてがあなたの特定のケースに一致するわけではありませんが、少なくともいくつかの考えを与える必要があることをお勧めします。

幸運を。

于 2010-08-06T15:36:33.607 に答える
1

個別のサービスレイヤーを持つことのコストとしてどのように見ていますか?

それらの費用は、あなたが負担しなければならない費用とどのように比較されますか?あなたの場合、それは少なくとも

  1. リクエストのために読み取られたネットワーク
  2. 生データのデータベース書き込み
  3. 生データのデータベース読み取り
  4. 処理されたデータのデータベース書き込み

加えて、いくつかのデータの変更。

どんなサービスを考えていますか?多分

  • saveRawData()
  • getNextRawData()
  • writeProcessedData()

なぜオーバーヘッドはプロシージャコール以上のものなのですか?サービスは、「個別のプロセス」または「Webサービスのマーシャリング」を意味する必要はありません。

構造は常に価値があると私は主張します。アプリケーションの関心の分離は本当に重要です。データベースアクティビティと比較して、いくつかのプロシージャ呼び出しはめったに多くの費用がかかりません。

ちなみに、生データの永続化は、キューイングシステムに対して行うのが最適な場合があります。必要に応じて、別々のマシンに多数のキューリーダーを配置することで、自然なスケーリングを実現できます。事実上、キューイングシステムは、サービスのような概念を自然に導入しています。

于 2010-08-06T15:16:39.450 に答える
0

抽象化と階層化はレイテンシーをもたらしますが、本当の問題は、コストを価値のあるものにするために何を獲得しているのかということです。緩い結合、ガバナンス、スケーラビリティ、保守性は、実際の価値があります。

最適に設計されたレイヤードアプリでさえ、DBと直接通信するアプリよりも待ち時間が長くなります。元のシステムを知っているユーザーは違いを感じるでしょう。彼らはそれを好まないかもしれないので、これは技術的な問題と同じくらい政治的な問題になる可能性があります。

于 2011-05-22T18:34:19.670 に答える