大規模クラウドサービスの可用性

萩田 峰旭
エンジニア 萩田 峰旭
大規模クラウドサービスの可用性

こんにちは、萩田です。

弊社では医療機関向けにDXクラウドサービスを提供しておりますが、今回は実際のサービス運営経験を元に、「C=一般消費用」「B=事業者」両者のアクセスに対応するための工夫について紹介したいと思います。
何をもって「大規模」かという点については、今回は「全国に対し複数事業者向けに展開しているクラウドサービス」という括りで広めに考えたいと思います。
エンジニアの皆様やクラウドサービス運営に取り組む事業者様の参考になればと思います。

大規模クラウドサービス運営における可用性について

大規模クラウドサービス運営における可用性について、今回は以下をご説明したいと思います。

  • マインドセット:アメーバ思考
  • ドメイン階層での工夫
  • サーバ階層での工夫
  • システム階層での工夫
  • 開発体制面での工夫

マインドセット:アメーバ思考

アメーバという生物について、どのようなイメージをお持ちでしょうか?
「つかみどころがない」「柔軟」「しぶとい」。
およそこのようなイメージを持たれているかと思います。
私はサービスインフラ構築についても、このアメーバのような考え方で挑むのがよいと考えています。
「分裂する」「柔軟」「つかみどころがない」「しぶとい」といったことをインフラに置き換えると、「同一性」「冗長性」「柔軟性」などと再整理することができます。結果として得られる属性が「しぶとい=可用性」ということになります。

同一性:

サーバの設定や規格を揃えることで、環境構築を高速化でき、予期しない不具合を防止することができます。サーバ構成の標準化とも言えるでしょう。
設定内容を明確化し、設定の自動化や自動チェックをできるようにすることが望ましいです。

冗長性:

アメーバのように、ある一部分が死滅してもサービスを継続できる構成を作るのが望ましいです。

  • メインのインフラとは別にバックアップ用のインフラを用意しておく
  • WEBサーバ、DBサーバなどについて、副系統を並行稼働させる
  • その他障害単一点となるような場所を作らない

このような構成を取ることで、インフラの冗長性を確保できます。

柔軟性:

サービス運営においては、予期しないトラブルが発生することがあります。急な事態に対応できるよう、以下のような準備をしておくことが重要です。

  • プログラムの不具合を発見した場合、当日に即時リリースできる体制を用意する
  • 一括のプログラム更新ではなく、部分的な更新適用を行うことで様子を見れるようにする
  • 緊急的なサーバ追加を行えるようにしておく
  • 休日や営業時間外の緊急体制を決めておく

このような準備を行うことで、柔軟性をもったサービス運営が可能となります。

以降、重複する部分もありますが、各インフラ階層での工夫をご紹介します。
いずれ個別の記事で詳細に触れたいと思います。

ドメイン階層での工夫

  • ドメインが失効してしまったり、ドメイン管理機構で障害が発生した場合のことなどを考え、別のドメインでもサービス運営をできるようにしておく
  • 取得するドメインについては、「新規や更新の契約方法」「更新時の反映タイムラグ」「管理会社の安定性」「変更反映速度」「ブランド」を加味して選定する
  • ドメインではありませんが、サーバ証明書の選定も同じようなことに注意する。場合によってはサーバ証明書を二重契約しておき、契約更新トラブルなどに備える

サーバ階層での工夫

  • データセンター自体のトラブルを想定し、バックアップ用のインフラを契約しておく(縮退運行であっても一部サービス続行できるようにしておく)
  • データセンター内のルータなどを冗長化する
  • サーバ単位で冗長化をし、負荷分散と冗長性担保を両立させる
  • 特にデータベースについては、レプリケーション技術などにより、即座に主系を切り替えられるようにする

 システム階層での工夫

  • システムで利用しているアプリケーションフレームワークについて把握し、緊急時に即時対処できる知見を共有する
  • 機能ごとにリミッターを設け、過剰な処理時間やループを抑制・検知する

 開発体制面での工夫

  • カナリヤリリースなどを取り入れ、安定してデプロイできるようにする
  • 負荷検知とチェックを行い、SQLやシステムのチューニングを継続実施する
  • ささいなヒヤリハットや障害に対して、きっちりと再発防止策の実施を行う
  • 「サービス」を運営する。プログラミングやサーバ保守はパーツであり、あくまで全エンジニアが「サービス」に資する判断や取り組みをする
  • 緊急時でもすぐに対応できる、わかりやすいプログラムを書く

 このような工夫を重ねることで、サービスの可用性を高められると考えられます。
当たり前のことかも知れませんが、その当たり前のことがなかなか難しく、後回しになってしまうかもしれません。
常に初心を忘れず、社会やお客様の信頼に応えられるサービスを維持できるよう注意していきたいものです。

以上、みなさんの参考になれば幸いです。

記事を書いた人
萩田 峰旭
エンジニア 萩田 峰旭
CTO・創業期メンバー。
20年のSaaS開発の中で、複数社のテックリード、国内最大級予約システムの構築などを経験。
2016年にGMO医療予約技術研究所に創業期メンバーとしてCTOジョイン。
趣味は読書と整体通い。
GMO医療予約技術研究所は
一緒に働く仲間を募集しています