サーバ

サーバ負荷対応

さて、システムにトラブルはつきものですが、トラブルを起こしてはいけないシステムというのも存在します。
また、トラブルが起きてしまってもなんとかサービスへの影響を低くする方法というのも必要になってきます。
今日はそんな話です。

■ミッションクリティカル
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の何%まで、とひたすら負荷を上げ続ける使い方もできます。

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

コメントを残す

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