Web Application & Software Architecture 101 ~④アベイラビリティとは?~

educativeのWeb Application & Software Architecture 101という講座を受けたのでその内容についてまとめです.これは現在のWebアプリケーションがどのような設計で成り立っているかを概念レベル(コードレベルではない)で説明されてい講座です.なのでWebアプリケーションの設計について学びはじめの方やWebアプリケーションの設計の全体像を知りたいという方にぴったりの講座です. 第4回目の今回はアベイラビリティについてです.これはシステムがどのぐらいの割合通常通り使用できるかを表す指標です.24時間のうち24時間きっちりと動くシステムのアベイラビリティは100%という感じです.このアベイラビリティは航空システムや金融システムにおいてはほぼ100%ではないと行けいないとても重要な指標です.今回はなぜシステム障害が起きてアベイラビリティが下がってしまうかやその対策方法の概要について説明します.

システム障害が起きる理由は?

システム障害が起きてアベイラビリティが下がってしまう主な原因は以下の4つです.

  • ソフトウェア故障

  • ハードウェア障害

  • ヒューマンエラー

  • 計画的なダウンタイム

ソフトウェア障害はOSがクラッシュしてしまったり無応答のソフトウェアがメモリを大量に消費してしまってサーバ全体が停止してしまうことを指します.ハードウェア障害はハードディスクが駄目になってしまったりなどハードの故障によって起きる障害です.ヒューマンエラーは人が設定を間違えてサービスを起動してしまったりすることによる障害です.この講座ではこのエラーが一番多いと書いていました.計画的なダウンタイムはOSのアップデートなどで意図的にシステムを止めることを指します. このような障害を乗り越えてどうやったら,ハイアベイラビリティなシステムを作れるのかを次に説明します.

ハイアベイラビリティなシステムを実現するには?

フェイルソフト

1つ目のアプローチはフェイルソフトです.これは1つ1つの機能を実現するアプリケーションを別々のプログタムで作っておき1機能のアプリケーションがダウンしても他に影響のないようにしておく方法です.例えばSNSでは画像の投稿やいいねができなくなっても文字の投稿と閲覧はできるようにして,サービス全体として動いている状態を作ることができます. この別々のプログラムで作っておくというのはマイクロサービスという考え方です.マイクロサービスで作られたSNSでは例えば文字の投稿やいいねの管理,画像アップロードやログイン機能をそれぞれ独立したサービスとしてられており,それぞれのサービスが通信することでサービス全体(SNS)として機能します.

冗長性

2つ目のアプローチは冗長性をシステムに持たせると言った方法です.これは同じ機能のサービスを複数用意しておいて,どれかが故障しても大丈夫なようにしておく方法です. 冗長性の持たせ方にも2種類あります. 1つ目がActive-Active HA(High Availability Mode)でこれは実際にユーザーがアクセスできるサービスを複数用意しておくという方法です.このうちのいくつかのサービスがダウンしても他のサービスでまかなえるので,サービス全体として利用でき状態を保つことができます.

f:id:harada-777:20200824210225p:plain:w300

2つ目がActive-Passive HA(High Availability Mode)はユーザーからアクセスされない本番と全く同じサービスを裏で待機させておくという方法です.この裏で待機させているサービスを待機系と呼んだりします.

f:id:harada-777:20200824210231p:plain:w300

アクティブになっているサービスに何か問題が発生したら,待機しているサービスと入れ替えることで問題なくサービスが利用できるようにすることができます.

Blue-Green Deployment

Blue-Green Deploymentは計画的なダウンタイムを限りなく0にするための方法です.これはActive-Passive HAのように2つの環境を用意します. サービスをアップデートする為にデプロイしたい時を考えます.例としてユーザが直接アクセスする本番環境をブルーとして,待機系の方をグリーンとします.ブルー環境のサービスを直接アップデートすると新しいサービスが終了してから再起動するまでダウンタウンタイムが発生しユーザーはサービスを利用できなくなってしまいます.そこでまずはグリーン環境をアップデートして正常に動くことを確認してからユーザーがグリーン環境に接続するようにルーティングを変更します.これがBlue-Green Deploymentと呼ばれる方法です.こうすることでデプロイによるダウンタイムをなくすことができます.

感想

僕が働いているユーザベースはマイクロサービスアーキテクチャを採用しているので上記の考え方に基づい冗長性のあるシステムになっており,自然とこの考え方は知っていたのですが改めて今回整理することができてよかったです.