ブロックチェーンとのバックエンド連携
『cocone TECH TALK』はココネの現場エンジニアによるライトニングトークイベントです。
各エンジニアが担当するプロジェクトを通じて学んだ技術ネタを整理し、アウトプットをする場です。
6回目を迎えた今回は、サーバ(バックエンド)に特化したテーマを3つご用意。
- リアルタイム対戦 x バックエンドアーキテクチャ
- ココネグループのブロックチェーン「MOOI」との連携開発
- Kotlin バックエンドアーキテクチャ of アバターサービス
発表者は、自社で運営するweb3サービス(2022年冬リリース)の開発メンバー。
初めての取り組みに四苦八苦しながら開発し、リリースを迎えて気づいたことや苦労したことなどをお話ししました。
※ここでは技術面の詳しい紹介は割愛します。
当社テックブログ「cocone engineering」で公開中の関連記事リンクもつけておりますので、ぜひそちらも合わせてご覧ください。
1.リアルタイム対戦 x バックエンドアーキテクチャ
どのような技術を用いて『JANKEN』での「リアルタイム対戦」を実現したか、採用した技術や苦労したポイントについてご紹介します。
※『JANKEN』についての記事はこちら
採用した通信技術
初期に採用したのはgRPC Bidirectional Streaming RPC。
この時点ではゲームシステムが確定していなかったため、無難に双方向通信、かつ他のAPIでgRPCを利用していたため選択しました。
しかし開発が進むにつれて開発コストが増加!
コードやテストの複雑化、クライアント/サーバ間の取り決めが多いなど、問題点が顕在化します。
試行錯誤し最終的にはgRPC Unary RPC + Server Streaming RPCで着地しました。
基本的にはUnary RPCを利用するため、フローがシンプルになり、いつも通りの実装やテスト手法を用いることができます。
苦労したポイントは負荷対策とPubSub
開発を進めていく中で、苦労したポイントは下記の4つでした。
- 再接続時の復帰処理
- 細かいエッジケース対応
- 負荷対策
- PubSubに悩まされる
細かなエッジケース対応の仕組み作りについては、こちらの記事でもご紹介しています。
参考記事:『マルチプレイ実装をBOTでテストした話』
まとめ
- ゲームデザインにあった技術選定・設計が重要
- 表面上動くものはすぐに作れる時代だが、その先を考えておく(例えば「バイナリが改造されたら?」「このタイミングで切断されたら?」など)
- どのようにテストを行うか、初期段階で考えておく
2.ココネグループのブロックチェーン「MOOI」との連携開発
自社ブロックチェーン基盤と連携する事例をご紹介します。
基盤側の話や連携方法の詳細、通信仕様、セキュリティ担保に関わる内容は範囲外としています。「web3事業に関わることになった1サーバエンジニア」の解釈としてご紹介します。
自社ブロックチェーン基盤「MOOI Network」とは
「MOOI Network」はココネグループのPOST VOYAGERが開発したブロックチェーン基盤。ココネが展開するメタバースサービスは、全てこの基盤を使用。
※「MOOI Network」について
ブロックチェーン連携をするとはどういうことなのか?
デジタルアイテムをNFTとして所有することができ、データの破壊や改ざんを技術的に守ることができます。
また、サービスでNFTを発行(Mint)し、マーケットプレイスで取引したり、MOOI Networkで発行している暗号資産「MOOI」と交換可能なトークンを発行することも可能です。
▲MOOI Networkの公式NFTマーケットプレイス『Jellyme』
サーバサイドエンジニアとしての外部連携開発経験が生かせる
パブリックチェーンとの連携と比較すると、以下のような要素は良い特徴と言えると思います。
- 質問先が自社グループ内にあり、スピーディーに対応できる
- Walletを含めて自社で保有しており、機能開発の要望も出しやすい
- 「自社グループのブロックチェーン」という楽しさ
そしてブロックチェーンと連携する対象はサービス内の"データ"となりますので、その連携においてはサーバサイドエンジニアの活躍する領域となります。例えば決済対応のような外部連携と似たもの、と考えても差支えはありません。
ブロックチェーン周辺の知識は求められますが、従来の外部連携開発経験を生かすことができます。
3.Kotlin バックエンドアーキテクチャ of アバターサービス
昨年12月にリリースした『ClawKiss』は「Dress&Earn」をうたったアバターサービスで、ブロックチェーンネットワーク「MOOI」を使ったweb3サービスです。
※『ClawKiss』について
ココネでは、バックエンドの言語はGoかKotlinを多く使用しています。
クライアントはUnityで、通信をgRPCで行い、ビルドはGradle 7.4.xを使用しています。
初のgRPCを使った環境構築
ALBのヘルスチェックが通らないという問題が発生し、デプロイしてもヘルスチェックのログすら記録されない状態に。
インフラチームと話し合い、tcpdumpを取ってみたところ解決の糸口が見え、HTTP2を許可することで解決することができました。
参考記事:Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと
まとめ
- Kotlin on Spring Bootは良い選択
- アバターサービスにおいても一般的なWebサービスと同じ技術を使って構築している
web3への挑戦
トーク後にCTOの髙山も参加し、質疑応答が行われました。
「新サービスの開発前からブロックチェーン・web3に関する知識は持っていましたか?」という質問には、発表者の一人から「大まかな知識はありましたが、基盤技術が全く異なる世界だと思っていました。ですが、サーバエンジニアが関わるのはあくまで連携の部分なので、これまでの知見を生かすことができます。必要な知識は開発を進めながら習得しています。新しい知識を身に着けたい人には向いていると思います」とコメント。
web3サービスに携わったことがないという方でも、外部連携開発などの知見など様々な経験を活かしていただくことが可能です!
新しい分野にチャレンジしたい、という方にはピッタリの環境がココネには整っています!
イベントの最後に
当社のご紹介と、積極採用中のポジション“サーバエンジニア”についてご案内しました。
ココネではGolang、Java(SpringBoot)、Kotlin、MongoDB、MySQL、Redis、Elasticsearchなどの技術を用いてサービスを開発しています。また、エンジニア陣は、大容量データのハンドリングやトラフィックを処理するためには?という問題意識を常に持ち、高い技術力をもって日々業務にあたっています。
またグローバルな市場を視野に入れたサービスも開発中です!
ぜひこちらの記事もご覧ください