【Supership エンジニア職種紹介】秒間数十万リクエストに挑む!アドテクの最前線で活躍する若手エンジニア
こんにちは!Supership ピープル&コミュニケーション本部の小山です。
今回のSuper Storiesでは、Supershipのエンジニアの日々の業務や仕事のやりがいについて、アドテクノロジーセンターで活躍されている新卒入社のあの方へ取材しました。
秒間数十万リクエストを処理する大規模アドテクの世界で、新卒入社から3年で配信サーバーの設計・実装までを手がける新進気鋭の若手エンジニアの挑戦と、それを後押しするSupershipのエンジニア組織の実態に迫ります!
まずは自己紹介をお願いします!
21卒でエンジニアをしている杉山慶多です。
高校生の頃からプログラミングの経験があり、大学では情報系の学部に入学しコンピューターサイエンスを学びました。
プログラミングに関係することなら何でも興味があり、これまでに15を超えるプログラミング言語を学び、派生してさまざまなアーキテクチャパターンを学んできました。
現在の主な業務内容は何ですか?
普段の業務ではScalaやRustなどの言語で、他社サービスと連携しながら広告を配信するプロダクトを開発しています。秒間数十万のリクエストがあり、さらに1リクエストあたり数十ミリ秒というレスポンスタイムが求められる世界です。それらを満たすために日々新しい技術のキャッチアップを重ねたうえで設計・実装をしています。試行錯誤する中で、シンプルなWebサービスの開発では得られないようなスキルを身につけることができています。
例えば、データベースへのアクセスを最小限に抑えるためにメッセージングサービスを用いて各配信サーバーが常に最新のキャッシュを保持・参照できるようにしたり、データ量が膨大なためキャッシュできないものについては高スループットかつ低レイテンシなNoSQLデータベースを用いたりしています。
プロダクトによってオンプレミス環境のみならず、AWSやGoogle Cloudなどのクラウドサービスも使い分けています。それぞれのサービスの特性を理解し、適切なアーキテクチャを導き出しています。
最終的には負荷テストを大規模に実施し、その結果をもとに設計・実装を見直してリソース効率を高め、コストを最適化していきます。ScalaやRustの言語機能を最大限に活用し、処理速度とエレガントな設計・実装のバランスをとるところに面白さを感じています。
チームの開発スタイルや1日の過ごし方など、日々の業務について教えてください!
私の所属するチーム(SSP配信グループ)は5人体制で、新卒や若手の社員がコードを書いて、先輩がそのサポートやマネジメントをしてくださる体制です。私もミーティング以外の時間はコードを書いたり、開発のための調べものをしたりしています。
基本的にタスクは1人でこなし、なにか成果物ができたタイミングでGitHubにプルリクエストを作成して、レビューをお願いするという形になっています。毎日お昼ごろに所属チームのデイリーミーティングがあるので、それまでにチームのメンバーに聞きたいことや共有事項をまとめておくようにしています。
デイリーミーティング以外のタイミングでも、困ったことがあればいつでもSlack等で気軽に相談することができます。チームにはベテランの先輩もいらっしゃるので、自分一人で抱え込むことがなくありがたいです。
他の開発チームにもプロフェッショナルなエンジニアが多くいらっしゃるので、その方に直接話を聞いたり、勉強会で情報交換したりするようにしています。
また、セールス側のメンバーともコミュニケーションをとり、しっかりと仕様をすり合わせた上で開発を進めるようにしています。時には接続先など他社のエンジニアの方と直接連絡を取ったり、海外の企業の担当者とも英語を使いながらミーティングをすることもあります。
入社してから現在までの変化について、お聞かせください!
入社してすぐのタイミングでは、既存の広告入稿画面の改修に携わり、その中でアドテクの基礎知識や仕事としてのプロダクト開発およびチーム開発のスキルを身につけていきました。
半年後には、“広告入稿画面を最新技術でリプレイスする”プロジェクトに加わることになりました。学生時代の研究(マルチエージェント分野)において、シミュレーターのダッシュボード開発にReactを使用していたので、その経験を買っていただけたようです。
立ち上がって間もないプロジェクトだったため、アプリケーションの開発のみならず、CI等の基盤整備においても技術選定の段階から携わることができました。使用するライブラリ等についても自ら提案をして、意見を採用していただけました。
そして入社2年目からは、現在所属している広告配信系サーバーの開発チームに異動しました。大規模トラフィックを扱うプロダクトに携わりたいという理由でこの会社に入社を決めたことや、そのために分散処理のアーキテクチャ等を学んできたことを社内でアピールしていたことにより、ご縁をいただいたのだと思います。
特に印象に残っているプロジェクトは何ですか?
広告配信における、とある部分の仕組みを一から開発するプロジェクトが特に印象に残っています。私はその中核を担うサーバーの設計・実装を担当しました。
印象に残っている理由を教えてください!
それまでは既存の配信系サーバーのメンテナンスが主な担当業務で、 新規開発をするにも周辺のマイクロサービスの開発しかできていなかったので、サーバーの設計・実装を一からできるということにとてもワクワクしたことを覚えています。
それらを通じて得られた経験は何ですか?
ベテランの上司にアドバイスをいただくことは多々ありましたが、大規模な新規開発であり、さらにその中核を担うサーバーの設計・実装の担当だったため、大きな責任を感じるプロジェクトでした。そのため、それまで以上にデータや処理の流れを頭に入れ、ほかのメンバーと会話をする中でわからないところを一つずつクリアにすることを怠らないようにしました。
本プロジェクトではクラウドをフルに活用することが決まっていたため、各種クラウドサービスの特性等を比較検討しながらアーキテクチャを設計しました。
堅牢なシステムの構築のために、クラウドサービスを提供する企業のオフィスまで出向き、サポートの方との関係を構築しながら、アーキテクチャについてレビューを受けたことはとても良い経験だったと感じています。
諸事情で本プロジェクトは一旦ストップする形となりましたが、ここで得た知識を、現在取り組んでいるライブ配信におけるインストリーム広告配信の負荷分散システムの開発で活用することができています。
最後に今後のキャリアのイメージを教えて下さい。
私はチーム・組織を技術で支えるエンジニアになりたいと思っています。
現在私が携わっているプロジェクトはどれも規模が大きく、技術的なことも社内外の状況も常にキャッチアップをし続けなければ置いていかれてしまいます。そうした、技術的にも社会人としての立ち回りとしても“揉まれる”環境下で得た知識や経験をフルに活用して、これからも新規開発プロジェクトに積極的に取り組んで行きたいです。そして、やがては「〇〇といえばこの人」と言っていただけるくらい成長していきたいです。
\ Supershipの採用情報はこちらからご確認ください! /