Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ご清聴ありがとうございました このあとの懇親会もよろしくお ねがいします