CodeZine(コードジン)

特集ページ一覧

トラブルこそ成長の機会――「手のかからない」インフラを目指してオンプレからクラウドに移行した60日間の奮闘【デブサミ2020】

【13-D-2】ぼくらの六十日間戦争 ~オンプレからクラウドへの移行~

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/03/23 12:00

 自動車アフターマーケットの企業を中心に、多彩なシステムを提供する株式会社ブロードリーフ。同社ではこれまでオンプレミスで運用してきたソリューションインフラ「.NSシリーズ」を、パブリッククラウド(AWS)に全面移行した。約2万5000社が利用中の大規模オンラインサービスを、止めることなく移行するチャレンジだ。さまざまな課題やトラブルが発生したが、同社のインフラ/アプリケーション開発の両チームが一丸となり、みごとに60日間の長い工程を乗り越えることができたという。本番移行の直後に起こった重大なトラブルとその原因追求、そして克服まで、同社の技術チームがどのように取り組んでいったのか。さらに今回の長い「闘い」を通じて得られた知見について、プロジェクトの取りまとめにあたった左近充裕樹氏が紹介した。

自動化・省力化を目標に、既存のオンプレ版インフラをAWSに移行

株式会社ブロードリーフ 開発本部 システムサポート部 ネットワーク課 左近充裕樹氏
株式会社ブロードリーフ 開発本部 システムサポート部 ネットワーク課 左近充裕樹氏

 現在ブロードリーフでは、大きく2つのBtoB向けサービス・インフラを提供している。Google Cloud Platform(GCP)上で新たに提供が開始されたクラウドネイティブのプロダクト「Maintenance.c」と、今回の移行の対象となった「ブロードリーフ.NSシリーズ」だ。

 前者は、最新のクラウドインフラにふさわしくKubernetes を使用。スケールアウト可能なデータベースを提供しており、Linux ベースで動く。これに対して既存の「ブロードリーフ.NSシリーズ」は、VM・物理サーバーを使用したオンプレミスの構成で、データベースにはRDB を採用。OSはWindowsといった仕様だ。

 左近充氏は、「今後は順次『Maintenance.c』に、お客さまやデータを移行させていくことになります。そこにエネルギーを集中するためには、既存の『.NSシリーズ』をできるだけ手のかからないインフラにリニューアルする必要がありました。そこで、Amazon Web Services(AWS)への全面的な移行を決めたのです」とねらいを語る。

 早速同社では、パブリッククラウド移行の目的=「手のかからないインフラの実現」に向けて以下の6つの獲得目標を掲げた。

  1. ハードウェア管理/保守期限からの脱却
  2. OS/ミドルウェアの最新化
  3. Infrastructure as Codeによる自動化/属人化の排除
  4. バックアップ・リストア、クラスタ維持などの運用コスト削減
  5. 拡張性の向上
  6. TCO(Total Cost of Ownership)の削減

 これらは新しいインフラの特徴であると同時に、オンプレミス時代のさまざまな課題を解決するカギでもあった。

 移行先にAWSを選択した理由を左近充氏は、「以前、別件でサーバー移行の経験がありノウハウを持っていること。加えて、何より低コストで多くのマネージドサービスが用意されていること」だったと語る。また移行後のインフラの必須要件としては、「Infrastructure as Codeで管理する」「オートスケーリングを使用する」「マネージドサービス(Amazon RDS)を使用する」なども挙げられた。

 「サーバーが落ちた時に、自動で復旧できる。またデータベース運用におけるパッチ適用やバックアップ、フェールオーバー、ストレージ拡張など、あらゆる面で『手のかからない』インフラ作りを考えました」(左近充氏)

「手のかからない」インフラを目指す上で必須とされる移行の要件
「手のかからない」インフラを目指す上で必須とされる移行の要件

 移行するデータ規模は、ファイルサーバーが約1.5TB=1500万ファイル以上。データベース(Microsoft SQL Server)は複数で構成されており、合計で5TB以上に及ぶ。だが、この規模が当初は移行のネックになった。実際の移行シミュレーションを行ってみた結果、1TBを転送するのに40時間かかることがわかったのだ。一方「.NSシリーズ」はBtoBサービスであり、今回の移行作業も昼間のユーザーの業務にインパクトを与えないよう、原則として夜間にのみ行うことが義務づけられていた。

 「そこで、大規模なデータベースについてはデータベースミラーリングを利用し、小規模なものはフルバック&リストア。そしてファイルは毎日、ファイルコピーソフトの『FastCopy』で同期する仕組みを考えて、制限時間内に収めるのに成功しました」(左近充氏)

「トラブルは祭り」と思って、進んで参加し成長のチャンスをつかもう

 本番の移行作業は、アプリ開発とインフラの2チームが合同で行った。このため移行前の各種検証作業から本番移行まで、各プロセスでスムーズに共同作業を行うための工夫が凝らされた。そうした具体的な例のひとつが、「VMデプロイ パイプライン」だ。これは同社がソース管理に使っているGitLabを介してAWSにモジュールを配信する仕組みだ。これを使うことによって、デプロイ作業が標準化できたと左近充氏は言う。

 「当社は開発チームが札幌・東京・福岡の各拠点にあり、これまでは作業手順なども統一されていませんでした。それを『VMデプロイ パイプライン』経由で行うことにより、どの拠点からでも、誰でも確実にデプロイできるようになり、属人化の排除が実現したのです」(左近充氏)

「VMデプロイ パイプライン」を構築してデプロイ作業の標準化を実現
「VMデプロイ パイプライン」を構築してデプロイ作業の標準化を実現

 最大の山場である本番移行は、アクセス量がふだんの5分の1程度に減る、5月の大型連休中に行われた。作業を2グループに分け、5連休の初日2日に1日1グループずつ移行を実施。5日目まで挙動を見守り、連休明けから通常の運用に戻すスケジュールだ。

 リハーサルを入念に繰り返したかいあって移行作業はスムーズに進み、早くも3日目には全員が「勝利を確信していた」。ところが4日目、突如問題が発生する。データベース(Amazon RDS)のCPU使用率が60%を超えていることがわかったのだ。

 「Traceから特定のクエリでCPU使用率が上がっていることをつきとめて、いったんはRDSのスケールアップで13%程度まで抑え込んだのですが、6日目、再び使用率がどんどん上がってユーザーから繋がりづらいという問い合わせを多くいただきました」(左近充氏)

 再度詳しく調査を行い、特定の実行プランの異常がCPU使用率の高いクエリの原因であることが判明。いったんは実行プランを過去のものに戻して事なきを得たが、クエリストアを用いての対応だけでは抑えきれなくなる。CPU使用率急上昇の「第2波」がやってきたのだ。

 「調べてみると、CPU使用率を上げてしまう特殊なクエリが複数存在していました。ここから社内の有識者の意見も聞きながら、インフラ/アプリ開発チーム全員が『データベース健全化作戦』の約2か月にわたる深夜作業に突入していったのです」(左近充氏)

 主な作業としては、(1)統計情報の更新(2)断片化の解消(3)実行プランの固定化が行われた。なお(3)についてはQiita「SQL Server で使用する実行プランを固定化する」に詳しく掲載されている。

 昼夜逆転の状態で作業を続けること約2か月、全員の渾身の努力のかいあって作業はみごと完了。CPU使用率も30%程度に抑え込むことができたという。今回の一連の対応を通して得た知識や経験として、左近充氏は以下の3つを挙げる。

(1)データベースは移行前に身を清めておく必要がある

 日常的にインデックスの断片化をチェックして、必要なら再構成しておく。

(2)あらゆるパターンのクエリを移行前に試す必要がある

 今回は特殊なクエリで発生した障害だが、日頃からあらゆるパターンを試しておく。

(3)他チームとの協働を通じて専門外の知識を学びとる

 アプリ開発チームとインフラチームが、互いに足りないことを学び、知識やノウハウを提供し合えた。また長期の共同作業を通じて、お互いに仲良くなれた。

 これらの経験とノウハウをもとに、第2弾の移行=残りのサーバーの移行作業では特に大きな問題もなく、スムーズに完了できたという。

 最後にまとめとして左近充氏は、今回の移行プロジェクトでは、まさに今回のデブサミのテーマでもある「ともにつくる」体験ができたと明かし、そうしたマインドを得るために必要な3つのポイントを挙げる。

  1. 機会は平等ではない=成長する機会は平等には訪れない。
  2. 大事なことは積極性=成長する機会を得るには、やはり積極性が必要。
  3. 一歩踏み出す勇気=トラブルが発生していたら、進んで手を貸そう。

 自分から進んで機会を見つけていかないと、なかなか成長するのは難しい。左近充氏自身も、トラブルが起きているチームを見つけると積極的に声をかけに行くという。

 「トラブル対応は『祭り』だと思って自分から踏み込んでいき、いろいろなチームで貢献すれば、社内でのプレゼンスもおのずと上がっていきます。皆さんもぜひ積極的にトラブルを体験して経験値を増やし、成長につなげていけるよう願っています」と、左近充氏は力強く会場にエールを送り、セッションを終えた。

お問い合わせ

 株式会社ブロードリーフ

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5