私は高性能なシステムを持っていますが(しかし、まだ100%はありません)、C#で完全に書かれています。設計中に大きな建築ミスを犯したと思います。なぜなら、それは容易にスケーラブルではないからです。性能とスケーラビリティのアーキテクチャに関する質問
現在かなりうまく機能していますが、私は数ヶ月後に起こると思われるボリュームの増加のために水平方向にスケーラブルであることを確認したいと思います。
このシステムは、システムに入るデータの同時接続数が非常に多く、最終的には処理後にデータベースに入ります。現在、毎分約300件のレコード/接続があります。
システムはこのように設計されています。システム全体がAmazonに勝利2003サーバー8ギガバイトRAM/4のvCPUインフラデータを取得し、データのためにMSMQ
- SQL Server 2008データベーステーブル。メインテーブルの1つには、定期データを消去した後も約3 GBのデータがあります。これには適切なインデックスがあり、現在のレポートは遠隔地にも十分速いです。特定のアラート
- を生成します。その後、ルールのために処理される。この処理されたデータは、その後、MQに掲載されて
- 上記
から離れて他のいくつかの関連プログラムがありますが今の主心配はのスケーラビリティについてです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を誤解しましたか?
"主な心配は、ステップ(3)のプロセッサのスケーラビリティとSqlサーバー2008のスケーラビリティです。 - 3GBはあまりデータではありません。 SQL Server 2008は、あなたや私が書くことができるものよりも優れたスケールになります。 –