はじめに
こんにちは!レバレジーズのテクノロジー戦略室でデータエンジニアをしている鈴木です。当社では40以上の事業を展開しており、データエンジニアリングだけでなく、様々な分野に挑戦できる環境があります。
今回はその一例として、私が関わったレコメンドシステムの刷新について、特にインフラ面の工夫を中心にご紹介します。「データエンジニアリング以外にも、色々挑戦できそうだな」という雰囲気だけでも伝わると幸いです!
どんなシステムを作ったの?
私たちが開発したのは、スカウトサービスにおける、企業向けの求職者レコメンド機能です。開発メンバーは3名で、私は主にインフラを担当しました。
システムの仕組み (アーキテクチャ概要)
システムはAWS上に構築されており、大まかな流れは以下の通りです。
- マッチ率の計算 (バッチ処理): 定期的に、機械学習基盤のSagemakerを使って「求人」と「求職者」のマッチ率を計算します。
- 結果の保存: 計算したマッチ率は、高速なインメモリデータベースであるElasticache (Valkey) に保存します。
- レコメンドの提供: サービスから求人・求職者に関するリクエストがあると、Elasticacheに保存しておいたマッチ率を素早く返します。
アーキテクチャの全体像
開発での「こだわりポイント」3選
インフラのメイン担当として、特にこだわった点を3つご紹介します。
1. データベースは「インメモリDB (Valkey)」を採用
- なぜ?: 今回はリアルタイムではなく事前に計算結果を保存しておく方式(バッチ推論)のため、保存先DBが必要でした。選択肢にはPostgreSQLのような一般的なリレーショナルデータベース(RDB)もありましたが、今回はValkeyというインメモリデータベースを選びました。(ValkeyはRedisと互換性があり、高速・低コストなのが特徴です)
- メリット:
2. 効果測定しやすい柔軟なアーキテクチャ
- なぜ?: レコメンドシステムは「本当に役に立っているか?」「サービス全体の目標達成に貢献しているか?」を測定することが非常に重要です。そのためのオンラインテスト(例: ABテスト)を柔軟に行えるように設計しました。
- 工夫: 当初はABテストだけを考えていましたが、レコメンド評価でよく使われる「インターリービング」など、他の手法にも対応できるように、単純なロードバランサーでの振り分けではなく、振り分け専用のアプリケーションを用意しました。
- メリット: このアプリケーションで振り分けルール(どのユーザーにどのモデルの結果を見せるか、どのテスト手法を使うか)を簡単に変更できます。これにより、新しいレコメンドモデルのテストや、異なるテスト手法への切り替えがスムーズに行えます。インフラレベルで役割を分けることで、柔軟性が格段に向上しました。
- 運用イメージ:文章だけだとわかりにくいと思うので、運用時のイメージを以下に示します。
1.初期デプロイとして純粋なABテスト
2.モデルA→モデルCに変更
3.振り分け方法をインターリービングに変更
3. 「IaC (Infrastructure as Code)」で再利用性を高める
- なぜ?: 4年前に構築したこのシステムは、IaCの導入が中途半端だったために管理コストがかさんでいました。さらに、他のレコメンドプロジェクトへの横展開も視野に入れて、今回きちんとIaC化することにしました。
- 工夫: Terraformを使って、インフラ構成をコードで管理し、再利用可能なモジュールとしてまとめました。
- メリット: 新しい環境でこのレコメンド機能を使いたい場合、環境名などの設定を少し変更して
terraform apply
コマンドを実行するだけで、必要なインフラ一式を自動で構築できます。これにより、開発効率が大幅に向上します。
これから注力していくこと
このレコメンドシステムはまだ本番リリース前で、これから以下の点に取り組んでいきます。
- 負荷テスト: 多くのアクセスに耐えられるかを確認するテストです。未経験分野なので、社内の専門チーム(TQCチーム)に協力してもらいながら進めます。
- ABテスト: まずは基本的なABテストから開始します。偏りのない公平なテストができるよう、関連書籍で勉強しつつ、実験計画の設計中です。
- MLOps: 機械学習モデルの開発・運用を効率化するMLOpsにも力を入れていきます。特に、モデルの性能を安定させるために、特徴量の品質チェックやドリフト検知、テスト結果のダッシュボード化といった、運用面での整備を進めていく計画です。
まとめ
最後に、このプロジェクトを通して感じたことを2つ共有。
- データエンジニアの経験が活きる!: データエンジニアはデータ基盤構築だけでなく、アプリやインフラの知識もある程度持っていることが多いと感じます。具体的には、データ基盤でTerraformを使った経験や、データ処理パイプライン(DAG)をPythonで書いた経験などを活かせたのではないかと思います。また、「分析しやすいログ設計」といったデータ基盤側の視点をアプリ開発に持ち込めるのも強みだと感じました。
- 専門外への挑戦は成長のチャンス: 異なる専門性を持つメンバーと協力することで、普段は意識しない視点に気づかされたり、レビューを通して新しい知識を学んだりでき、スキルアップに繋がります。というか、ちゃんとレビューするには知識をつけるしかないので、勉強するしかないですねw
いかがだったでしょうか??
今回はデータエンジニアによるレコメンドシステム開発を紹介しましたが、「いろいろ挑戦できそうな雰囲気」を少しでも感じとっていただけましたら幸いです。
参考にしている本の紹介
最後に、本プロジェクトで参考にしている書籍を紹介します。レバレジーズのエンジニアには、技術書支援制度があり、月1万円までであれば、経費で技術書を購入することができます。技術書は結構値段するものも多いので、とってもありがたいです。