SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2023 Summer セッションレポート(AD)

デプロイに45時間も! プロダクトの成長に伴うシステム肥大化と組織拡大にどう立ち向かうべきか?

【C-3】大規模クラウド録画プラットフォームのサービス成長に伴う技術負債解消と継続的改善

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

 カメラや映像処理技術の進歩により、ネットワークカメラは安全のためだけではなく、企業のDXにも活用されるようになってきている。クラウド録画型映像プラットフォーム「Safie(セーフィー)」の開発および運営を行うセーフィーでは、近年事業規模が急成長を遂げているところだ。Safieの構成技術から事業拡大で直面した課題と対応について、セーフィー 取締役 開発本部本部長兼CTO 森本数馬氏が解説する。

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

約20万台のカメラを稼働させるSafieの技術スタックとは

 クラウド録画型映像プラットフォーム「Safie」は、いつでもどこでも映像をセキュアに見られるということで現在急速に普及している。サービスの構成要素は主に、録画するためのカメラ(デバイス)、録画した映像を処理するクラウドプラットフォーム、録画した映像を閲覧するビューアーからなる。クラウド録画サービスにおけるシェアは拡大し続けており、国内シェアは56.4%で独走状態だ。

 セーフィーのプラットフォーム上におけるカメラ台数は約20万台にも及ぶ。しかし、いわゆる防犯・監視カメラとして稼働しているカメラ台数は国内外で見ると、数億台規模と予想される。まだまだ成長が見込まれる領域だ。

 現時点でセーフィーが提供している主要プロダクト(アプリケーション)を挙げてみよう。まず「Safie Viewer(セーフィー ビューアー)」はクラウドに録画された映像を閲覧するためのもの。「Safie Manager(セーフィー マネージャー)」はSafieカメラの管理ツールで、設置したカメラやユーザーアカウントを一括管理できる。

セーフィー株式会社 取締役 開発本部本部長兼CTO 森本数馬氏
セーフィー株式会社 取締役 開発本部本部長兼CTO 森本数馬氏

 また独自開発のカメラを搭載した機器もある。「Safie Pocket2(セーフィー ポケット ツー)」はLTE内蔵ウェアラブルカメラ。小型で通信機能付きなので工事現場などで作業者が身につけて録画することも可能だ。また「Safie Entrance2(セーフィー エントランス ツー)」は顔認証で施錠管理するためのソリューション。顔認証なので入退室がハンズフリーとなり、そのまま勤怠管理にも使える。「Safie One(セーフィー ワン)」はエッジ(カメラ)に画像認識AIを実装しており、店舗なら顧客の人数カウントや入退出カウントなどに使える。

 こうしたプロダクトを構成するための技術スタックをざっと見ていくと、フロントエンドにはAngularやVue.js、サーバーサイドは主にPython、WebフレームワークはTornadoからFastAPIになりつつあり、一部でGoやJavaを使う。モバイル(iOSやAndroid)ではSwiftやKotlin、エッジAIではOpenCVやPyTorch、インフラ(クラウド)運用は主にAWSのサービス、TerraformやAnsibleなどを用いて省力化を図っている。データ分析ではAmazon RedshiftやTableauを用いて顧客動向を分析して、営業やマーケティング、さらにはプロダクト開発にも活かしている。業務システムではSalesforceやZuoraも導入している。

技術スタック
使用されている技術スタックの幅は広い

 先述したように、現在Safieで稼働しているネットワークカメラは約20万台。これらのカメラ管理と録画を管理するサーバーは2000台以上、動画配信サーバーは数百台以上で負荷分散している。またデータベースはAmazon Auroraを用いてカメラ数万台単位でクラスタ化している。録画データの量は現在十数ペタバイトほどあり、Amazon S3に格納している。

 Safieにおけるストリーム制御は同社が独自に開発しており、カメラからアップロードされたデータはさまざまなデバイスやサービスに配信されている。Viewer向けにはWebRTCやHLS(HTTP Live Streaming)を用いたり、YouTubeのようなパブリッシングサイトにはRTMPを用いたり、他にも顔認証やデータ解析などのシステムと連携するためにデータをフィードしたりしている。

 同様に、AI画像解析基盤も独自開発している。こちらは同社だけではなく、開発パートナー向けにもプラットフォームを公開しており、Safie基盤上で駆動するAIモデルをAPIでデプロイするような仕組みも準備を進めている。

Safie汎用(はんよう)解析システム
Safieの汎用解析システムの概要

デプロイに45時間! 成長に伴うシステム肥大化にどう立ち向かう?

 ここからはメインテーマとなる事業の成長に伴う技術負債解消や継続的改善について見ていこう。今でこそ約20万台のカメラが稼働しているものの、2015年から4〜5年間は忍耐の時代だった。森本氏は「暗黒時代」と呼び、「カメラが売れず、エンジニアはほとんどいませんでした。そこですべての開発や保守運用をしていました」と振り返る。

 しかしその暗黒時代に蒔いた種が2019年ごろから開花しはじめた。根気強くプロダクトを増やし、パートナーを増やすことも続けたことにより、徐々に勢いが加速しはじめて、2021年の上場で急成長して現在に至る。

サービスの成長
サービスの成長過程

 急速に成長したため、いくつかの課題にも直面した。まずエンジニア数が急速に増加したことにより、新しいエンジニアが素早くキャッチアップする仕組みや、分担して効率良く開発する仕組みが必要となった。

 カメラ台数が増加し、システムが肥大化したことで、規模に合う耐久性も必要になった。現在は約20万台だが、将来を見越して100万台規模を想定したシステムを構築する必要があり、かつ運用保守と同時に新規開発も実行できる体制を整える必要がある。またパートナーや顧客層も増加・変化したことで、高いサービス品質を維持し、障害を最小限に抑え、迅速に対応できるようにする必要もあった。さらに業界ごとのソリューション提供にも取り組んでいく必要がある。

 これらの広範な課題をどのように解決したのだろうか。まずカメラ台数増加・システム肥大化については、データベースが大量のアクセスに耐えられないことや、障害発生時には影響範囲が広くなることが課題になっていた。そこで「Zone」で区切る分散管理システムを導入し、数万台のカメラごとにZoneを定義。負荷分散や障害の局所化を実現した。するとZoneで切り出せるようになったため、別システムとのハイブリッド環境を構築できるという副次的な効果も生まれた。

 もう1つ、システム肥大化に伴う課題として、接続品質向上のために独自の負荷分散やスケーリングを考慮する必要があった。サーバーは常に録画のための処理を行っているので、保守で止めるわけにはいかない。これについては、サーバーからカメラに再接続を指示したり、APIで手動スケールアウトさせたり、独自のデプロイ手法で乗り切ってきた。しかし台数が増えるにつれ、最終的にはデプロイに45時間もかかってしまうようになってしまった。そうなると「危ないから触るのをやめよう」と機能追加を忌避したくなるような状況に追い込まれた。

 そこでデプロイは周辺システムごと作り直し、CodeDeployによるCI/CDに移行した。EC2 Auto Scalingへの移行や、CodeDeployのスクリプトから独自の負荷分散を制御するなどした。この一連の仕組みによりデプロイは2〜3時間で完了するほど劇的に改善した。デプロイ頻度も1日に2.6回に高まった。

CodeDeployによるCI/CDに移行
CodeDeployによるCI/CDに移行の効果

 ビジネス成長に伴い、重要な顧客やパートナーも増えてきて、サービス品質を向上させる必要も出てきた。当初はサービス提供速度やコストを優先し、オープンソースのWebRTC SFUを採用していたものの、配信サーバーとは別の専用インスタンスが必要で、まれにCPUが上限に張り付き品質に影響が出るなどの課題があった。これを配信サーバーのリファクタリングを行い、WebRTC SFUを配信サーバーに取り込むことで管理面や配信品質が向上し、専用インスタンスが不要となったためコストダウンも実現した。

難しい組織のスケール、カギはエンジニアのキャリア再考

 こうして課題を克服してきたものの、森本氏には業界ごとのソリューションを開発する体制構築については後悔が残るという。幅広い業界に顧客が広がったため、森本氏は「業界ごとの課題解決策を開発するために、業界ごとに開発組織を編成しよう」と考えた。この時、実際には複数の組織を回せるほどの人員はいなかったものの、「後で採用頑張ればいいや」と楽観的に推し進めてしまい、結果的にエンジニアが疲弊して組織崩壊が起きてしまったという。「本当に甘かった。とても後悔しています」と森本氏は言う。組織体制はいったん元に戻した。

 ここでいったんSafieのシステムに目を向けてみよう。アプリケーションではフロントエンドとバックエンドで分かれているものの、バックエンドが巨大なモノリシックになっている。全体の把握が困難、責任範囲が不明確となり、開発効率や保守運用にも悪影響を及ぼしていた。そこで現在はシステム構造と組織構造を一致させるように模索しているところだ。

 同時にエンジニアのキャリアパスについても定義や整備を進めている。Safieのプラットフォームにはカメラ・顔認証デバイス・AI等による画像解析・動画など幅広い技術が盛り込まれていることから分かるように、それだけエンジニアも幅広く存在している。同社のエンジニアを職種で分けてみると、カメラの独自端末を開発するデバイスエンジニア、AIや画像処理エンジニア、プラットフォームを支えるサーバーサイドやインフラ・SREエンジニア、モバイル開発のiOS/Androidエンジニアやフロントエンドエンジニア、そして品質を担保するQAエンジニアや業務システムのエンジニアまでいる。

エンジニア職種の領域
Safieに携わるエンジニアはさまざまな領域にまたがる

 これをエンジニアの立場で考えると、同社にいれば1つの領域に留まることなく、幅広い領域またはレイヤーに挑戦するチャンスがあるということだ。1つの領域を極めていくのもありだし、他の領域にチャレンジするもあり、マネジメントを目指していくのもありだ。同社ではエンジニアの多彩なキャリアパスを定義し、用意しようとしている。

多様なキャリアパス
多様なキャリアパスを図にしたもの

 加えてエンジニアの成長支援として、エンジニアの職能ごとにオンボーディングコンテンツを整備したり、社内勉強会を開催することで他職能やフルスタックへのチャレンジを後押ししている。

 こうしたエンジニア向けの施策になると森本氏の声にも熱が入る。事業の成長に伴い、システムの機能追加や組織の再編成は必要になるものの「機能追加はやればなんとかできてしまうものです。しかし根本的なシステム、組織の改善、再構築を先読みして進めなければ、後々で痛い目を見てしまいます。これは身にしみています。しかしこうした課題を乗り越えた先に、真の成功があると信じています」と森本氏は力強く語った。

この記事は参考になりましたか?

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

提供:セーフィー株式会社

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18169 2023/09/29 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング