こんにちは、だいきです。
あなたは自分が作ったウェブアプリケーションが将来大規模になったとき、システムは動作するのかということを思ったことはありませんか。ウェブアプリケーションの開発者なら、そのような不安を抱いたことがあるのではないのでしょうか。
今回は、ウェブアプリケーションが大規模化したときどのような問題があるのかについて、ご紹介していきたいと思います。
大量のアクセスがあるサービスでは、1台のサーバーではさばききることができないでしょう。このとき、どのように対処すれば良いのでしょうか。
近年では、このような状況になったとき「スケールアウト」という方法で対処を行なうのが、主流です。
「スケールアウト」とは、サーバーの台数を増やすことで、全体の処理能力を上げて、処理をさばく方法です。
「スケールアウト」以外にも、サーバーの性能をあげ、処理能力を上げる「スケールアップ」という方法があります。
先ほど、近年では「スケールアウト」が主流と言いましたが、それはなぜでしょう。
知っている方もいるかもしれませんが、ハードウェアの性能は価格と比例しません。一方、大量生産されているハードウェアほど安くなります。
そのため、安いハードウェアを並べて全体の性能を上げる方が、性能がいいハードウェアを買って性能を上げるよりも安くなります。
しかし、ここで新たな問題が発生します。それは、リクエストをどのように振り分けるかということです。この振り分け作業は、ロードバランサを使うことで簡単に解決することができます。
一方、DB(データベース)を分散させるのは難しいのです。というのも、DBを分散させる際に、新たな情報を書き込まれた際に、他のDBにどのように伝えるかを考えなければなりません。
また、もし他のDBに情報を書き込めたとしても、書き込むまでの時間があるとアプリケーションで不具合が起きてしまう可能性があります。
サーバーが壊れても、サービスが動き続ける構成にする必要があります。
「スケールアウト」を行なっていくと、サーバーの台数が増えるため、故障する回数も自ずと増えていきます。例えば、1年間で故障率が5%のサーバーが100台あると、年間で5台故障することになります。
突然、サーバーが壊れても、動き続けるためにも、いかにしてシステム全体で冗長性をどのように確保するかが大切になります。
もちろん、冗長性を高めるのは、かなりのコストや技術力が必要になります。
大規模サービスになると、1人でサービスの開発と運用するのは難しくなるので、複数人にサービスの開発と運用を行うようになります。
人数が増えることで、様々な問題が発生します。
それは、開発者が好き勝手にシステムを作ってしまい、システムに不備があっても、開発者以外の人が誰も修正できなくなってしまうことです。これでは、人数が増えても、生産性は向上しません。
このようなことが起きらないようにするには、プログミング言語を1つにすることや、コーディング規約を統一するなど標準化していくことが大切になります。
システムが大規模化すると、今まで考えて来なかった問題が起きます。起きる問題を事前に知っておくことで、事前に対処することができます。
事前に対処して、サービスがダウンしないようにしましょう。
以上、だいきでした。