Nikkei Tech Talk #4 で発表した際の資料です。日経電子版のバックエンド開発全般の紹介です。 https://nikkei.connpass.com/event/272705/
2023/2/16日本経済新聞社 API-Backendチーム 髙安日経電子版のバックエンド開発全般の紹介~メディアのバックエンド~NIKKEI TECH TALK #4
View Slide
#nikkei_tech_talkアジェンダ21. 日経電子版とAPI-Backendチームの概要紹介2. 日経電子版のバックエンド開発紹介a. 記事をユーザーに届けるまでb. アクセス規模と負荷を捌く工夫c. 内製開発3. まとめ
#nikkei_tech_talk自己紹介 3● Osamu Takayasu● 2015年中途入社● API-Backendチーム兼技術企画G 所属● 5時おき&在宅勤務で朝活が充実○ 筋トレ・ラン・読書・英語・Podcast
#nikkei_tech_talk日経電子版4● 有料会員数は約83万ID※1、無料会員数は約500万ID● 経済分野のニュースを中心にWebサイト、スマホアプリで配信● AI推薦などのパーソナライズ機能を提供※1 2022/7/1 時点 https://www.nikkei.com/topic/20220715.html ※2 2022/10/1 時点 https://marketing.nikkei.com/media/web/accessdata/
#nikkei_tech_talkClientシステム概要図5iOS/AndroidiOS/AndroidWeb・・・CDN BFF API BackendsAPIGatewayNikkeiAppPaperViewerBFFs・・・Nikkei IDPaymentSearchPaperImage・・・CMSMessage(Mail/Line/Push)DataAds・・・
#nikkei_tech_talk電子版事業のチーム構成6Conversion ARPPU Retention職能目的・・・アプリWebBackend・・・◯ ◯ ◯◯ ◯◯◯
#nikkei_tech_talkAPI-Backendチームの役割7● アプリ〜インフラ、開発〜運用をスコープとして、電子版のバックエンドシステムの技術的意思決定、開発速度、サービス品質に責任を持つ● 電子版のコンテンツを信頼性高く提供する● PdMや他チームと連携しながら、事業成長につながる提案、開発にコミットする
#nikkei_tech_talkAPI-Backendチームメンバー8+ フリーランスの方1名 + SESの方2名バックエンド/エンジニア採用/技術組織開発テックリードAPI/配信基盤/インフラ基盤の設計、運用バックエンド + ML。記事レコメンドなどバックエンド + ML。社内報サービス立ち上げなど
#nikkei_tech_talk日経電子版のバックエンド開発紹介9
#nikkei_tech_talk日経電子版のバックエンド開発紹介10● 記事をユーザーに届けるまで● アクセス規模と負荷を捌く工夫● 内製開発
#nikkei_tech_talk記事をユーザーに届けるまで11CMS群CMS編集ツール記事格納システムparseCMSのAPIから取得したJSONをS3に保存。メタデータの付与、変換処理をして”Article”に変換にしてRDBに保存feed“Article”をElasticsearch用のJSONに変換し、メタデータをつけて返却するAPIElasticsearch記事企業情報imgIX(CDN)S3記事メタデータ画像画像用proxySearchAPISearchAdminAPIGW BFF同義語辞書CDN
#nikkei_tech_talk記事データを紹介12● 記事データは約400項目○ title, body, display_time, images, …● 電子版の創刊から12年かけて継ぎ足されている○ 「表示する媒体や画面別の表示用データ」○ 「表示する媒体や画面別の記事を選択する検索用データ」○ 「保存可・不可など制御用」など
#nikkei_tech_talk記事データに関する課題13● 記事データを管理しきれていない● 主な原因○ サーバーサイドで記事データを作るが、クライアント側の使われ方を知る機会が少ない○ 電子版Web、アプリ以外に様々なクライアントがいる○ 記事データを作成・編集する関係システムが、CMS/API-Backend/BFF と複数ある
#nikkei_tech_talk記事データのvalidation14CMS群CMS編集ツール記事格納システムparseCMSのAPIから取得したJSONをS3に保存。メタデータの付与、変換処理をして”Article”に変換にしてRDBに保存feed“Article”をElasticsearch用のJSONに変換し、メタデータをつけて返却するAPIElasticsearch記事企業情報SearchAPISearchAdminAPIGW BFF同義語辞書CDN● 赤線の記事データを受け渡す境界でvalidateしたい● validationを実装、整備中○ rest_frameworkやjsonschemaを利用● エラーを検知してslackに通知したり、ログ送信したりしてデータの確認、及び修正対応
#nikkei_tech_talk記事を表示する仕組み15● どの記事をどこに出すかは重要● 報道機関として、Webメディアとして
#nikkei_tech_talk手積みシステム16● 電子版トップページは、紙面の1面に相当● 編集局がどの記事をどの並び順で、どのような見出しで出すかをコントロール● 紙と違い1日の中で何回か更新される
#nikkei_tech_talk手積みシステム17ES記事企業情報S3記事メタデータ画像SearchAPI APIGW BFF CDNCMS群CMS手積みシステム記事の並び順定義ファイルを取得
#nikkei_tech_talkその他の記事表示ロジック18● AI推薦○ 協調フィルタリングやランキングなどを用いた記事レコメンド● MyNews○ ユーザーが登録した条件に応じた記事一覧● ユーザー検索○ 同義語辞書、重複記事排除、クエリ変換、企業データ付与● 分類ごと(ex: 経済/マーケット/地域...)の記事一覧表示ロジック
#nikkei_tech_talkアクセス規模と負荷を捌く工夫19
#nikkei_tech_talkアクセス・配信の規模感20● 月間2億PV● API基盤へのアクセス: 2,500 req/sec● Push○ 数十万~数百万ユーザー宛○ Push通知直後のアクセス: 数万 req/sec
#nikkei_tech_talk負荷を捌く工夫21● 稼働インスタンス数: 全体で300台以上○ API基盤は約60台● CDNのキャッシュヒット率は80~90%程度○ JWTを利用したFastlyレイヤーでの権限判定○ 記事更新時のタイムリーなcache purge○ Pushによるspike時は個人別のデータアクセスを減らす
#nikkei_tech_talk内製開発22
#nikkei_tech_talk日経のイメージ23● 日経 = エンジニアリング のイメージはまだなさそう● カジュアル面談でお話すると、「こんなに内製開発しているとは思っていなかった」というお声をいただく● 入社した後でさえ「こんなに内製開発・・(以下略」
#nikkei_tech_talk内製開発とは24● 開発チームが以下の構成○ チーム全員が社員か、一部が準委任契約の社外メンバー● なぜ/何を/どうやって開発するかを社員が意思決定● エンジニアが事業ドメインを理解し、能動的に動ける● 内製開発ではない例○ 社員のコードレビューなしにソースコードがマージされる○ 請負開発で社員は要件定義のみ。コードは書かない
#nikkei_tech_talk日経での内製開発25● 日経電子版では内製開発を実施● エンジニアの関わり方○ 企画/調査・データ分析/要件定義/設計/開発/テスト○ 各人のモチベーション・スキル・状況に応じて、上記の全部もしくは一部に携わる○ 1on1などでコミュニケーションしながら進める
#nikkei_tech_talkまとめ26● メディアならでは/日経ならではのサービス開発● 大規模アクセスを捌く/データを活用するサービス開発● 内製開発を実践し、事業ドメインへ積極的にコミット