大規模障害を乗り越え、Kubernetesを用いたマイクロサービスへと刷新―ナレッジスイート

※本記事は2020年11月にインタビューを実施し、公開された内容です。2022年10月時点の役職に更新しています。

SFA(営業支援)・CRM(顧客管理)とグループウェアが統合したSaaS型ビジネスアプリケーション「Knowledge Suite(ナレッジスイート)」やオンライン商談ツール「VCRM(ブイシーアルエム)」、CRMモバイルクラウドサービス「GEOCRM(ジオシーアールエム)」など、数多くのtoBプロダクトを開発・提供するナレッジスイート株式会社。

かつて同社では、ファイルストレージのトラブルに起因する大規模なシステム障害が発生しました。その経験を通じてシステムが抱える課題を痛感し、アーキテクチャ改善のプロジェクトを牽引したのが取締役執行役員 プロダクト開発本部長の雄川賢一さん。このアーキテクチャ改善ではKubernetesをはじめとした最新技術を有効活用しました。

プロジェクトにはFLEXYを経由してインフラエンジニア1名とフロントエンドエンジニア1名が参画し、開発生産性や品質の向上に大きく寄与しました。本インタビューではFLEXY部マネジャーの岡田も交え、発生した障害やそれをふまえたアーキテクチャ改善の詳細、FLEXY経由で参画したエンジニアの活躍ぶりなどをお伺いしました。

ナレッジスイート株式会社 取締役執行役員 プロダクト開発本部長 雄川賢一さん

ある日、突如起きた大規模障害

―アーキテクチャ改善のプロジェクトではKubernetesを活用されたそうですが、雄川さんは当社が開催しているCTO meetup(*)に参加されたことが、この技術を知ったきっかけだったとか

*CTO meetup
最新技術からエンジニアの組織づくりまで幅広いテーマに対して、各分野の有識者を招きディスカッションを行う技術の発展・推進を目的としたコミュニティ。

雄川賢一さん(以下、雄川):
CTO meetupには、最新技術の知見を得るために2019年3月から参加していました。Kubernetesを知ったのは2019年4月初旬のCTO meetupで、その回のテーマがKubernetesだったのです。当時はコンテナオーケストレーションという概念を知っても、自社がこうした技術を導入するのは先の話だと思っていました。ですが、ある出来事が発生したため自社で使用しているアーキテクチャを早急に見直す必要性に迫られました。

―ある出来事、といいますと?

雄川:
2019年4月中旬に、当社で使用しているファイルストレージで障害が発生しました。クラスターファイルシステムを組んでいたのですが、クラスター間の情報を同期する仕組みがうまく動かなくなってしまったのです。
そのシステムでは、データの整合性を考慮してデータベースへの登録・更新とファイルストレージへの登録・更新を1つのトランザクションで扱っていました。正しく作られていますが、この方式ですと、ファイルストレージに障害が起きると他の機能も同時に動かなくなります。ファイルストレージの局所的な障害がシステム全体に波及して、全ての機能が停止してしまいました。

―なんと……。

雄川:
運用メンバーが懸命な復旧作業を行ったものの、サービスを数日ほど提供できない状況に陥りました。当然ながら、営業部門やサポート部門に問い合わせが殺到し解約が発生。事業への影響も大きく、2019年4月を含む四半期は営業利益がかなり落ち込みました。
さらに、働いているメンバーへの影響も大きかったです。復旧作業を続けることでエンジニアは激しく疲弊し、他の業務計画も中断せざるをえませんでした。営業スタッフやサポートスタッフにも厳しいご指摘が相次ぎ、みな精神的に疲弊。社内の雰囲気も悪くなり、不穏な空気に包まれていました。

サービスを取り巻く問題に対して、対応策を検討

―危機的な状況になっていたのですね。

雄川:
対応にあたったメンバーたちは、トラブルに対して誠心誠意対応してくれました。そんなメンバーたちに2度とこんな思いをさせるわけにはいきません。当社の経営陣一同と話し合い、自社のサービスを取り巻く問題への対応策を検討することになったのです。

―どのような点を改善することになったのでしょうか?

雄川:
障害発生時の影響範囲局所化ができていないことや、運用コストが大きいため改善・機能追加といった開発に割くリソースを増やせないことなど、システムにおけるさまざまな課題がありました。これらの前提をふまえ、アーキテクチャを抜本的に改善して適切な技術を導入する方針になったのです。それにあたり自社のアーキテクチャ改善に関連のありそうな要素技術を調べたところ、以下のようなキーワードが挙がってきました。

  • クラウドネイティブ(Docker・Kubernetesの導入など)
  • マイクロサービス化
  • DX(デジタルトランスフォーメーション)
  • ドメイン駆動設計
  • SPA
  • DevOps(CI/CDの導入など)

―ここで、かつてCTO meetupで知ったKubernetesに結びつくわけですね。

雄川:
私たちの求める技術要件にKubernetesがマッチしていると感じました。かつ、マイクロサービス化してサービス間を疎結合にすることで障害の影響を局所化できるのではないか、独立したサービスを運用することで作業をシンプルにできるのではないかと考えたのです。岡田さんにはこのくらいの時期から、優秀なエンジニアを探してほしいと声をかけました。

岡田:
とてもハイスキルなエンジニアをご要望されていましたよね。

雄川:
新しいアーキテクチャを実現するには、どうしても腕のいいエンジニアが必要でしたから。とはいえ、優秀なエンジニアに面接に来ていただいても、自分たちが最新技術を正しく理解できていなければ適切に評価できません。そこで、最新技術の特性を理解し、有用性を検証するための試みもこの時期に始めました。具体的には以下のような取り組みをしています。

これら一連の調査を数か月ほど行ったことで、どのようなエンジニアが必要なのかが具体的にわかってきました。その時点で再度、岡田さんへの相談をさせていただきましたね。

右側:ナレッジスイート株式会社 取締役執行役員 プロダクト開発本部長 雄川賢一さん
左側:CTO meetupを開催する株式会社サーキュレーション FLEXY部 マネジャー 岡田一喜さん

「VCRM」のアーキテクチャ改善がスタート

―その後、実際のアーキテクチャ改善に着手したのはいつ頃ですか?

雄川:
2020年6月中旬に、当社のWeb商談アプリケーション「VCRM」をゼロからスクラッチで再開発するプロジェクトが発足しました。これは他社から譲渡を受けてしばらく当社で運用していたアプリケーションなのですが、システムのつくりがあまり良くありませんでした。技術的負債を抱えており、機能改修をする際に多大な工数がかかってしまう状態でした。
再開発プロジェクトでは技術的負債を解消して、機能改善に注力できる状況にすることを目的としました。そして実現の手段として、これまで検証を重ねて知見を蓄えてきたモダンなアーキテクチャを導入することを決めたのです。さらに諸々の事情があり、9月中旬にリリースという非常に短納期のプロジェクトとなりました。

―極めてタイトなスケジュールだったのですね。

雄川:
時間が限られていたため、要件定義のフェーズでは一気に要件定義書のたたき台を作り、関係者を集めて早急に要件を確定させました。各人の協力もあり、スピーディーに要件を決定できたのが幸いでしたね。基本設計では、画面イメージの設計や方式設計、アーキテクチャ設計などを実施していきました。

(方針設計の例)

  • 発言している人を判定し、画面中央に表示する方式
    → Web Audio APIを使ってFFT解析させて判定する検証及び設計

  • WebRTCで届いた映像・音声を結合する方式
    → MediaStream APIを使って複数の映像・音声を統合する検証及び設計

  • 番号採番による接続方式
  • 番号採番による接続方式とURLによる接続方式を両立させる方式
  • WebRTCへの接続を最適化する制御方式

  • 結合した映像・音声を録画する方式
    → Media Recorder APIを使って録画データを作成

  • 録画データをサーバへ送信し利用できる状態にする方式
    → 録画データの受信用APIに定期的に送信する。送信量とペースを考慮

また詳細設計については、今回はSPAの構成を採用したため、主にDB設計やサービスAPI設計などを実施しています。

GCP・Oracle CloudやKubernetesをフル活用

雄川:
そしてプロジェクトが進行し、新しい「VCRM」のアーキテクチャを下図のような構成で作り上げました。GCPの各種サービスをふんだんに活用しています。

―アーキテクチャの各コンポーネントではどのような言語やフレームワークを採用しているのでしょうか?

雄川:
図の下部にあるコンポーネントは全て、Spring Bootをベースに作成した独自フレームワークを用いて実装しています。かつ、Webのフロントエンド部分はReactを採用しました。

―どのような意図で独自フレームワークを作成されたのでしょうか?

雄川:
前述の技術調査を行った段階で、Spring Bootをベースにして実装する方針は決めていました。しかし、システムを長期にわたり運用していくと、どうしても特定ライブラリ・フレームワークのEOL(End of Life)の問題がついてまわります。つまり、Spring Bootに強く依存したプログラムにしてしまうと、別のフレームワークに乗り換えることが大変になってしまうと考えました。
その課題を解決するため、ルーティングやバリデーションなどSpringの機能を活用する部分と、ビジネスロジックとを完全に分離できるようなフレームワークを作成したのです。フレームワークを移行する場合には、Springの機能を用いている処理のみを実装し直せば、ロジック部分をそのまま資産として流用できるようにしました。かつ、クエリチューニングの必要性があったため、DBアクセスの部分は発行されるクエリをコントロールしやすいMyBatisを用いています。
また、フレームワークには内部辞書という仕組みを盛り込み、辞書にある名称だけを変数名として使えるように制御しています。改修があった際の影響範囲の特定が容易になり、運用効率を向上させることができるためです。

―アーキテクチャ構築における工夫はたくさんあると思いますが、いくつか教えてください

雄川:
このアーキテクチャにおいては、メインである商談の処理をOracle Cloud上に設置したWebRTCサーバーで担っています。Oracle Cloudを選定した理由は通信料金の最適化のためで、通信にかかるコストが他のクラウドベンダーよりも圧倒的に安価でした。それ以外の処理については、基本的に全てKubernetesを用いてアーキテクチャを構築しています。オートスケールや自動復旧の機能を活用することで、運用の負担を軽減することが目的です。
先ほどDevOpsというキーワードも述べましたが、その自動化も実現できています。GitLabにソースコードをコミットしてリポジトリに入ると、Cloud Buildが起動。Container Registryに格納されてからデプロイされる仕組みになっています。また、クラウドネイティブな基盤構築のために、クラウドエース株式会社が提供するGCPの構築支援サービスCloud Boosterを活用しました。タイトなスケジュールのなかアーキテクチャ構築するうえで本当に助けられましたね。
こうして、新しいアーキテクチャで構築したサービスは2020年9月14日にβ版としてリリース完了しました。まだ改修は続いていますが運用はかなり安定してきており、もうしばらくすれば正式版としてリリースされます。

スキルの高いエンジニアにとって挑みがいのある環境

―これらの一連のプロジェクトでは、FLEXY経由でインフラエンジニア1名とフロントエンドエンジニア1名が参画していたそうですね。それぞれ、どのような活躍をされたのでしょうか?

岡田:
ご紹介したインフラエンジニアの方は、元々クラウドの会社にいたためクラウドネイティブで、得意領域はインフラ設計でした。

雄川:
GKEを主に見ていただいていました。弊社のメンバーとご協力いただいて、コンテナオーケストレーションの動作確認や、Ingressでの振り分けやIstioを使用した場合の振り分け方法等について検証いただきました。GKEでの構築経験をお持ちだったので助かりました。

―フロントエンドエンジニアについてはいかがでしょうか?

岡田:
この方は、フロントエンド技術に関する講座の講師や、フロントエンド領域の解説記事なども書かれているスペシャリストです。

雄川:
その技術力の高さに、メンバーはみな感動していました。優秀な方が参画してくれたことで、このプロジェクトにはフロントエンドに対する不安が一切なかったですね。タイトなスケジュールでしたが、絶対に彼がなんとかしてくれるという信頼感がありました。

岡田:
そう言っていただけると、ご紹介してよかったと実感します。

FLEXYからご紹介した方

インフラエンジニア

スキル要件 クラウドネイティブ(GCP)
契約期間 1年
稼働頻度 週2日
働き方 リモート

フロントエンドエンジニア

スキル要件 React
契約期間 1年
稼働頻度 当初、週3日(稼働空きが出たタイミングで週5日に移行)
働き方 リモート

―非常に意義のある参画でしたね。今回の事例以外にも、ナレッジスイートでは積極的な技術導入を進めているのでしょうか?

雄川:
R&D部の先進技術開発グループを去年に発足(*)させ、最新技術の検証やプロジェクトへの導入などを積極的に推進しています。扱っている技術の例としては以下が挙げられ、今後はさらに高い技術力を持った会社への変革をしていきたいと考えています。
*2020年10月から部に昇格。

  • WebRTCやWebSocketといったリアルタイム系の技術
  • クラウドネイティブ、マイクロサービスアーキテクチャなどのDX推進技術
  • GKEを用いたコンテナオーケストレーション技術
  • React、Vue.jsといったフロントエンド技術
  • センサーを搭載したデバイスを活用するIoT技術
  • SAMLやOpenID Connect、FIDOといった認証系の技術
  • DevOpsを自動化する技術
  • 脆弱性診断などセキュリティ関連技術
  • 機械学習技術

―最後に読者の方々に向けて、御社の開発現場で働く醍醐味を教えてください

雄川:
基本的に私たちは、社員と業務委託の方とで担当業務の区別はしません。プロジェクト内で何をするか、どのような技術を用いるかなどを方針決定する、いわゆる上流に近い工程も全てお任せする方針です。そうした環境に燃えるタイプの方にとっては、非常に挑みがいのある現場だと思います。

岡田:
裏を返せば、そういった業務を担えるくらいにレベルの高いエンジニアを求めている、ということですね。腕のある人にとっては自分のスキルをフルに発揮できる環境であり、さまざまなチャレンジができる現場なのは間違いないです。

企画/編集:FLEXYメディア(加来)
■関連記事/CTO meetupイベントレポート集
これまでに開催したCTO meetupの様子をレポートしています。


■関連記事:

FLEXYとはABOUT FLEXY

『FLEXY』はエンジニア・デザイナー・CTO・技術顧問を中心に
週1~5日のさまざまな案件を紹介するサービスです