※写真左から
株式会社radiko 配信技術室 神佑太様
株式会社スリーシェイク エンジニア 池田達哉
株式会社スリーシェイク エンジニア 佐藤開
株式会社radikoは、2010年に設立された日本のインターネットラジオ・ポッドキャスト配信サービスのリーディングカンパニーです。主力サービスである「radiko(ラジコ)」は、スマートフォンやPC等を通じてラジオやポッドキャストが聴ける無料のサービスです。ラジオをリアルタイムで聴取できるだけでなく、過去7日間以内に放送された番組を聴くことができる「タイムフリー機能」や、有料プランの「radiko プレミアム(エリアフリー)」を利用することで日本全国のラジオ番組を楽しむことができる機能を提供しています。今回は「ラジコ」のインフラ基盤刷新のご支援をさせていただいた際のプロジェクトの背景や成果を株式会社radiko 配信技術室の神様に、弊社担当エンジニアである池田、佐藤とともにお話を伺いました。
目次
- サービスの刷新とともにクラウド環境へリフト
- 運用フェーズを見据えた構築で大きな障害もなくクラウドリフトを完遂。可観測性の確保や、自動化といったモダンな運用を併せて導入。
- 「ラジオを聴く」というユーザーに対する当たり前の実現
- 安定稼働をベースにしつつ、開発者体験の更なる向上を目指す
サービスの刷新とともにクラウド環境へリフト
-今回支援させていただいたサービスの概要をお聞かせください。
神 |
「ラジコ」はインターネットでラジオとポッドキャストが聴ける音声配信プラットフォームサービスになります。民放連という日本の民法各社が所属している団体がありまして、そこに加盟している放送局やNHKのラジオが聴けます。「ラジコ」は主に、①ライブ、 ②タイムフリー、③エリアフリー、④ポッドキャストといったサービスを提供しており、①ライブは ラジオ局で放送しているラジオ番組をリアルタイムで聴くことができます。②タイムフリーは放送後7日間の聴き逃し聴取ができるサービスとなっており、③エリアフリーは国内どの地域からでも全国のラジオを聴取いただけるサービスとなります。またいつでもどこでも再生可能な④ポッドキャストも提供しております。MAU(Monthly Active Users)は850〜900万、有料会員が100万人に及ぶ サービスとなっており、アクセスの約97%はスマートフォンアプリからの利用となっています。 |
-どういったプラットフォーム上で運用されているのでしょうか?
神 |
プラットフォームとしては元々オンプレミス環境に基盤を構築してサービスを提供していましたが、昨年の2月からアプリのリニューアルに併せてバックエンドもGoogle Cloudに切り替えて運用しております。また、システムは協力会社に入っていただき、フロント・バックエンド・インフラの運用をお願いしていますが、新しいアプリになってからは今までの協力会社に加えて、新しい人材も採用しながらモダンな運用を目指しております。 |
-システム基盤を刷新することになった背景をお聞かせください。
神 | オンプレミス環境上のサービスがリリースした後、10年程度経過しており、UI/UXも長らく同じものを提供していたことから、アプリを刷新したいと考えたのがきっかけになります。昔ながらのアーキテクチャで運用していましたので、システム自体の柔軟性やコスト効率の観点からGoogle Cloudを中心にしたモダンな環境に変えたかったというのが背景になります。 |
運用フェーズを見据えた構築で大きな障害もなくクラウドリフトを完遂。可観測性の確保や、自動化といったモダンな運用を併せて導入。
-(To:スリーシェイク)我々は今回、どのような立場で参画したのでしょうか?
池田 | 当時は既にアプリ開発は進められており、新規に環境を構築していくタイミングで参画させていただきました。Kubernetesを扱うため、有識者が必要との背景からお声がけいただき、インフラ整備を支援させていただく形になったと記憶しています。 |
-(To:スリーシェイク)支援させていただく中でどんな配慮をしましたでしょうか?
池田 | スマホ向けアプリのバックエンドとWEBページを載せる基盤の構築が支援範囲だったのですが、当初お聞きしたiOS/Androidのトータルダウンロード数や、トランザクション数がかなり大きく、運用フェーズを見据え、如何に高いトラフィックを捌いていくか、且つ、管理コストを軽減するための自動化や、回復性、可観測性を組み立てていくかといった観点を意識して支援しました。 |
-(To:スリーシェイク)具体的に今回の環境はどのようなサービスを活用したのでしょうか?
池田 | ワークロードのプラットフォームとしてはGoogle Kubernetes Engine(以下、GKE)を採用しています。ネットワークの部分ではistioを利用しており、データベースにはFirestoreを、可観測性観点ではDatadogなどを活用しております。GKEは元々採用することが決まっておりましたが、クラスターオートスケーラーやHPA(horizontal pod autoscaler)を設定の上、負荷試験を実施し、トラフィックに応じて自動スケールする環境を整備しております。 |
-(To:スリーシェイク)新規のインフラを構築する中で意識した点はありましたでしょうか?
佐藤 |
開発段階から運用フェーズを見据えて、管理コストの軽減や、高負荷なトラフィックによる障害耐性を考慮していましたが、その中の1つの観点として、CICDパイプラインの整備が挙げられるかと思います。リリースに起因して障害が起こることがありますが、リリース作業に対する開発チームの負荷を下げるため、リリース作業を極力自動化した上で、人が確認しなくてはならない範囲を局所化しています。 例えば、「ラジコ」ではカナリアリリースを採用しているのですが、これはargoシリーズのArgo Rolloutsを活用して実現しております。カナリアリリースは時間を決めて段階的にリリースをしていくものですが、Argo RolloutsがDatadogのメトリクスを監視し、APIのエラー率が一定値を超えた場合、今進めているデプロイを中止して自動でロールバックする仕組みを導入しています。これらの仕組みのおかげで、リリースを行う開発チームの心理的安全性を確保しながら、障害があった場合も、すぐに復旧できる環境を構築できております。 |
-(To:スリーシェイク)他にも工夫した点はありましたでしょうか?
佐藤 |
可観測性の部分ですかね。アプリをリリースした当時はエラーが通知されることも多かったのですが、そのエラーがサービスに対してどの程度、影響を及ぼしているのかを判断できていなかったことが課題としてありました。同課題への対処として、サービスへの影響を定量的に判断する取り組みを始め、その可視化に向けてistioのメトリクスを活用しています。 今ではGKE上で稼働している各システムから、アプリケーション毎、エンドポイント毎にメトリクス(レスポンスコードやレスポンスタイム、データサイズ等)を取得し、Datadog上のダッシュボードで確認できる環境を整備しており、ダッシュボードを元に、「エラーは出ているが、可用性が下がっていないので対応しなくても良いね」といった判断が行えるようになっています。 |
-(To:スリーシェイク)運用フェーズでその他、支援されている範囲はありますか?
佐藤 |
メトリクスを可視化する活動によって、リソースの使用状況を可視化できるようになったため、割り当てリソースの最適化といったコスト削減も支援しています。最近ではデータ圧縮によって一部区間の通信費を3分の1に削減する対応を実施しました。リリース当初に比べると、バックエンドの改善含めてGoogle Cloudのコストを月額で150万円程削れているかと思います。 |
「ラジオを聴く」というユーザーに対する当たり前の実現
-基盤の刷新という大規模なプロジェクトだったかと思いますが、振り返ってどうでしたか?
神 | そうですね。スマートフォンアプリからの利用が大半を占めるサービスで、アプリの使っているAPIの大部分を新しい基盤に載せ替えるものだったので、移行時の高いトラフィックに対する耐性や、大きな障害の発生などが心配でしたが、リリース後も今も大きな障害なく運用できており、スリーシェイクさんには非常に感謝しております。ユーザーにとってアプリで「ラジオを聴く」というのが当たり前となっているため、移行時に大きな障害なく乗り越えられたことは非常に大きかったです。また、先程話のあったCICD環境に関しても、以前に比べ大幅に進歩していると感じており、バックエンドのデプロイ頻度が格段に多くなりました。 |
–伴走支援の中でスリーシェイクが頼もしいと感じるところはありましたでしょうか?
神 |
新規構築時もさることながら、リリース後の運用保守フェーズでバックエンドの開発チームとも連携しながら、運用改善を進めていただけており、非常に頼もしく感じております。そのおかげで私自身は他サービスの運用にもリソースを割くことができております。また、オンプレミス時代から運用に携わってくれているメンバーともコミュニケーションを取りながら新しいサービスの引継ぎや、モダンな運用の導入を進めていただけており、運用改善・高度化を軸に各チームを引っ張ってくれていることに、非常に感謝しております。 |
–(To:スリーシェイク)スリーシェイク側は振り返ってどうでしたか?
池田 |
かなり大きな負荷が想定されるということで、私としても初めて経験するトラフィック量でしたので、どのようなツールを選定してシステムを構築していくのか?といった検討や、非機能要件を満たすための検証に時間を要しましたが、非常に技術難易度が高い案件で、やりがいを感じながら進めることができました。 |
佐藤 |
運用に入ってからは、これまで色々な改善提案をさせて頂いたのですが、radikoさん側で快く受け入れてくださり、やりましょうと言ってくださるので、改善が進みやすい環境を作っていただけていると感じています。 |
安定稼働をベースにしつつ、開発者体験の更なる向上を目指す
-「ラジコ」に関して今後の取り組みや目標、展望があればお聞かせください。
神 |
先ほども少し触れましたが、サービスの性質上、安定して動くというのが前提となりますので、今後も安定したユーザー体験を提供する事をベースに置きつつ、新しい機能のリリースに向けて、既存システムをより柔軟に変更できる環境を整備して、自社エンジニアの開発者体験も向上していけたらと考えております。コスト削減も進んでいますが、まだまだ見直せる余地もあると思いますし、アーキテクチャに関しても、既存のものに縛られずにたくさんチャレンジをしていきたいです。後は既にスリーシェイクさんに取り組んでいただいている運用モダナイズに関しては、GKE基盤以外のサービスでも展開していければと考えています。 |
-(To:スリーシェイク)支援側としては今後も継続して支援していく中でどのような取り組み意向がありますでしょうか?
佐藤 |
安定稼働を継続させるということを第一に、コスト効率を高めていく活動は継続して進めていきたいと思っています。また、リリース当初よりも可視化できている範囲は広がっているので、今の利用状況に併せた形で環境自体をより最適化していきたいです。効果的なツール等を導入できるチャンスがあればチャレンジングなこともradiko様と一緒に取り組んでいきたいですね。 |
-本日はみなさまありがとうございました。