容量を処理するために「スケールアウト」する必要のあるWebサイトについて、どのようなベストプラクティスを実行する必要がありますか?人々がクラウドを検討している今、これは特に関連がありますが、ファンダメンタルズを見逃しているかもしれません。
開発レベルのタスクからインフラストラクチャ、管理に至るまで、ベストプラクティスと思われるあらゆることについて聞きたいです。
並行処理の設計
つまり、コーディングしているときに、複数のスレッドを実行することを計画します。共有状態を計画します(多くの場合dbのみ)。複数のプロセスを計画します。物流計画を立てます。
これにより、システムを複数のマシンに分散したり、ロードバランシングを使用して複数のプロセスに分散したりできます。これにより、障害が発生した場合に冗長プロセスを実行でき、システムをインプレースで変更する必要がある場合に、すべてのサービスを終了する必要はありません。
あなたが考えるかもしれないいくつかのこと:
シェアナッシングアーキテクチャ
それを念頭に置いて、あなたが思うかもしれないこととは逆に、すぐにスケールアウトソリューションにジャンプしないでください。システム外のオーバーヘッドとシステム内の呼び出しを比較検討する必要があります。たとえば、ローカルコールを行うよりも、ネットワークインターフェースを介してDB接続を行うのに、LOTは長くかかります。スケールアウトに必要な管理、電力、およびチューニングの作業にかかる時間と、真の大規模なシステムの場合の追加の$を予算化します。
いずれにしても、「何も共有しない」アーキテクチャには依然として大きな価値があり、時間の経過時にシステムを階層化およびスケールアウトできます。
安全、高速、信頼性の高いDNS
レジストラのDNSサーバーを使用しているいくつかの大容量Webサイトを見つけましたが、アップタイムやパフォーマンスのためにSLAがありませんでした。さらに、それらのサーバーはインドにあり、レイテンシーだけでDNSスプーファーは、顧客または中間ISPのキャッシュを汚染する可能性があり、これにより、SSLで保護されたトラフィックでさえ、誰にも知られずにリダイレクトされる可能性があります。
DNSの速度は、レコードがキャッシュされる前のサーバーの初期読み込み時間にも影響します。
私はほとんどの顧客にDynDNSまたはNeustarを使用しています。これは、非常に堅実なDNSインフラストラクチャを持っているためです(ただし、それは高価であり、私はこれらの会社に他の提携関係はありません)。
複数のホスト名にわたる要求を並列化します
HTTP標準の一部は、WebクライアントがDNSホストごとに最大2つのセッションを要求するというセクションです。 www.domain.comにエイリアスを設定してリクエストの同時実行性を高め、ページの読み込みを高速化するソリューションは次のとおりです。
基本的には、ASP.NET HTTPハンドラーを編集して、クライアントを送信するターゲットホストを代替します。各ホストはCNAMEから "www"です。
キーは単純になると思います:
簡単なコードを用意してください。それはあなたが見て理解することを意味します。サーバーを拡張して変更するときは、何が起こっているのかを知る必要があります。また、すばやく理解する必要があるコーダーを追加する必要がある場合もあります。明白ではないランダムなコードを呼び出すフックとXMLファイルは非常に悪いです。
次に、問題をテストして見つけることができます。
私たちは stellarbuildがダウンタイムなしでWebサイトを拡張できるように努めています。 つまり、コードの機能と実行場所を知る必要があります。別のマシンをテストしている場合でも、拡張に時間がかかりすぎることはありません。ほとんどの人は悲しいことに、ほとんど手遅れになったときにはじめます。私の意見では、それを行って初めて最適化できます。