SREが果たした大きな役割
まずDMM TVのプロジェクトにおいてSREはどのような役割を担っていたんでしょうか?
菅野:ユーザー体験を向上させるインフラ環境を実現すること。ごく簡単に説明すると、これが我々のミッションです。もちろん開発段階ではインフラ設計、構築、運用なども行いましたが、単にサーバーの面倒を見るだけが仕事ではありません。
そもそもどういったインフラ構成だったら障害が起きにくいのか。もし障害が起こってしまった場合どのような構成ならすぐに復旧できるのか。今回のプロジェクトではそういった観点でバランスを見ながら全体の開発を調整していきました。
DMM TV はDMMの歴史のなかでも特に大きな開発。SREとしてはどのあたりが大変でしたか?
菅野:リリース後にどのくらいのユーザーが利用するのか未知数だったので、スケーラビリティの点は苦労しましたね。もともとDMMには「DMM動画(現在はDMM TVに統合)」というサービスがあったんですが、2.5次元などの大きなライブ配信があると同時視聴者が10万人を超えることがありました。当然、今回求められていたのもそういった大量のアクセスに耐えることができるシステムです。
そのあたりの事前調査や技術検証を丁寧に行ってくれたのが、ここにいる小林くんでした。
小林:DMM TVの立ち上げにおいてリリース日が迫る中、開発速度が求められていたため、動画事業部で既に導入実績のあったGoogle Cloudを採用することにしました。その上で多くのリクエストにも耐えうる拡張性と運用の容易性を実現するために、Google Kubernetes Engine(以下、GKE)を導入。これまでは大規模なライブ配信があった際、エンジニアが手作業でサーバーの数を増やす対応をしていましたが、GKEを導入したことでスケーリングが容易に行えるようになりました。
データベース周りで言うと、今回はCloud Spannerを採用しています。もともと「DMM動画」ではMySQLが使われており、DMM TVにおいても初期の段階ではCloud SQLを使う設計となっていました。しかし、Cloud SQLを採用するにはメンテナンスタイムを想定したインフラ設計や運用のコストなど様々な課題がありました。
Cloud Spannerを採用したことで、メンテナンスタイムを考慮しなくてもよくなり、複雑なインフラ設計をする必要がなくなりました。また、水平スケールの機能を持つため将来的に負荷が高くなった際にも柔軟に対応できることは非常に大きなメリットであると考えたんです。
山本:それこそ最初は高負荷の処理にはCloud Spannerを使って、それ以外はCloud SQLを使うといった話も出ていましたよね。でも、やっぱり小林さんの提案通り、Cloud Spannerに一本化して良かったと思います。実装を切り分けるのもなかなか大変ですからね。
菅野:チーム発足時にはGKEやCloud Spannerに強いエンジニアがいなかったこともあり、メンバーにナレッジがほとんどない状態でスタートしています。そんななかで自ら学習と技術検証を重ねながら知見を深め、実装まで行うことができました。
モダンな構成で効率的に進めたバックエンド開発
一方で、バックエンド側はどのように開発を進めていったのでしょうか?
山本:アーキテクチャの話をすると、今回はフロントエンドとのやり取りで生じる複雑性を吸収するため、バックエンドとフロントエンドのあいだにBackend For Frontend(以下、BFF)を設けて開発を行いました。バックエンド、BFFは共にGo言語で実装を統一しています。
バックエンドとBFFのやり取りにはgRPC、BFFとフロントエンドのやり取りにはGraphQLといった技術を採用しています。チーム内に知見を持っている人が少なかったのですが、新たなチャレンジとして、そこは1から勉強をしながら取り組んでいきました。結果的にはスキーマ駆動開発の環境を整えることもできましたし、そのおかげで一部開発の修正が生じた際もとてもスムーズに対応することができました。
菅野:Pub/Subを使った非同期処理のアーキテクチャも実現しているんですが、それも山本さんを始めとしたバックエンド側が頑張ってくれたからこそだと思っています。
山本:DMM TVはDMMのプラットフォーム基盤や配信基盤と連携してサービスを提供しており、レスポンスに時間が掛かるケースやリトライが必要なケースも多かったので非同期処理は不可欠でしたね。Pub/Subを使って、非同期で商品データの更新や視聴履歴への登録などをおこなうことで、ユーザー体験を損なわないサービスを実現できました。
SRE側もそうですが、バックエンド側も、より良い技術や考え方はどんどん取り入れるスタンス。今回はモダンな構成ということもあって、バックエンド側の開発はかなり効率的に進められたと思います。
DMMでエンジニアとして働くことの醍醐味
SREとバックエンド。それぞれDMMで働く醍醐味はどこにあると感じていますか?
菅野:無事にDMM TVのサービスはリリースされましたが、SREとしてはむしろこれからの取り組みこそが重要です。つまり、今後の成長フェーズにおいて、サービスの信頼性を高めるためやるべきことが山ほどある。1から作り上げていく経験もまだまだできるので、エンジニアにとってはすごく貴重なキャリアになると思います。
小林:DMMプレミアム会員はサービス開始後約4ヶ月で累計70万人を超えており、非常に勢いのあるサービスになっています。その中でもメインコンテンツといえるDMM TVには特に多くのアクセスがあり、そのインフラを支えているのが私たちSREです。
サービスを安定的に提供する取り組みとして、可用性の高いシステムアーキテクチャを考えたり、大規模なアクセスを想定した負荷試験を行い、その結果をもとにシステムチューニングやキャパシティプランニングをできるのがやりがいだと思います。現在、私たちのSREチームでは一緒に働いてくれる仲間を募集しています。インフラエンジニア出身の私の感覚からするとSREと聞くと経験がないと少しハードルを感じてしまうかもしれませんが、SREとしての経験の有無はあまり重要視していないので、インフラに関心があってサービスの改善に興味を持っていただけた方はぜひ採用の方にご応募いただけますと嬉しいです。
山本:DMM TVはサービスの規模が大きいですし、今後さらなる成長を実現させるための リソースもあります。ほかを見渡してみても、この規模の動画配信サービスの初期グロースに携わることができる機会は少ないんじゃないかなと思います。
そんな恵まれた環境のなかで、バックエンドとしてはユーザーに求められている新機能をどんどん開発していく予定です。DMM TVをより良くしていきたいというマインドをお持ちのバックエンドエンジニアの方々。ぜひお待ちしています。
付録
DMM TVのアーキテクチャはこのような形になっております。
DMM史に残る!「DMM TV」&「DMMプレミアム」開発秘話の連載はこちら
Google Cloud様に弊社で活躍するエンジニアが取材されました。Google Cloudを活用した狙いと成果について話していますので、ぜひご覧ください。DMM.com:これからのビジネスを担う動画配信サービスの提供と、データ分析基盤のモダナイズを Google Cloud で実施