サーバ

サーバ負荷対応

システムにトラブルはつきものですが、トラブルを起こしてはいけないシステムというのも存在します。
こういうシステムはミッションクリティカル(mission critical)と呼ばれ、
例えば病院や重要な金銭に関わるシステムなど、24時間365日止まってはいけない業務に使用されるシステムのことをと呼びます。
ミッションクリティカルのシステムは最大限の高い信頼性や耐障害性、障害が発生した時でも被害を最小に食い止める様々な機能、万全のサポート体制などが必要となります。

また、ここまで行かなくても、企業で使うシステムが止まると大なり小なり金銭的リスクが出るものです。
するとトラブルが起きてしまってもなんとかサービスへの影響を低くする方法というのも必要になってきます。
今日はそんな話です。

負荷分散の方法はいくつかあります。

クラスタリング

clustering/クラスタ化
クラスタとは「群れ」の意味で、複数のコンピュータを連結して、全体で1台のコンピュータであるかのように振舞わせる技術をクラスタ化と呼びます。
物量が増えている事で高性能化になりますし、まとめて1台のコンピュータを扱うように管理・運用することができるため仮に1台が壊れてもシステム全体が止まることはなく、運営を続行できます。

MySQLクラスタ

通常MySQLサーバを運用する場合、Masterサーバ1台+Slaveサーバ複数台で構成し、更新系のクエリはMaster、参照系はSlaveサーバのいずれかへ行うことで負荷分散を行います。
更新系のクエリが多くなるようなシステムだと、Masterサーバへの負荷は軽減されていません。
こんな場合にMySQLクラスタでMasterの方をマルチ構成にできます。

ラウンドロビン

round robin
複数のサーバ順番に参照して負荷を減らす方法。
同じ構成にしたサーバ群を複数用意して、処理要求を順番に割り振る事で1台あたりの負荷を減らします。
日本語にすると「巡回的並列処理」となるそうです。

冗長化

redundant/リダンダント/じょうちょうか
必要よりスペックの大きい設備を用意しておき、構成の一部が故障してもサービスを継続して提供できるようにシステムを構築すること。
例えばWebサーバを2台用意しておき、同じサービスを格納すれば、片方のサーバが故障してももう片方のサーバがサービスを続行することができる。
この場合、複数の設備が同時に故障しない限りサービスが停止しない上、故障した場合もその部分だけを取り替えて復旧させることもできる。

負荷試験

しかし負荷分散を行っていても「はたして本当はどれくらいの負荷に耐えられるのか?」というのは把握しないといけません。
そのシステムがどれくらいの負荷に耐えられるかを試験します。
ツールとしてはApache JMeterなどを使うようです。
リクエスト情報をひたすら送信、というようなDos攻撃的なものではなく、想定するシナリオを作ってスレッド数、Ramp-Up期間、ループ回数などを設定してテストします。
例えば「スレッド数: 60/Ramp-Up期間(秒): 60/ループ回数: 1 」とした場合
「60のスレッドを60秒の時間をかけて処理開始し、スレッド毎にシナリオを一回だけ実行する」
というような意味になります。
あるいは設定を設けずCPUの何%まで、とひたすら負荷を上げ続ける使い方もできます。

CDN(content delivery network)の利用

データ配信の外部サービスを使う、というのも負荷の軽減になります。
AkamaiとAmazonが有名所なのではと思います。
とりあえずAkamaiを例にします。
CDNのサーバはユーザーからのアクセスを引き受けてくれます。WebサイトのキャッシュをAkamaiに保存し、ユーザーからのアクセスはAkamaiなどCDNサーバの方で閲覧してもらえば、自社のサーバには負荷がかかりません。万一Akamaiが落ちたとしても自社のサーバは生きています。
Akamaiはアクセスをコントロールできるので、リダイレクトさせるような操作も簡単にできるのでとても便利です。国営有名サービスでも利用されていました。

これらのように、ホスティングサーバーなどを使っている場合はあまり気にする必要はありませんが、大規模サービスを運営する場合、サーバの構成も考慮する必要があったりします。

梅木千世でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です