初めに
初めまして、学生エンジニアのマーシーです。普段はバックエンドエンジニアとしてGoなどで開発をしています。今回はCA.goに参加してきたのでその内容と感想を共有します。
CA.goとは
CA.go を知らない方に説明します。Connpassのイベントページにはこのように書かれていました。CA.goはサイバーエージェントグループ横断で Go に関する知見を共有し合う社内勉強会です。今回はその社外版として、先日行われた「FIFA ワールドカップ カタール 2022」を全64試合生中継をした新しい未来のテレビ「ABEMA(アベマ)」 のチームから Go 活用事例をご紹介します。この様に、社外の人でもCAのGoでの取り組みがわかる勉強会です。
イベント内容
イベントの内容としては、LTが3つと懇親会でした。LTは大変内容が濃いもので、懇親会もとても楽しかったです。
LT内容&感想
3つあったLTで自分が特に印象に残った部分を中心に紹介しようと思います。
LT1.「ABEMA」のレコメンドへの大規模アクセスを支えるGo製サーバーの裏側
ABEMAに限らず、最近の動画配信サービスはトップページにあなたへのおすすめという形でレコメンドされた動画が並ぶと思います。それらを、支えているのは基本的にはPythonの機械学習系サーバです。CAではFIFA ワールドカップ カタール 2022(以下W杯)配信に向けて多くの人がトップページにアクセスしても、このレコメンドシステムが落ちないようにする工夫をGoで行ったそうです。Goで作ったのはプロキシサーバで役割はoriginサーバへの負荷軽減を目的としてキャッシュをすることだそうです。オンメモリだけでなく、redisも用いることで90%〜95%originサーバへの負荷が低減されたそうです。キャッシュだけでなく、originへのアクセス制御も様々取られていて高負荷に耐えうる施策をたくさんしていたんだなと驚きました。
LT2. コメント時のTwitter連携機能で動画がシェアされる際のGo製サーバー開発手法
自分は知らなかったのですが、ABEMAの動画はTwitterにシェアするときに動画も一緒にシェアする機能があるそうです。これをW杯期間中の高負荷に耐えるために刷新した話が2個目のLTでした。正直自分は動画周りをGoでいじったことがないのでどれくらい重い処理か想像でしか話せませんが、かなり重たい処理をしているのだろうなというのは容易に想像がつきます。元々は、この部分をTweetしたい!となったらその部分を切り取ってTweetに載せていたらしいのですが、W杯用に刷新し、Requestとは連動せずに、動画をセクションごとに分割する処理を定期的に行い保存する方式をとったそうです。Requestが来たら分割していた動画を必要な分だけ結合して返すことで負荷軽減を行ったそうです。また、オンメモリで動画をキャッシュすることで更なる負荷軽減もしたそうです。1機能にこれだけの負荷軽減施策をしていたとは、、、。
LT3.「ABEMA」の安定稼働を支えたOpenTelemetryの導入事例
Goというよりはかなりインフラ寄りの話で、ボトルネックをいかに早く探し出すかということをモチベーションにやったそうです。OpenTelemetryを導入することでマイクロサービスなABEMAのシステムでもどこがボトルネックになっているのかをすぐに見つけ障害にならないように事前に修正をしておくということをしていたそうです。Goエンジニアとしてはこういうインフラ側の助けがないとなかなか重たい処理はどこなのか全てを把握して潰すことはできないので助かるだろうなと感じていました。また、レガシーコードとの戦いといったところも話されていてリリースから7年ほど経つABEMAのコード全体に影響を及ぼす今回の導入はかなり大変だっただろうなと勝手に想像してました。DevOpsという言葉が流行っている今、この話面白いなと思った人も多かったと思います。
最後に
Goを書く学生エンジニアとしてこんなにも勉強になる機会はなかなかない素晴らしい勉強会でした。また、W杯のABEMAの中継はW杯をどう配信したのかに注目が集まりがちですが、普段のABEMAのサービスでは考えられないトラフィックを捌くために、W杯配信だけでない様々なところに気を配ったんだなと感じました。新しいことをやりつつ今あるものを動かし続ける大変さを教えてもらった様な気がします。