This page is intended for users in Japan. Go to the page for users in United States.

「常にチャレンジングな課題があり、議論し合える仲間がいる」AbemaTVの開発環境とは?

AbemaTVでは様々なバックグラウンドを持った技術者が活躍していますが、サーバーサイドを担当する新卒3年目のギアもその一人。iOSエンジニアからサーバーサイドエンジニアに転向して約1年ですが、AbemaTVの映像配信及びAPIを支える基盤アーキテクチャの設計・構築やシステム開発における横断的な課題を解決するコアチームの一員として、日々開発に励んでいます。

「チャレンジングな課題に向けて、議論し合える仲間がいることが何よりも嬉しい」と話すギア。AbemaTVでのやりがいや今後の展望について話を聞きました。


撮影場所提供:CyberZ


Le Van Nghia(レー ヴァン ギア)
AbemaTV サーバーサイドエンジニア。ベトナム出身。学生時代に日本に留学した後2015年サイバーエージェントに新卒入社。入社後はiOSエンジニアとしてネイティブアプリ版「Ameba」の開発に携わる。
2015年7月より映像配信プラットフォーム「FRESH!」プロジェクトに異動し、立ち上げに参画。その後
2016年8月より現職。




ーーはじめに、これまでの経歴を教えてください

2015年に新卒でサイバーエージェントに入社し、新卒研修を終えた後ネイティブアプリ版「Ameba」チームにiOSエンジニアとしてジョインしました。当時の「Ameba」アプリはWebViewとのハイブリッド形式でしたが、私がジョインしたタイミングでフルネイティブアプリ化が進められており、その開発に携わっていました。iOSアプリはこのタイミングでSwiftを導入しました。

その後、立ち上げ中だった映像配信プラットフォーム「FRESH!」に異動。「FRESH!」は当初、MVC (Model-View-Controller) でアーキテクチャが考えられていたのですが、開発スピードの速さやテストコードの書きやすさを考えてReactiveCocoaやMVVMモデルをリーダーに提案しました。その結果、当時最新のアーキテクチャだったMVVMが採用されました。ジョインしたばかりでしたが、このように自分の提案を採用してもらえたのは嬉しかったですね。




ーーどのような経緯でAbemaTVチームにジョインしたのでしょうか?

「FRESH!」では約1年間iOSエンジニアとして開発に携わり楽しかったのですが、分散システムやクラウド、大規模データ処理などの知識を身に付けたいという思いが次第に強くなっていったんです。そこで大きな挑戦ができそうな「AbemaTV」チームに、サーバーサイドエンジニアとして2016年8月に異動しました。

iOSエンジニアからサーバーサイドエンジニアに急に転向したので、最初は分からないことばかり。サーバーに関する知識もありませんでしたし、GCP (Google Cloud Platform) もKubernetesも使ったことがなかったので、毎日必死に勉強しキャッチアップできるように努力しました。初めてのことだらけで不安や心配はありましたが、それ以上に新しいことに挑戦できることへの喜びの方が大きかったです。




ーー現在のAbemaTVでの担当を教えてください

AbemaTV全体のアーキテクチャの設計や開発を行う、コアチームに所属しています。

AbemaTVのサーバーサイドは現在3つのチームに分かれていて、コアチームの他にはサービスの新機能開発を行うAPIチームと、コンテンツの配信システム開発を行う配信チームがあります。




ーーコアチームではどんなことに取り組んでいるのでしょうか?

コアチームはAbemaTVの映像配信とAPIを支える基盤アーキテクチャの設計・構築を担当するだけでなく、システム開発における横断的な課題を解決していくチームです。

たとえば、コアチームでの私の初めてのタスクは監視システム開発でした。PrometheusでAbemaTVのシステムを監視し、アプリケーションレベルからコンテナ、ホストまでの色々なメトリクスを収集して、Grafanaで可視化するというものです。また、HyperLogLogで各チャンネルやクライアントOSの同時接続数をリアルタイムで見れるようにしました。
(参考:「AbemaTVにPrometheusというモニタリングシステムを導入した話」)

また、マイクロサービスのgRPC通信において、RPCリクエストをきれいにバランシングさせるための対応も行いました。以前はあるgRPCサーバーに集中してしまうことがあり、きちんと分散できていなかったんです。また、スケールアウト時に新たに追加されたgRPCサーバーにコネクションがこないという問題も存在していました。gRPC Client Load Balancingを実装したことにより、それらの問題を解決することができて綺麗なバランシングができるようになりました。もちろんこれで完成というわけではないので、もっと良いLoad Balancing Serviceを考えているところです。



そのほかにも、リリースの自動化も対応しました。AbemaTVのリリース作業は手動で行なっており、チェックリストを見ながら皆作業していたのですがミスも起こりやすく私自身困っていたんです。そこで自ら提案し、Slack内でコマンドとInteractive Messageで作業できるよう "Deploykun"というものを開発しました。Deploykunを活用することで簡単にCanary・Stableをリリースし、PodをScaleできます。新バージョンのリリース時に何か問題があればすぐ切り戻すこともできます。

手動リリースには皆不便さを感じていたようで、メンバーがとても喜んでくれたのが嬉しかったですね。




ーー次はどんなことにチャレンジする予定ですか?

次のチャレンジも面白くてワクワクしています。というのも、現在はマイクロサービスのようなStatelessサービスだけで対応していますが、今後はDatabaseのようなStatefulサービスもコンテナの上にのせることを考えています。またマイクロサービスでより良いトラフィック管理を行うために、Istio, Envoyの導入も検討しています。

その他にも今は手動でシステムのスケール対応を行なっていますが、いずれはサービスのメトリクスでAutoScalingをできるようにしていきたいと考えています。また、gRPC APIをサーバー側で準備しておくようにするとクライアントサイドもgRPCで通信できて、パフォーマンスや通信速度をもっと改良できるんです。さらにリリース中に自動的にシステムの状態を検知し、エラー率が高くなったら自動的に切り戻すシステムも検討しています。
これからもチャレンジできることは、本当に山ほどありますね。




ーーAbemaTVで働く上で日々どんなやりがいを感じますか?

良いチームの条件というのは2点あると思っていて、挑戦できる課題があることと、その挑戦に対して議論しあえる仲間がいることです。私が所属しているコアチームではその両方が満たされているので毎日すごく楽しいですね。

AbemaTVでは、基本的にGCPやKubernetes、マイクロサービス、gRPC、Protocol Buffersなど新しい技術を使っているので、その点にもやりがいを感じます。日々色々な技術トレンドをGitHubやTwitterでキャッチアップし、AbemaTVに合うかどうか調査した上でリーダーに提案し議論しています。

これまでコアチームはサーバーサイドエンジニアのリーダーと私の2人体制だったのですが、最近新たなメンバーもジョインしてくれてワクワクしています。彼も新たな課題に取り組むことが好きなようで、より議論できる幅が広がるし、もっと新たなアプローチが行えると思うと楽しみです。




ーーこれまで様々な挑戦を行う中で苦労した点はありますか?

個人的に難しいことの方が楽しいと感じるので、特に苦労した点はないですね。色々な新しいものを導入したくてもまだα版で導入できなかったりといったことはありました(笑)



ーーさいごに今後どんなことに取り組んでいきたいと考えていますか?

システムのスケールに関してさらに多くの新たなアプローチを検証して、スケーリングしやすいシステムを考えていきたいです。エンジニアとしては、サーバーサイドとしての経験をもっと積んでいき、将来チームメンバーと一緒にOSS開発をしても楽しいかなと思っています。

株式会社AbemaTVでは一緒に働く仲間を募集しています
Anonymous
09562c89 47f4 4e96 9c2a 8944fea1f122
4a8264a6 6d31 415b ace4 43421ec3dd05
Picture?height=20&width=20
Picture?height=20&width=20
Picture?height=20&width=20
14 いいね!
Anonymous
09562c89 47f4 4e96 9c2a 8944fea1f122
4a8264a6 6d31 415b ace4 43421ec3dd05
Picture?height=20&width=20
Picture?height=20&width=20
Picture?height=20&width=20
14 いいね!

今週のランキング

ランキングをみる

Page top icon