Inside of LOVOT

GROOVE X 技術ブログ

LOVOT を支えるクラウドサービス

この記事は、Groove Xアドベントカレンダー2022 3日目の記事です。

こんばんは、GROOVE Xの junya です。
今回は LOVOT を支えるクラウドサービスについてご紹介します。

クラウドサービスの役割

生き物らしく振る舞えるよう、LOVOTの行動に関わる処理(画像認識・音声認識・意思決定など)はすべてLOVOTの内部で動いていて、実はLOVOT はクラウドが無くても動作するのですが、LOVOT をインターネットに繋ぐと、

  • スマホアプリとの連携(一部操作は Bluetooth でも可能)
  • バックアップ
  • 機体の診断
  • アップデート

といったことが出来るようになります。

クラウドのシステム構成

サービスのクラウド側の構成は以下の通りです。

GCPKubernetes クラスタ (GKE) 上に Go で書かれた十数個のアプリケーションがあり、「デバイス」「スマホアプリ」「オペレーター」「外部システム」の4種類のクライアント向けに API を提供しています。

サービス・クライアント間の通信

Kubernetes クラスタ上のサービス間は gRPC で通信し、外部のクライアントに対しては、grpc-gateway を用いて gRPC を REST に変換して API を提供しています。protobuf で API を定義することで、型の恩恵を受けられて開発しやすいです。

その他に、 Cloud Pub/Sub によってイベントを非同期で連携したり、機体とクラウドの間は MQTT で常時接続しています。

クライアント認証

スマホアプリや管理画面は Firebase で認証し、機体は秘密鍵をベースとした公開鍵認証で認証しています。Cloud KMS を用いて認証局も自前で実装しました。

メトリクス情報

機体のメトリクス情報は VictoriaMetrics に蓄積し、ハードウェアの診断や故障予測、サービスの改善に活かしています。

当初は Prometheus を利用していたのですが、スケーラビリティの問題から Victoria Metrics に移行しました。 なお、メトリクス情報のアップロードはユーザ設定でオプトアウト可能で、個人情報にあたる情報は収集していません。

開発プロセス

コードは github で管理し、CircleCI のパイプラインでテストやデプロイのパイプラインを組んでます。 master にマージすると、テストをしてから staging 環境にサービスがデプロイされ、社内の LOVOT やアプリから使われるようになります。 それを週1回くらいのペースで、本番環境にもデプロイしています。

なお、オーナーさん向けのスマホアプリを別にすると、クライアントのフロントエンドは主に React で実装し、App Engine にデプロイしています。

クラウドサービスで利用している技術スタック

まとめると、クラウドで利用している技術スタックはこんな感じです。

  • マネージドサービス
    • GKE Autopilot, AppEngine, Cloud Functions, Cloud Run, Pub/Sub, Cloud Storage, Datastore, Firestore, Spanner, IAP, Cloud Endpoints など
  • 言語
  • 通信
    • gRPC, Protocol Buffer, grpc-gateway, PKI (公開鍵認証基盤), Firebase Authentication, JWT
  • 開発ツール

昨秋に期間限定カフェPARK+(東京 渋谷)で行われたハロウィンオーナーイベント

ロボット開発と言うと、馴染みがない方も多いかと思いますが、クラウド開発はモダンなアーキテクチャを踏襲しているつもりです。
絶賛仲間を募集中なので、ご興味ある方は是非、採用ページも覗いてみて下さい!

recruit.jobcan.jp