見出し画像

運用日和 vol.03 ウソみたいだろ。死んでるだぜ(サーバとネットワークが)

こんにちは、むおんせいです。

今回のタイトルは、昔なつかしのタッチより。
でも、達也と和也の話ではなく、サーバ故障とネットワーク断の話です。
(年齢がバレるネタだなぁ。。)

※注意※
ヘッダー画像の犬猫は死んでません、寝ているだけです。
紛らわしい書き方をして申し訳ない。。

▼導入

システム開発をやっていると、プログラムがコケた場合どう処理するかの例外処理を書くことがあります。

例えば、プログラムの内容から外部出力をする場合特定のディレクトリ配下に出力する設定になっているのに「その出力ディレクトリが存在しない」場合や、
逆に特定のファイルからシステムに入力する場合に指定されたファイルを確認したら「ファイルの形式が想定とは異なり、正しく入力できない」場合など、他にも多くの例外パターンがあり、挙げだしたらキリがないです。

なお、例外ケースとして、「サーバが故障する」とか「ネットワークが繋がらない」というケースはイマイチピンとこない方が多いようです。

試しに、先日若手に「このプログラムって、ネットワーク繋がらないときはどう処理するの?」と聞いたら、「そんな状態はダメです!!」と言われました。。

まぁ、ダメなのはわかるんですが、実際に起こるもんは起こるから仕方ないじゃない。


▼サーバもネットワークも故障する

2年ほど前になりますが、通信会社の障害で現場上司の方がモバイルSuicaが使えず、改札を出れなくなってました。



これに対し「自前のサーバに頼っているせいだ。多重化されたクラウドサーバならばそんな停止は発生しないはず」というご意見も聞こえてくるかもしれません。

しかし、代表的なクラウド環境の一つ、MicrosoftAzureでも大規模な通信障害が起こっている実績があります。

ダメ押しで「民間で対応がしっかりしていないからそうなるんだよ。国が対策をしっかりしているところなら障害なんて発生しないんじゃないの?」と意見してみると、
やっぱりそんなことはなくて、公共放送のNHKもネットワーク機器の障害で一時WEBサービスに接続できなくなる事象が発生しています。



近年、多くの方がインターネットを利用したWebアプリを開発しているため、ネットワーク異常は「避けられない問題」となっています。


▼故障の原因

障害が発生する原因は機器の経年劣化や作業ミスなど様々です。
上記の例でいくと、このような原因です。

・作業ミスでデータセンター空調が停止。その結果サーバ温度が上昇し停止
・経年劣化によるネットワーク機器の故障

その他にも様々あるのですが、総じて言えるのは「どのサービスプロバイダでも発生する可能性がある」というのが実状です。

よって、システム開発では「機器故障や障害は起こる」ということを前提に、設計・開発を心がけると良いと思います。

▼障害に強いプログラム

障害があることを前提で考えた場合、必ず実装した方が良い機能は、各種プログラムを「リトライ実行する機能」です。

例えば、DBサーバに対して接続を試みて、1回失敗だったらエラーとするのではなく「3回試してダメだったらエラーとする」等の工夫を推奨します。

特に、サーバ機器やネット障害時にうまく動かないのは良いとしても、
『一度エラーが出たら起動・停止しないと自動復旧しないプログラム』は改良の余地があります。

なぜそうすべきかというと、
故障・障害以外にも「通信会社のメンテナンス」などで数分だけサービスが停止することがあるからです。

こういったメンテナンスは各社規定により「1分以上の停止については告知して実施するが、それ未満の場合は告知しない」などのルールがあり、告知があればまだ対応出来るのですが、
無告知の場合には障害を検知してから再起動をとるため、どうしても対応が後手になります。
なので、アプリ側でリトライ機能があれば自動復旧してもらえるので、運用にとって大変有り難いプログラムになります。

私の現場ではどうしているかというと、稼働しているサービスに対して、稼働チェックプログラムを作り、自動復旧する方法で対処しています。

▼『とりあえず再起動』の罪

上の文章を見て、
『ただ、サービスを停止・起動するだけじゃん?それくらい良くない?』
と考えた開発者のアナタ。

あなたはサービスが動かなくなる度に、『別の作業してるのに割り込みで』
サービス停止/起動して、動作確認して、を繰り返しやらなければならないツラさを知っているのか??
と聞きたい。そして、小一時間ほど、問い詰めたい。。

※24時間365日稼働しているシステム(通称:24365対応)だと、
 寝ている時に起こされる運用担当者がいる可能性があります。。

無論、最近はZabbixなどの監視ソフトが異常検知時に、自動でアプリの停止起動をしてくれる設定もできますが、自動停止起動にもリスクがあります。
(ここは話だすと長くなるので、次の機会にします)

事前に充分な検証を実施し、問題ないことを確認してから本番環境に適用しましょう。

▼まとめ

お客様が快適に使うためには、
誰かがシステムの面倒を見なければいけない。

だからこそ、開発者には「面倒見やすいシステムを作って欲しい」
運用エンジニアの切なる願いなのです。。届け、この思い!!

それでは、今日はこのへんで。
次回へ続く ->

この記事が気に入ったらサポートをしてみませんか?