Slide 1

Slide 1 text

Kotlin バックエンドアーキテク チャ of アバターサービス 2023/04 大友 秀輔

Slide 2

Slide 2 text

自己紹介 ● 大友秀輔 (@slumbers99) ● 2013年9月ココネ入社(子会社含 ○ メッセンジャー ■ Connect ■ TonTon ■ Potto ○ アバター ■ ポケコロ ● ココネッツ ■ ClawKiss ○ 音声ライブ配信 ■ 私を布教して

Slide 3

Slide 3 text

自己紹介 ● 大友秀輔 ● @slumbers99 ● 2013年9月ココネ入社 ○ メッセンジャー ■ Connect ■ TonTon ■ Potto ○ アバター ■ ポケコロ ● ココネッツ ■ ClawKiss ○ 音声ライブ配信 ■ 私を布教して

Slide 4

Slide 4 text

今日話すこと ● ClawKissとは ● ClawKissでのバックエンドアーキテクチャ ○ 使ったクラウドサービス ○ 技術構成 ○ 苦労したところ ● まとめ ● 質疑応答

Slide 5

Slide 5 text

今日話さないこと ● ChatGPT

Slide 6

Slide 6 text

ClawKissとは

Slide 7

Slide 7 text

ClawKiss とは ● 2022年12月20日リリース ● 可愛く遊んで、稼げる。Dress & Earn を謳ったココネがグローバル に挑戦するためのweb3サービス ● ブロックチェーンネットワーク 「MOOI」を利用 ○ MOOIはココネグループが運用 ● ココネが得意なCCPジャンルをブ ロックチェーンに載せたらどうなるか の意欲作

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

バックエンドアーキテクチャ

Slide 10

Slide 10 text

言語とフレームワーク ● Kotlin 1.6.x ○ JDK: Amazon Corretto 17 ● SpringBoot 2.6.x ○ grpc-spring-boot-starter 4.7.x ● gRPC ○ protoc ver.3 ● Gradle 7.4.x

Slide 11

Slide 11 text

DB系 - MongoDB Atlas (on aws) - ユーザーデータ - マスターデータ - ElastiCache - リモートキャッシュ - OpenSearch - 全文検索

Slide 12

Slide 12 text

認証とモバイルPUSH ● Firebase Authentication ○ メール / パスワード ○ Twitter ○ Facebook ○ Apple ○ Google ● Firebase Cloud Messaging ○ 友達申請 ○ 行動可能時間 ○ お知らせ ○ etc …

Slide 13

Slide 13 text

その他 ● aws ○ EC2 (ALB, EC2, AutoScaling Group …) ○ S3 ○ CodeDeploy ○ Lambda (Python 3.8) ○ API Gateway ○ CloudFront ○ Systems Manager (パラ メータストア) ● Simple Notification Service ● Jenkins ● DataDog ● Gitlab

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

環境 ● Alpha, Staging, Beta, Production 環境を用意 ○ Application Server 以外は2分割 ○ Alpha: 開発用、Staging: QA環境、Beta: リリース前確認 ○ 開発用クライアントからはそれぞれ接続できるようにしてる ○ S3などもそれぞれ別に用意 ● 各種DB接続先などパラメータストアで保持 ○ AutoScaling時に環境変数へコピー

Slide 16

Slide 16 text

デプロイ Merge RequestでKotestとDetektのチェックが 通ったものをリリースブランチにマージ kotlin proto gradle build pull

Slide 17

Slide 17 text

デプロイ ● リリースブランチに対してMR ○ Jenkinsに投げてKotestとDetekt実行 ■ Jenkinsプラグイン ■ PUSHとMR作成時に実行 ○ 結果をGitlabのMRのステータス更新 ■ Pipelines must succeed の設定にしている ● Jenkinsでデプロイジョブを実行 ○ リリースブランチをPULLしてビルド ○ CodeDeployを実行

Slide 18

Slide 18 text

苦労したところ

Slide 19

Slide 19 text

苦労したところ ● gRPC を使っての環境構築が初めてだった ○ ALBのヘルスチェックが通らない問題 ○ ローカルでのgRPC接続はできる ○ デプロイしてみてもヘルスチェックのログすら記録されない ○ ヘルスチェックは虚無にいったのか?? ○ tcpdumpとってみた -> 解決の糸口

Slide 20

Slide 20 text

苦労したところ ● HTTP2を許可するだけだった・・・ ○ 会社テックブログに載せました「Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと」 ○ https://engineering.cocone.io/2022/06/10/run_springboot_ and_grpc_with_alb/

Slide 21

Slide 21 text

苦労したところ ● protoファイルどこに置こうか問題 ○ protoは別リポジトリで管理 ○ submoduleにして参照していた ○ なんとなくうまく行っているがこれでいいかわからん ● 基本的にprotoリポジトリはブランチ一本化 ○ developブランチ(なんでもいいけど)に落ち着いた ● 構造体からパラメータ消すとそもそもビルドできなくなる ○ 消すときのルールは必要かも

Slide 22

Slide 22 text

苦労したこと その他特に困ったこともなく、比較的安定して運用できております。 バグは・・・・すいません。

Slide 23

Slide 23 text

まとめ ● ClawKissはAWSふんだんにつかわれている ● Kotlin on SpringBoot はいい選択肢だと思っている ● アバターサービスと銘打って入るがバックエンドとしては特に尖ったことは していない ● 当たり前のWEBサービスの技術が当たり前に構築されている ● ちょっと罠があったりもするが概ね安定運営

Slide 24

Slide 24 text

ご清聴ありがとうございました このあとの懇親会もよろしくお ねがいします