## 概要
MAU2千人のライブ配信サービスにおける配信基盤移行プロジェクトの開発。
## 使用技術
Kotlin, Ktor, TypeScript, Angular.js, Oracle, CloudFirestore, CloudFunctions, AWS Lambda, S3, CloudFront, MediaLive, Docker, Github Actions, CodeBuild
## チーム情報
6~8人チームの中でバックエンドを担当。
## ポジション
PL
## 担当業務
・既存の配信基盤やAPIサーバの技術調査
・クライアントワークによる仕様策定
・サーバーサイドKotlinによるAPI開発
・Angular.js+TypeScriptによるフロントエンド実装。RxjsとFireStoreによるリアルタイム通信の確立
・Firestore(NoSQL型データベース)のデータベース設計および適切なセキュリティルールとインデックスの設定、トランザクションによるデータ整合性の担保
・Cloud Functionsを使用した各種バックエンド関数や定期実行バッチ関数の作成
・Stripeを利用した決済機能の構築
・アプリ内課金のレシート検証
・コードレビュー
・メンバーの進捗確認、タスク割り振り
・ドキュメント作成
## 課題1
ー 某配信基盤の不調により映像の遅延や乱れが発生していた。ユーザーからのクレームが多く、優良顧客を失うとサービス収益が見込めなくなる懸念があった。しかし、基盤の提供企業のサポート対応が遅かったり、目に見える改善が見られないことを皮切りに、早急な配信基盤の移行を希望されていた。
## 課題2
ー ポイント購入, 投げ銭機能の実装にあたり、スケジュールに間に合わせる必要があったため、既存DBであるCloudFirestoreに決済まわりの重要なデータを保管することになった。「データの欠落や不整合は起こりうる」というFireStoreの思想と共存しなければいけなかった。
## 取り組み
ー 課題1に対して
インフラエンジニアと連携して、AWS MediaLive(配信サーバ)をAWS Lambdaで制御する構成を採用し、Lambda → CloudFormation → MediaLiveのリソース作成・削除までの一連の流れを確立。
配信サーバーの作成・削除・アーカイブ動画のストレージ保存等の処理は多くのメモリを占有するため、既存のAPIサーバと共存させることができなかった。そのため、Kotlin + Ktor で駆動するAPIサーバからLambdaを呼び出すことで、サーバーレスな配信基盤の制御を実現した。
ー 課題2に対して
Firebase Authentication未使用な環境下で、トランザクションによるデータ整合性の担保が厳しいように見えたが、排他制御の仕組みの理解や挙動検証を通して、なんとか解決方法を見つけ出した。
## 発揮したバリュー
技術的な壁の突破
・NoSQLデータベースであるFireStoreのクセのある設計手法やトランザクション、Kotlin+Ktor によるDDDアーキテクチャを採用したAPIサーバ開発に戸惑ったが短期間でキャッチアップ
・できるエンジニアを巻き込んで、設計レビューやコードレビューをして頂いた
・その結果、詰まないDB設計や決済等の重要データの整合性を取ることに成功
不確定な仕様の策定
・金銭振込の締日、ポイント償却の締切日等のサービス設計が決まっていなかった
・PMと相談しつつ、スケジュールを加味した提案をしながらクライアントと一緒に方向性を確定
・その結果、PMの負担を軽減 & 仕様未定による開発遅延を防止できた
人手不足の解消
・専門ではないが、フロントエンド業務も率先して担当。
・既存コードの調査及び各種書籍やネット情報をもとに素早くキャッチアップして即戦力となる
・その結果、フロントエンド領域において新メンバーのサポートが可能となった
絆を深める
・ベテランエンジニアを巻き込んで「使用技術の理解を深めよう」のMTGを不定期で開催
・慣れない技術を使用した開発に戸惑う自分や他のメンバーの技術理解が進んだ
・その結果、信頼関係が深まり、働く環境が良くなった