2016-09-07 8 views
0

私はSaaSマルチテナントのために準備しているアプリケーションを持っていますが、多くのアクティブユーザーを同時にサポートするためにサーバーの冗長性とロードバランシングに最適な方法を見つけようとしています。SaaSアプリケーションの冗長性を拡張するための最良の選択肢は何ですか?

私は、クラスタリングまたはサーバーミラーリングをサポートするように見えますが、大規模な使用をサポートする正しい方法をミラーリングしているISPConfigを使用していますか?マルチサーバー環境でISPConfigをセットアップし、多数のサーバー/データベースを個別に用意するか、多数のサーバーをミラーリングされたクラスターとして構成する必要がありますか?これはデータベースにどのような影響を与えますか?すべてのサーバが接続する外部データベース、おそらくAmazon RDSを探すべきでしょうか?

私は誰でもこれを提供できる方向を感謝します。

+0

[Cassandra](https://cassandra.apache.org/)などのデータベースシステムについて聞いたことがありますか? –

+0

私はしていません。私はそれを徹底的に調べます。 ISPConfigと互換性があるかどうか知っていますか?可能であれば、私はそれを変更したくないのが望ましいでしょう。 –

+0

彼らはMySQLだけをサポートしているようです。ミラーリングはおそらくその場合の最善の策です。とにかく...もしあなたがカッサンドラのことを聞いたことがなく、すでにアプリを持っていれば。あなたは遅すぎます。変換は多くの仕事になるでしょう...あなたは、ここで人々がその状況について何を言っているのかチェックしたいかもしれません:http://serverfault.com/search?q=mirror+mysql –

答えて

0

非常に多数のユーザーを必要とする新しいバージョンのソフトウェアを作成している場合は、通常、大きなボトルネックが1つあります。データベースです。

そのため、FacebookやTwitterなどの大規模なWebサイトの多くは、SQLデータベースから離れており、ほとんど水平に拡張できるシステムを使用しています。これらはNoSQLデータベースを呼び出します。私が使っているのはCassandraです。より多くのユーザーを獲得すればするほど、カサンドラノードを増やすことができます。 Netflixは2015年頃に2,000以上のノードを持っていると言いました。

Cassandraは自動的にノード間でデータをミラーリングします。

もしあなたが望むのであれば、Javaの代わりにC++のCassandraであるScyllabを見ることもできます。データベースからの削除に問題がなければ、私はそれを使用しています...今は、残念なことに私の選択肢ではありません。他にもいくつかのNoSQLシステムがありますが、これらは私が試した唯一の2つです。

次は...別のコンピュータで実行するアプリケーションを書いてみましょう(開発中は同じコンピュータで実行できますが、それは問題ありませんが、Cassandraには少なくとも4GbのRAMが必要です)。100 %あなたのアプリケーションによってインストールされた読み取り専用の静的なデータではないすべてのデータがデータベースに保存されていることを確認してください。それ以外の場合、コンピュータAにはコピーがあり、コンピュータBにはコピーされません。したがって、コンピュータBにアクセスする人は、コンピュータAでそのデータにアクセスすることはありません。しかし、すべてのデータ(アップロードされたファイルさえ)エンド・アプリケーション・インスタンスはそれにアクセスできます。これは何を意味するのでしょうか?負荷を維持するために必要な数のフロントエンドを持つことができます。あなた構造はこのようなものになり:

     Internet Users 
           | 
           v 
        +--------------------+ 
        |     | 
        | Load Balancer | 
        |     | 
        +--------------------+ 
           | 
     +-----------------------+--------------------+ 
     |      |     | 
     v      v     v 
+----------------+ +----------------+ +----------------+ 
|    | |    | |    | 
| Apache/App | | Apache/App | | Apache/App | 
|    | |    | |    | 
+----------------+ +----------------+ +----------------+ 
    ^     ^    ^
     |      |     | 
     v      v     v 
+----------------+ +----------------+ +----------------+ 
|    | |    | |    | 
| Cassandra  |<-->| Cassandra  |<-->| Cassandra  | 
|    | |    | |    | 
+----------------+ +----------------+ +----------------+ 

注:各ボックスには、コンピュータを表し、あなたの最小クラスタは、おそらく約7コンピューターになります。しかし、それぞれが16プロセッサ専用のサーバーの代わりにかなり安いクラウドコンピュータになることができます...

重要な注意点:正しく実行するには、データを安全に保存するために、Cassandraには少なくとも4つのノードと複製ファクタ3。また、安全な(プライベート)LANネットワークが必要です。そのようなものが利用できない場合は、すべてのデータが移動ノード間で暗号化されたことを確認するためにこのようなOpenVPNのようなものをインストールする必要があります(これも、このような重複を提供する他の製品と同様です。)

Load Balancerだけプロセスであり、フロントエンドコンピュータの負荷をチェックし、次の要求を送信するかどうかを決定します。 Apache2にはそのためのモジュールがあります。私はApacheについて知っていることに注意してください。他のHTTPサーバも同様のモジュールを提供するでしょう。これは、どのソリューションがあなたの会社にとって最善のものかを決めるまでです。あなたは完全にそれをスクラッチし、DNS round robins機能を使用することもできます。それほど良いものではありませんが、セットアップはずっと簡単で、アプリにアクセスするたびに十分です。かなり対称的です(ほぼ同じ時間を使用します)。他のユーザーが50ミリ秒を使用しているときに3秒かかるリクエストがある場合は、DNS RRセットアップで問題が発生することがあります。

このアプリケーションはどの言語でも使用できます。私はC++を使用していますが、Java、PHP、プレーンC(本当に?!)、perlなどを使用できました。フロントエンドには何もないことを覚えておいてください。データベース全体で、あなたは大丈夫でしょう。ミラーリングはCassandraによって行われるので、その時点で作業は完了です。

上に示したグラフは、あまり正しくないことに注意してください。フロントエンドは任意のCassandraノードに接続する必要があります。多くの場合、ドライバは2つまたは3つのノードに接続して、常にデータにアクセスできるようにします。その後、1000人のユーザーから10,000人になったら、いくつかのフロントエンドといくつかのCassandraノードを追加して、ボイラー!以前と同じように動作します(クライアントの場合と同じ速度)。

ISPConfigを使用している限り、確かに。 ISPConfigはそれらのすべてを手伝ってくれるでしょうか?おそらくそうではありません。少なくともあなた自身のモジュールを追加する必要はありません...しかし、あなたはあなたのDNSをセットアップし、あなたの電子メールをセットアップし、おそらくApacheの設定の大部分をやってくれるでしょう。

+0

Alexis、ありがとう!それは非常に有用な情報です! –

+0

ISPConfig私はあなたがクラスタapacheとmysqlをセットアップできることを知っています。 ISPConfig(これは私が非常に快適です)と、私がプログラムしているPHPをISPConfigで使用するのは理にかなっています.ISPConfigは私のApacheサーバクラスタリングを処理することができます。カサンドラクラスターに接続します。この場合、カッサンドラクラスターはどのように機能しますか?あなたのダイアグラムは各Cassandraノードへの各Apacheサーバーを示していますが、Apache対Cassandraの1対1比率のこの良い習慣は役に立ちますか? ApacheサーバーはどのCassandraノードを使用するかをどのように知っていますか? –

+0

@DarrenPeck、あなたはそれがどのように動作するかを知るためにCassandraを読みたいと思う。接続するには、ドライバを使用し、一般にシードノードと呼ばれるものを指定します。 1つの「ラック」に3〜6つの種子が必要です。 (1つの場所)複数の場所を作成する場合は、そこに別のいくつかの種子を置きます。カサンドラについて読むと、あなたはそれらのこと全てを学び、テストを始めた後に他の質問をして、それがあなたのためにどのように働くかを知るべきです。それはMySQLのようなものではありません...彼らの言語はCQLと呼ばれ、制限があります... http://www.planetcassandra.org/apache-cassandra-client-drivers/ –

関連する問題