[レポート] LINE NEWSの記事配信を支える技術 #linedevday_report

LINE NEWSの記事配信を支える技術

2019年11月20日(水)・21日(木)にグランドニッコー東京 台場でLINEのデベロッパーカンファレンス「LINE DEVELOPER DAY 2019」が開催されました。

本記事は、セッション「LINE NEWSの記事配信を支える技術」をレポートします。

スピーカー

  • 稲葉 大樹 [LINE 開発Iチーム Software engineer]

セッション概要

LINE NEWSは2013年にサービスを開始し、現在では月間120億PV、6800万アクティブユーザーを超えるサービスへと成長しています。最近では、そのような大勢のユーザーに対して、それぞれの興味に沿った記事を配信する個人化にも力を入れており、サーバーサイドにはより一層高いパフォーマンスが求められています。本セッションでは、そんなLINE NEWSの裏側や、記事配信を支えている技術やアーキテクチャについてご紹介します。

スライド

レポート

  • パーソナライズされたニュースの配信に特化したお話
  • 自己紹介
    • LINE新卒入社2年目
  • アジェンダ
    • LINE NEWSの紹介
      • サービスの概要、規模感
    • レコメンド配信について
  • LINE NEWSの概要
    • 2013年にネイティブアプリとしてローンチ
    • 2017年にLINE内にタブとして組み込み
    • メディア各社と連携したりしている
    • ニュース以外のコンテンツも配信している
      • 天気
      • 運行情報
      • 地震速報
      • スポーツ
    • ユーザー数
      • 68M MAU
      • 12B MPV
      • 17.3B Req/Day
      • 375K Req/Sec-Peak
      • 200K Req
    • 12:00, 20:00あたりにはねている
    • インフラ
      • アプリケーションサーバー
        • Amon2 (Perl) 44台
        • Spring Boot 30台
      • レコメンドはSpringの上に
      • MySQL x3
      • Memcached x44
      • MongoDB x21
      • Redis x3
      • Redis Cluster x1
    • RSS/SFTP/SOAP Import、Original Body Formatなどなど色々な機能がある
    • 今回はレコメンドに焦点を当てる
  • レコメンドの話
    • 国内最大級の記事データ
    • ユーザーにパーソナライズされたレコメンドを提供
    • トップ画面にもレコメンドが導入されている
    • MLだけではなく、運営チームにより手動のレコメンドも行われている(混ざっている)
    • MLのレコメンド
      • Data Labsという社内チームから生成された情報
      • 1奥のユーザーのレコメンドを生成
        • 200億件の記事ID
      • 毎時で更新
    • 手動レコメンド
      • CMSで設定
      • 年齢、性別、レジデンス、などなど
      • レコメンドは何件も設定することが可能
      • 表示時間も設定できる
      • MLによるレコメンドと混ざって表示される
        • どこに表示するか、細かく設定できる
    • 最初からハイブリッドだったわけではない
      • 当初はMLだけ
      • 後から手動を導入
      • 改善し、いまの構成に
    • MLだけの時代
      • 大きく、リクエストとインポートの処理がある
      • はじめ
        • CDNをかなり活用
        • 同じレスこんす
      • レコメンドの導入
        • ユーザーのユニークなパラメーターが必要
        • パーソナライズされたレスポンス
        • アーキテクチャ
          • Redisクラスタにインポート
          • ユーザーからリクエストが来ると、レコメンド記事リストをフェッチ
          • コンテンツが含まれるRedis (Article Cache)に取得
          • Article Cacheに入ってなかったらMySQLから取得
          • 複数のユーザーで見ている記事はキャッシュされるような仕組み
          • ほとんどRedisから取得している
        • 課題はレコメンドのインポート
          • 1億以上のインポートを毎時間取得する必要があるという課題
          • ソリューション
            • Data Labs batchがDatahubにアップロード
            • Data LabsからAPIに通知
            • 複数のML Importerが起動(LIMITとOFFSETを持つ)
            • 各ML ImporterはDatahubから取得
            • 深掘り
              • DatahubにはTVS形式のリスト
              • ML Importerは一行ずつ解析してJSONに変換
              • Redis上に格納
              • 並列で20スレッドで実行する
              • いまは10分くらいで終わっている
      • 手動レコメンド
        • Central Dogma
          • 設定ファイルを中央集権的に管理できるサービス
          • 設定をクライアント側に保持する
        • 流れ
          • Datalakeからデータ分析チームにユーザー対象属性を渡す
          • 分析チームから運用チームを通してCSV形式ファイルをCMSに上げる
          • ユーザーと記事のマッピングデータをアップロードする
          • マッピングデータの保存に成功したらMySQLに格納
          • BatchからCentral Dogmaにアップロード
          • Central DogmaがWebサーバーに同期
          • ユーザーからリクエストがあった場合、RedisからIDリストを取得
        • 問題
          • マッピングデータの形式が原因で、スケールできない
            • 1ユーザーのついて平均300MBになってしまっている
          • 運用コストが上がった
        • 改善
          • CSV形式ではなく、運用者が直接CMSに属性情報を書けるようにした
          • RedisではユーザーIDをキーに変更することで、データを最小化
          • マッピングのデータを変更することで、GETするだけでよくなった
      • 軽い代償
        • マッピングデータの削除が難しい
        • すでに何らかのデータがセットされている場合はUpdateになる
          • ユーザーの数分、やる必要がある
          • 複雑化した
        • 削除したい場合は、キーの数だけ削除する必要がある
  • 今後の展望
    • レコメンドのクオリティ向上
      • 双方向のレスポンスによって向上していくもの
      • レコメンドの反映は最大で1時間後、リアルタイムにしたい
        • ユーザーからのレスポンスが来ているのに勿体無い
      • Pairsというレコメンドエンジンがあり、A/Bテスト的に入れている
    • レコメンドの導入箇所の拡大
      • ダイジェストにレコメンドを含めるなど
  • まとめ
    • レコメンドはMLとマニュアル
    • ぜひLINE NEWSを使ってください

まとめ

個人的にLINE NEWSはよく使っているので、その中で使われているレコメンドエンジンについて、どのようにレコメンドが作られているのか知ることができ大変有意義でした。