スケーラブルなWebアプリケーションを構築する方法
スケーラブルなウェブアプリケーションは、より多くのリクエストをより優雅に直線的に受け止めることができるため、そう呼ばれています。 ハードウェアを増設すれば、一度に大量のリクエストを処理できるようになります。 Webサイトのスケーラビリティとは、簡単に言えば、ユーザーが増え、リクエストが殺到しても、それらをすべて同じように処理できることを意味します。
スケールアップに成功した人気サイトの例。
Facebookの成長を見れば、その成長ぶりに驚かされることでしょう。 Facebookのユーザーでなくても、このソーシャルメディア・チャンネルが企業やビジネスに与える影響を無視することはできないでしょう。 を超えるという統計があります。
2017年3月のFacebookアクティブユーザー数は19.4億人
であり、毎年18%以上の増加を記録しています。 1日のモバイルアクティブユーザー数については、11億5,000万人と驚異的な数字を記録しています。
FacebookはPHPで書かれており、その巨大なアプリケーション・アーキテクチャにより、100万人のユーザーに対応できるスケーラビリティを備えていることが大きな成功要因です。 ボトルネックを回避するアーキテクチャにより、どのような言語でもスケーラブルに対応できます。 この曲線の形状(コストと使用量の関係)が、アプリケーション・アーキテクチャを決定するのである。 スケーラブルなアプリケーションの場合、曲線はより斜めになりますが、ボトルネックに直面した場合、ほぼ垂直になることが予想されます。
また、使用する言語、データベース、コンパイラも非線形曲線の形状に重要な役割を果たす。 もし、根本的な設計上の欠陥(実装の詳細よりも)があれば、カーブは急速に上昇する鍵になります。 進化し続けるFacebookのアーキテクチャは、業界屈指のエンジニアによって見守られています。 Facebookは独自の最適化されたPHPを持ち、Apache Cassandraのような全く新しいソフトウェアを開発しています。
さて、ここで「スケーラブルなWebアプリケーションを構築するにはどうすればよいか」という100万ドルの疑問が湧いてきます。
ここでは、Webアプリケーションを拡張するための簡単なオプションを紹介します。
1.スケールアップ
バックエンドタイヤにかかる負荷が処理しきれないほど大きくなると、ウェブサイトが機能しなくなる。 実現可能ではありますが、おそらく非常に高価なオプションとなるのが、エンティティ単位でリソースをスケールアップすることでしょう。 ネットワーク速度、IOPs、ストレージ容量、メモリなど、他の次元でも同様にスケールしてください。 なぜ高価になるかというと、弾力性がないため、負荷が低いときにコスト高になる可能性があるからです。
しかし、スケールアウトアーキテクチャでは、特定のタイプの接続をストリームできるようにロードバランサー(エンドユーザーからの要求、外部ネットワークと国際ネットワークの境界)とスキャングループ(システム負荷を追跡し、新しいCPUインスタンスを生成し、アクティブなインスタンスの在庫を追跡するため)が必要なことに注意することが重要である。
2.キャッシング
スケーリングの必要性から、大規模なスケーリングに対する要求と展開が行われるようになりました。 キャッシュは、パフォーマンスを向上させ、リソースの消費を抑えることができます。 リソース使用量には、CPU、S3料金、データストア料金、外部API使用量、データベース使用量が含まれます。 キャッシュを適用できる場所を確認するために、データ分析を行い、リクエストの分布とデータサイズ(読み取りと書き込みの比率を含む)を把握するのに役立ちます。
3.行うパーティションの種類
スケーリングの目的は、もちろん容量を増やすことです。 これには、縦型と横型の2つの方法があります。 垂直スケーリングでは、1台のサーバーに、より大きな、あるいはより硬いドライブなど、より多くのリソースを追加します。 コンピュートオペレーションはより大きく、より良いメモリとより高速なCPUを搭載しています。 垂直スケーリングでは、1つのリソースを取り出して処理能力を向上させます。 水平方向のスケーリングでは、さらにノードを追加することができます。 水平スケーリングを行う最も一般的な方法は、サービスをパーティションまたはシャードに分割することです。 これらのシャードは、特定の機能(例えば、さまざまな種類のユーザーの関心に応えるなど)に対応するために割り当てられます。 シャードの利点は、容量を追加したストアを提供できることです。 しかし、ここで注意しなければならないのは、最初の設計で水平方向のスケーリングができるようにしておかなければならないということで、これを後で追加するのは非常に難しい作業になるかもしれません。
アプリケーションのスケーリングで覚えておくべきこと タスク中に以下の点に注意してください。
1.ウェブサイトのアップタイムに妥協しない
ウェブサイトは、ユーザーがいつでも利用できるようにする必要があります。 e-commerceストアを運営していて、リクエストが急増するたびにサーバーがダウンすることを想像してください。 そのため、Webサイトのアップタイムは非常に重要であり、システム障害や中断にかかわらず、常に利用できるようにWebアプリケーションを拡張する必要があります。
2.検索オプション
ユーザーは同じデータを見に来るかもしれないので、すぐにセインにアクセスできるようにしておく必要があります。 もちろん、データを更新してもらえば別ですが。 いつでもWebサイトのデータにアクセスできることが分かれば、ユーザーからの信頼を得ることができます。
3.パフォーマンス
アプリケーションをスケーリングする主な目的は、優れたパフォーマンスを確保することです。 瞬時に検索できるクイックレスポンスと、低レイテンシーが非常に重要です。
4.管理性
Webサイトの規模を拡大した後は、運用・保守・更新がしやすいように管理性をチェックすることが非常に重要です。
結論
PHPはスケーラブルでないという誤解があります。 では、他の大規模サイトのPHPはどのように運営されているのでしょうか。 スケーラビリティは、言語だけでなく、アプリケーションのアーキテクチャが重要です。 スケーラブルなWebアプリケーションの開発に要する時間は、アプリケーションの複雑さと使用するフレームワークに依存します。 スケーラブルなアプリには、2つの異なるプログラミング層が存在します。フロントエンドと バックエンドです。 フロントエンドとは、その名の通り、ユーザーが操作するもので、インターフェースはAndroidからiOSまで何でもありです。 バックエンドは全体の約8割の作業で構成されていますが、ユーザーはWebアプリケーションのこの部分を意識することはありません。 拡張性には、機能性が大きく関わってきます。 ユーザーが画像をロードする場合、いつでも取り出す必要があるかもしれないので、ストレージのスケーラビリティを考慮する必要があります。 より良い画像のダウンロードやリクエストのためには、低遅延であることが非常に重要です。
このテーマについて、いくつか興味深い記事をご紹介します。
Webアプリケーションをスケールさせる7つのステージ、アーキテクトのための戦略。
スケーラブルなWebアプリケーションを構築するには?
Google Cloud Platform上でスケーラブルなアプリケーションを構築する。
Flickr.com/ klarititemplateshop.com/ Blogtrepreneur
著者についてDeepakはPHPBabuの代表であり、親会社であるYUHIRO Technologies Private Limitedでオフィスマネージャーとしても働いています。