2011-01-09 8 views
2

私は高性能なシステムを持っていますが(しかし、まだ100%はありません)、C#で完全に書かれています。設計中に大きな建築ミスを犯したと思います。なぜなら、それは容易にスケーラブルではないからです。性能とスケーラビリティのアーキテクチャに関する質問

現在かなりうまく機能していますが、私は数ヶ月後に起こると思われるボリュームの増加のために水平方向にスケーラブルであることを確認したいと思います。

このシステムは、システムに入るデータの同時接続数が非常に多く、最終的には処理後にデータベースに入ります。現在、毎分約300件のレコード/接続があります。

システムはこのように設計されています。システム全体がAmazonに勝利2003サーバー8ギガバイトRAM/4のvCPUインフラデータを取得し、データのためにMSMQ

  • にプロセッサを置くとに挿入
  • C#ソケットサーバー上でホストされている

    1. SQL Server 2008データベーステーブル。メインテーブルの1つには、定期データを消去した後も約3 GBのデータがあります。これには適切なインデックスがあり、現在のレポートは遠隔地にも十分速いです。特定のアラート
    2. を生成します。その後、ルールのために処理される。この処理されたデータは、その後、MQに掲載されて
    3. 上記

    から離れて他のいくつかの関連プログラムがありますが今の主心配はのスケーラビリティについてですSQL Server 2008のスケーラビリティを向上させることができます。同時接続のサイズがSQL Serverのデータと共に増加するため、それは私の人生を苛酷にします。

    私は2つの選択肢を考え出しました。そのうちの1つは、現在のシステムがMicrosoftの技術を基盤として構築されていることを考慮して、バックエンドプロセッサの主要な置き換えです。

    すべてのオプションについては、主な最大のテーブルのために、postgresql/pgpool IIIロードバランス(ストリームレプリケート)ソリューションを使用してストレージします。他のテーブル&スキーマはsql 2008に残っています。これにより、データベースストレージの費用対効果の高いソリューションが得られます。

    オプション1: - JBOSS & HornetQは でMSMQを交換 - コンテナに手順3でデータ処理を入れてくれ負荷分散とクラスタリングのためのオプションを与えるJBOSSのEJBコンテナでは、「メッセージ駆動型Bean」を管理。
    - このオプションは、UNIX/Linuxへの私のソリューションの主要な部分を動かすために私が必要になります(フェドーラを検討しています)

    オプション2: - ActiveMQののキューとMSMQを取り付けます(クラスタ化とロードバランス) - Javaのを書きますキューのメッセージを処理し、データベースの永続性を処理します。
    このオプションを使用すると、activemqクラスターインスタンスとjavaアプリケーションの新しいインスタンスを持つLinuxサーバーの数を増やすことができます。

    オプション3: - (クラスタ化とロードバランス)ActiveMQののキューとMSMQを交換し - 利用だけで現在のデータ処理装置(のpostgresqlにデータをプッシュするためにいくつかの小さな変更で) このオプションは、Windowsとのままに私を強制します

    システムはリアルタイムシステムであることに注意してください。システムが99%フォルトプルーフであれば十分です。これは取引システムではないので、私は少しのデータ損失の余裕があります。

    私が明確にしたいことを説明しているかどうかわかりません。しかし、私はどんな質問も歓迎しています。

    長期的な解決策として正しい選択をする際に貴重な提案をしてください。私は実際に自分自身のオプション3に反対していますが、リストから外すことでもう一度ミスを犯したくありません。

    ムトゥ

    明確化のための追加:明確にされていないため

    謝罪。 1.この質問は実際にはアーキテクチャのスケーラビリティに関するものです。特に水平スケーラビリティ 2.現在の平均負荷は1分間に約300回ですが、これは正確に1分以内に広がっていない可能性があります。 3.次の8-12ヶ月で負荷が10倍に拡大される可能性があります。

    問題は、私たちは月に約50のデバイスを販売していたし、今の営業チームが速すぎをランプアップされています。私はこれがすぐに倍増するだろうと信じている

    SQL Serverは、データのおよそ8ギガバイトを持っていて、私達は、デバイスごとにストレージの量を制限し、これは、サイズを小さくすることに役立っています。現在、最大のテーブルは200個のデバイスにつき1つのパーティションとしてパーティション化されており、クエリは合理的です。しかし、私はスケーラビリティとSQL側のボトルネックを見ることができます。

    ので、SQL Serverが別のサーバーに置かれても、私は、SQL Server上で実行できる同時更新の量には限界があるように起こっています。 Sqlサーバーのロードバランシングで水平スケーラビリティオプションを見ることはできません(ただし、クラスタリングで高可用性オプションをサポートしています)。ロードバランシングでMS SQLを誤解しましたか?

  • +0

    "主な心配は、ステップ(3)のプロセッサのスケーラビリティとSqlサーバー2008のスケーラビリティです。 - 3GBはあまりデータではありません。 SQL Server 2008は、あなたや私が書くことができるものよりも優れたスケールになります。 –

    答えて

    1

    1接続あたり5回の更新は、接続の数にあまり依存しません。あなたは、あなたが持っていると思っているコネクションの数を言っていませんでした。

    Javaでは、データのバッチを使用するのがあなたの状況(私はどの技術でも簡単だと思います)で何をするのでしょうか。

    メッセージングとデータベースのパフォーマンスに関する問題は、実行するメッセージ/トランザクションの割合に関することがよくあります。私は、すべてのメッセージを保留にして、これらをバッチ、1つのMQメッセージ、データベースへの1つのトランザクションにするタスク/スレッドを持っています。このソリューションの優雅さは、MQメッセージの速度が遅いほど、バッチが大きくなり、各接続メッセージをより効率的に処理できることです。残りの質問は、メッセージング/データベースがデータの帯域幅を処理できるかどうかだけです。

    1

    パフォーマンスとスケーラビリティはまったく異なるものであり、混同しないでください。だから私の最初の質問は: "本当にあなたの質問は何ですか?"

    簡素化ビットが、:パフォーマンスの改善は、あなたが短い時間で与えられたタスクを実行することを意味します。スケーラビリティは、リソースが追加されたときにシステムのスループットを向上させる能力を測定します。

    スケーラビリティは、すべてのアーキテクチャについてですので、あなたは、ツールの代わりに、アーキテクチャ自体にあまり重点を置くなぜ私は少し困惑しています。 MSMQは非常にスケーラブルであり、SQL Serverは(ほとんどのリレーショナルDBのように)スケールアウトできませんが、スケールアップシナリオでは非常にうまく機能します。

    あなたの主な関心事はデータプロセッサです。私は着信接続が互いに独立していると仮定しているので、1つの標準的な解決策は物理的な2層になり、SQL Serverのためだけに別のマシンをセットアップすることです(SQL Serverがそれを好む方法です)。それから、SQL Serverは(ディスク)I/Oを心配し、ネットワークハンドラ/データプロセッサが簡単にスケールアップされるCPUサイクルを焼き付けながら、そのマシンの全RAMを利用することができます。ロードバランサ)。

    Stackoverflowはこの種のディスカッションにはあまり適していないため、コメントを最小限に抑えて質問と回答を修正する必要があります。

    関連する問題