私たちは、高いユーザー数と一般的に多くの使用を達成することを望んでいるウェブサイト/ウェブアプリケーションを設計しています。具体的には、プログラミング/スクリプト言語としてPHPを使用し、リレーショナルDBに必要なMySQLを出発点として使用する予定です。NoSQLデータベースを使用するかどうかはまだわかりません。
これに関連して、スケーラビリティを念頭に置いて設計したいと考えています。 Webサイトの最も一般的なスケーラビリティの落とし穴は何ですか?システムを簡単にスケーラブルにするために考慮する必要のある重要な領域は何ですか?
それに加えて、非常に一般的なことを1つ追加します-間違った場所での最適化PHP構文構成体のナノ秒の違いについて議論している記事はたくさんありますが、アプリケーションのキャッシングインフラストラクチャを適切に設計する方法についてはそれほど触れていません。すでに述べたように、テストしてください。ただし、ただテストしてください-プロファイルと何を見つけてください正確に遅いです-それはCPUバウンドですか?I/Oバウンドですか?メモリバウンドですか?それはあなたをダウンさせるデータベースクエリですか、それはファイルを読んでいますか?計算?それを排除するか、やり直してより高速に動作するか?など「高速なのでNoSQLを使用しましょう」から始めないでください。「これをやりたいのですが、ボトルネックは何ですか?どのように排除するか」から始めてください。 ?100人のユーザーがいる場合、どのように動作しますか? "ワークロードとアプリについて詳しく知らなければ、具体的なことを言うのは難しいですが、キャッシュできるものと、ファイルシステム/データベースなどのアクセスを減らす方法を考えることから始めます。特に変更(これらはキャッシュも無効にするため)。
最も一般的なスケーラビリティの落とし穴は、早い段階で負荷テストを実行しないことです。開発の早い段階で予想される負荷に匹敵するものをシミュレートするテストを設定すると、スケーラビリティに対する技術的またはアーキテクチャ上の障害を、修正するのに費用がかかりすぎる前に検出して修正できます。
PHPを使用したスケーリングの良い例: Tumblr 、 Flickr 、 Netlog
スケーラビリティに関する一般的なアドバイス:
いくつかの落とし穴:
スケーラビリティの問題があるかどうかを確認する唯一の実際の方法は、それをテストすることです。そのため、早期にテストし、頻繁にテストします Michael Borgwardtによる 。
それ以外に、システムがスケーリングしない一般的な理由は、リソースの競合です。そしてそれは通常、データベースに表示されます-同時に読み書きしようとします。したがって、読み取り(クエリ)側を書き込み(コマンド)側から切断する CQRSアプローチ の使用を検討することをお勧めします。
すべてをシャーディングする準備をしてください。複数のホストに分割できる場合は、拡張可能な何かを構築するのに非常に近いです。
また、100万人のユーザーの場合に合わせて設計し、スケールダウンします。 1,000ユーザー向けに設計してスケールアップしないでください。
正直なところPHPそしてMySQLはこれを行うための私の選択ではありません。MySQLでシャーディングされたデータを実行しようとすると、首の痛みになります。