tanghoong cv

事例 05 · 主な実績

土台となる開発力:数十億インプレッションと、自走するマーケットプレイス

  • 過去の本番案件 —— 権利は雇用主に帰属

同じアドテク企業での 2 期・計 11 年:4 年はプラットフォーム刷新でただ 1 人のフロントエンドエンジニア、続いてセルフサービス型の広告マーケットプレイスをゼロから構築、そして毎秒数万リクエストを支えるバックエンドです。

担当
Software Engineer, then Senior Software Engineer
能力
規模 · プラットフォーム · 自ら実装
領域
アドテク —— パブリッシャー、営業、広告運用
期間
2 期、11 年
High-volume events batched out of the request pathWithout batching, every impression and click would be one call into the main servers. With batching, events accumulate and ship on a fixed interval to a separate bookkeeping service, which writes back, so the main request path stays thin.WITHOUT BATCHINGMain serversfloodedOne call per event — every impression, every click.WITH BATCHINGAccumulatefixed intervalBookkeepingseparate serviceMain serverswritten backOne batch instead of thousands of calls.
Anonymised. No client name, no industry, no real endpoints.

背景

パブリッシャー、営業、広告運用のプラットフォームを手がけるアドテク企業です。2011 年に入社し、2017 年に自分の会社を始めるため退職しました。その後の 2 年で 2 度声がかかり、2019 年に等級を上げて戻り、コロナ禍をとおして在籍しています。

課題と不明確だった点

11 年で 3 つの異なる問題がありましたが、かたちは同じでした:ある規模では動くものが、次の規模では動かなくなる —— そして直すべき場所は、決まって全員が見ている部分ではありませんでした。

私の担当

1〜4 年目:プラットフォームの運用画面を旧システムから新システムへ刷新するプロジェクトで、ただ 1 人のフロントエンドエンジニア、QA も兼任。5 年目:バックエンドへの異動を自分から希望し、認められました —— 異動させられたのではなく、自分で求めたものです。その後、社の B2B セルフサービス型広告マーケットプレイスを構築し、CTO 直属で動きました。2 期目はバックエンドと API の改善、および新しい API 構成への移行を主導しています。

要件把握

あの運用画面はデザインの練習ではなく、商売の刃が当たっているユーザビリティの問題でした:商談を確度の段階に沿って成約まで進め、さらに配信のライフサイクルへつなぐ営業パイプライン。国、広告主、campaign、flight、広告枠、素材の各階層をカバーする配信管理画面。そして広告枠の設定、収益の積み上げ、出金申請までを含むパブリッシャー管理画面。これらを正しく作れたのは、仕様書の前ではなく広告運用と営業の隣に座っていたからです。

設計とトレードオフ

規模に関する仕事は、旧来の構成を新しい API 面へ移行することでした。そして両側とも、突き詰めれば同じ 1 つのことです:処理をリクエスト経路の外へ出す。広告のテレメトリ —— インプレッション、クリック、広告内のどの要素が押されたか —— はイベントごとに呼び出していてはサーバーが溢れます。そこでイベントをいったん貯め、一定間隔で独立した記録サービスへ送り、本体の外で処理してから書き戻します。レポートはもともと同期生成で、生成が終わるまでページが止まっていました。その部分はワーカーのバッチ処理へ移し、ページは即座に表示され、完了時に通知する形にしました。

実装と連携

あのマーケットプレイスは、商売の面としてひととおり揃っています:広告をパッケージとプランにまとめ、複雑な中身の上に意図的に単純化した会員層をかぶせ、社の API エンジンにつなぎました。買い手側はセルフサービスの発注と管理、素材アップロード、前払いポイントのチャージと消費。パブリッシャー側は収益の積み上げと出金申請です。パブリッシャーはパッケージを掲載し、自分の広告枠を設定して販売できます。

本番運用の作り込み

レポートの送信は冪等にしました —— 再読み込みしても、すでに走っているジョブが二重に起動しません。利用者が 1 週間以内に必ず踏む種類の不具合です。負荷の高い経路には多層キャッシュ、データベースのクエリチューニング、そして Node.js での作り直しを入れています。

結果

プラットフォームの規模:これらのバックエンドは毎秒数万リクエスト、月間数十億の広告インプレッションを処理します。この数字が示すのはプラットフォームの規模であって、私が単独で担当したコンポーネントのものではありません —— 私が担当したのは、そのうちの特定のバックエンド経路です。それらの経路では、上に書いたバッチ処理、クエリチューニング、多層キャッシュ、Node.js での作り直しにより、p95 の応答時間が 100 ミリ秒以内に収まりました。測ったのも、手を入れたその経路です。

持ち越せる学び

規模に関する 2 つの成果は、同じ 1 つの動きから来ています —— 処理をリクエスト経路の外へ出す —— そしてどちらも書き直しは不要でした。あのスループットの数字はその判断の結果であって、それ自体が成果ではありません。数字について聞かれるより、仕組みについて聞かれるほうが嬉しいです。

公開できる裏づけ

上に書いたことが、公開して話せる範囲です。以下は非公開のもの、および準備中のものです:

Charlie の追記待ち —— この 10 年はコードリポジトリよりも資料(案件 P8)で示すほうが適しています。古すぎ、かつ顧客に帰属する部分が多すぎて、正直に再現することができないためです。

この背景にある進め方

回答はこのサイトの記載内容にもとづきます。やる価値がない案件なら、そう答えます。

話しましょう

Forward Deployed Engineer · Forward Deployed AI Engineer · Applied AI Engineer · Solutions Engineer · Customer Engineer · AI Solutions Architect · Technical Delivery Lead

マレーシア・セランゴール州在住。クランバレー圏での客先での作業(長期を含む)、およびシンガポール・アジア太平洋地域の案件に対応します。マレーシア国籍で、シンガポールへの移住も可能です —— 雇用主によるスポンサーの就労ビザが必要になります。