はじめに

こんにちは、CA.goの運営をしている岩村です。普段は、株式会社アプリボットでサーバーサイドの開発をしたり、GoのNext Expertsとしての活動をしています。

本記事では、2023年3月10日(金)に開催した「CA.go 〜ABEMAのGoを活用したFIFA ワールドカップ生中継の舞台裏〜」のレポートをお届けしていきます(以後、「FIFA ワールドカップ」は単に「W杯」と略します)。

これは「CA.go ABEMAのGoを活用したFIFA ワールドカップ生中継の舞台裏」のキービジュアルです。

 

CA.goについてご存じない方や、なんとなく聞き覚えのある方もいると思うので、少しだけお話させてください。

CA.goはもともと2017年ごろに、社内のGo活用事例を社外に発信することを目的として社外向けに勉強会を行っていたのですが、2018年ごろには一時的に活動を休止していました。

それが、社内のプロジェクトでのGo採用事例が増えてきた2021年に、「社内で培ったGoの知見を事業部を超えて共有する場を作りたい」と考えた有志が、以前とは異なった形で集まり、ひっそりと社内勉強会を開いていたのでした。

そうして次の勉強会の内容を構想していたタイミングが昨年末で、ちょうどW杯が開かれた時期と重なっていたため、W杯生中継を支えてくれたABEMAのエンジニアに登壇してもらったら面白い勉強会にできるんじゃないかと思い打診したところ、快く引き受けてくださり、テーマが決まりました。

そのテーマで今回も社内勉強会を開こうと思っていたのですが、一方で、2021, 2022年と定期的に社内勉強会を開いてきて、CA.goのメンバー内では「社内だけでなく、社外勉強会も今後行っていきたい」という声も上がってきていました。そこで、「W杯の裏側でGoがどのように活用されていたか興味のある社外のエンジニアも大勢いるだろう」と思い、技術人事や技術広報の方たちと協力して、今回、社外での勉強会を開催するに至りました。

それでは前置きが長くなってしまいましたが、当日の様子をレポートしていきます!

「ABEMA」のレコメンドへの大規模アクセスを支えるGo製サーバーの裏側

発表者: 江頭 宏亮

江頭 宏亮さんが「「ABEMA」のレコメンドへの大規模アクセスを支えるGo製サーバーの裏側」について発表を行いました。

ABEMAでは、利用するユーザーの属性や行動をもとにコンテンツを推薦するYatagarasu(ヤタガラス)というマイクロサービスを実装しています。このマイクロサービスは計算量の多い機械学習モデルによって実現されており、W杯のようなABEMAを利用するユーザーが特に急増する状況において、推薦リクエストが来るたびにYatagarasuにアクセスしていてはリクエストを捌けないことが事前の試算により分かっていました。そこで本発表では、その状況に備えて実装したいくつかの機構について話されていました。

1つは多段キャッシュの仕組みで、少量の計算結果を格納するインメモリキャッシュと、インメモリキャッシュでは格納しきれなかった計算結果を格納しておくRedisで実現されていました。また、同じ属性・行動のリクエストが同時に来た場合に備えて、singleflight packageを使って1回の計算で済ませる仕組みも導入されていました。

これらの工夫により、Yatagarasuへのアクセスは、何も備えていない時に比べて90%以上削減できたそうです。

コメント時のTwitter連携機能で動画がシェアされる際のGo製サーバー開発手法

発表者: 藤井 力哉

藤井 力哉さんが「コメント時のTwitter連携機能で動画がシェアされる際のGo製サーバー開発手法」について発表を行いました。

W杯生中継中にABEMAの数ある機能の中でも多く利用された、Tweet時に動画の切り抜きをシェアする機能について、どのように実現されているか解説されていました。

ABEMAのような動画ストリーミングサービスでは、動画を1つの巨大なファイルではなく、一定間隔で細かく分割した形式で保存しています。ただ、Tweet時には分割されたファイルではなく1つの動画ファイルにする必要があるので、ffmpegを使ってどのようにしてファイルを結合しているか紹介されていました。また、頻繁にシェアされる動画については、結合サーバーから動画ストレージに毎回問い合わせるのではなく、結合サーバー内にインメモリキャッシュとして保持しておくことで、高速化を行う工夫もしていました。

「ABEMA」の安定稼働を支えたOpenTelemetryの導入事例

発表者: 宮﨑 大芽

宮﨑 大芽さんが「「ABEMA」の安定稼働を支えたOpenTelemetryの導入事例」について発表を行いました。

ABEMAのバックエンドはマイクロサービス構成になっているのですが、今までは分散トレーシングの仕組みを導入していませんでした。ただ、今回のW杯に向けてサービス全体に対する負荷試験をする中で、より詳細な分析をする必要性が出てきたため、分散トレーシングを導入することになりました。

本発表では、Anthos Service Mesh導入済のGoogle Kubernetes Engine(GKE)上で動く既存のサービスに対して、OpenTelemetryを利用した分散トレーシングを導入する際に、どのような点に気を付けたら良いかや、トレースを途切れさせないようにするために苦労した点について話されていました。また、OpenTelemetryを活用してみて、実際にボトルネックとなっている箇所の目処を立てられた事例についても紹介されています。

おわりに

懇親会も多くの方が残ってくださり、発表同様盛り上がっていました。
懇親会のようす

GoとABEMAという業界でも注目が集まるテーマであったこともあり、おかげさまで、事前登録者数1200人超、当日のオフライン参加者数80人超、オンライン同時視聴者数最大400人超、と単体の技術・企業だけでは過去類を見ない規模の勉強会を開くことができました。

当日、オフライン・オンライン共々ご参加いただき、質問をたくさんしていただいたり、Twitterで実況していただいたり、一緒に勉強会を盛り上げていただいた皆さま、ありがとうございました!

CA.goでは、今後も社外勉強会を行っていこうと考えていますので、今回参加していただいた方も、都合が合わずに参加できなかった方も、次回ぜひご参加いただければと思います。

弊社のconnpassでは、CA.goはもちろん、その他のイベントについても告知していますので、メンバー登録がお済みでない方はぜひご登録お願いします!

2019年 株式会社サイバーエージェント 新卒入社。AI事業本部でCheckBacksと極予測AIの開発、CyberHuman Productionへの3DCG・画像処理関連の技術提供を行う。その後、2021年に株式会社アプリボットに異動し、新規プロジェクトにてサーバーサイドエンジニアとして従事している。