きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

clusterのserverについて(入門編)

これはcluster Advent Calendar 2019 17日目の記事です。

adventar.org

前日は ∞∞hk∞∞ひきこもり衆さん の「新しい世界で出会ったお姫様|hk|note」でした。

めちゃくちゃエモいですね。いい話...!

note.com

はじめに

自分のことを知らないひとが結構多いと思うので、簡単に自己紹介します。

2016年10月に入社してたので、クラスター社で働くようになってどうやら4年目に突入していました 😙

現在は、サーバーの開発をメインにやってます。 初期の方の5人とかだったときはUnityクライアント側とかも何でもやってたんですが、今は社員がたくさんいるのでサーバーの担当となってます 🎉🎉🎉

今回は、clusterのサーバーサイドの全体構成についてざっくりとした説明と、clusterでは実際どういう通信が行われているのかをいくつかピックアップして紹介していきたいと思います。

全体構成

f:id:kyokomi:20191216204203p:plain
ざっくりとした全体構成

  • MQTTサーバー: MQTTというプロトコルでpub/subを行いリアルタイムの通信で使うサーバー(位置情報や音声、体の身ぶり手ぶりなどの同期)
  • APIサーバー: ユーザーの作成、イベントの作成、イベントの入室記録などなど
  • Webサイト: ブラウザー上で動いてる部分(ログイン、チケット購入、入室までの流れなどなど)
  • Unityクライアント: 入室後のVR空間内で操作するクライアントアプリ(VR/Desktop版)
  • Stripe: 決済代行の外部サービス (クレジットカード情報などを安全に扱う)
  • Firebase Authentication: さまざまなプロバイダー(Twitter/Facebook/Googleなど)を使用した認証を行うことができ、ユーザー ID を識別できるようにする外部サービス

ログイン

f:id:kyokomi:20191216204419p:plain
ログインのフロー

上記の図のような流れで、TwitterFacebookなどの認証でclusterにログインする部分でFirebase Authenticationを使ってます。

Firebase Authenticationを使うことによって パスワード電話番号、一般的なフェデレーション ID プロバイダ(GoogleFacebookTwitter) などを使用した認証を行うことができます。

そのため将来的には他のプロバイダー追加やアカウントの移行とかが簡単にできるはずなので、乞うご期待...!という感じです。

firebase.google.com

チケット決済

f:id:kyokomi:20191216205550p:plain
カード登録・チケット購入のフロー

Webブラウザ ーで入力したクレジットカード情報は、Stripeに送信してStripe側で生成されたトークンをclusterのサーバーに送ってもらっています。

このトークンからcluster社がクレジットカード情報を参照したり、トークンを他ユーザーが推測したりすることができないようになっているため、ユーザーの皆様は安全にクレジットカード決済を行うことができるようになっています。

stripe.com

ルーム内でのリアルタイム通信

音声/位置/3点・6点トラッキング情報など送信

f:id:kyokomi:20191216210434p:plain
MQTTサーバーと直接やりとりする系

音声や、位置情報、3点・6点トラッキングによる体の向きや身ぶり手ぶりの情報はAPIサーバーを経由せず、直接MQTTサーバーに送信しています。

これが、いわゆるMO体験な部分を実現しているリアルタイム通信です。

コメント送信

f:id:kyokomi:20191216211537p:plain
APIサーバーを経由してMQTTサーバーに送信する系

コメントの送信は、1回サーバーを経由して送信するパターンです。

こちらも音声や位置情報のように直接MQTTサーバーに送信しちゃってもいいんですが、後から入室した人でも過去のコメントが読めるようにすることなど考えると、データベースに保存する必要があるためAPIサーバーを経由しています。

一定周期ごとに送信

f:id:kyokomi:20191217001407p:plain
一定周期にpublishする系

あとは、一定周期で実行され今の部屋の状態をまとめて計算して送信するバッチのような処理があります。

誰がいま入室していてどういうアバターの見た目で、誰がいまスタッフなのか?誰がいまゲストなのか?など、さまざまな情報を送信しています。

おわり

サーバー側ってなんか大変そうだな〜と思っていた人も、何をやってるか全然わからない〜と思っていた人も、興味を持っていただけたのであれば幸いです 😌

明日は、よしおか こうさん の「clusterデフォルトアバターのデザイン話」です。 アバターのデザインは、たくさんの歴史があるので楽しみです。