Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

メルペイ DataPlatform Team の設立とその背景

こんにちは。入社してかれこれ 1 年経過した @syu_cream です。本記事では、メルペイにおけるログ収集の基盤となるチームの設立と、それに至った背景や課題感についてお伝えできればと思います。

背景

基本的な背景は以前の記事で紹介させて頂いた通りなのですが、メルペイでは「信用を創造して、なめらかな社会を創る」ミッションを掲げ、それに則したサービスの展開の準備をしております。 また、メルカリにおけるプロダクト開発の課題感の文脈を受け継ぎつつ、メルペイとしてプロダクト開発をスピード感を持って実施していくために、プロダクトの機能はマイクロサービスアーキテクチャに従って行っています。

tech.mercari.com

しかしマイクロサービス化は一言で言えるほど単純なことではないと考えています!マイクロサービスを運用するための技術スタックの変更や、マイクロサービスの境界線をどこに引くか、どのような責務を持つかなどの設計の悩み、マイクロサービスを開発運用可能にするための組織の変更、サービスが分散されることで生まれる新たな課題・・・。

DataPlatform Team はそのような課題多きマイクロサービス化された世界の中で、分析や機械学習、不正利用検知など多種多少なデータ活用シーンにおける課題に応えるために設立されました。

メルペイ DataPlatform Team は何をするのか

メルペイでは前述の通り、決済などに関わる各種機能をマイクロサービスとして構築しています。それに際して、原則各マイクロサービスが保有するデータはそれぞれ独立したデータベースに格納するようにしています。 この構成により、それぞれのマイクロサービスを実装するチームはそのマイクロサービスの性質に合ったデータベースを選択し、かつ他のマイクロサービスへのデータベースレベルの影響を排除することができています。

しかしマイクロサービス化とデータベースの分離、多様化によって、分析や機械学習ベースのプロダクト機能との横断した連携が難しくなる課題も発生します。 具体的にはある分析に必要なデータが 1 個のマイクロサービスの所有するデータベースに閉じなかったり、不正検知のためマイクロサービスのあるロジックを通った際のイベントログをなるべく早く取得する必要があったり・・・。

メルペイ DataPlatform Team ではこの課題を緩和するため、下図のような各マイクロサービスのデータとそのデータを利用するチームの橋渡しをする "土管" を提供します。

f:id:syu_cream:20180821121313p:plain

DataPlatform を提供することで、各マイクロサービスはデータ提供する際に DataPlatform のみにデータを転送するだけで済み、またデータ利用者は DataPlatform からデータを受け取るだけで済ませることができます。 また DataPlatform では流れてきたデータを Data Lake に永続化するなど求められる共通処理も含める想定です。

メルペイ DataPlatform のデザインの一部と技術スタック

メルペイ DataPlatform はメルペイのプロダクトの成功のため絶賛開発中です!まだ大きな変更が起こる可能性は否定できませんが、一例として現在マイクロサービスのイベントログの収集基盤について下図のようなデザインを作っています。

f:id:syu_cream:20180821152251p:plain

この図において左端のあるマイクロサービス基盤は、以前の記事で紹介させて頂いた Microservice Platform Team 提供によるものです。 現在はこの基盤上で動作する各マイクロサービスに所定のフォーマットで標準出力に吐いてもらって、 Stackdriver Logging を介して Cloud Pub/Sub に集約することを考えています。

tech.mercari.com

Cloud Pub/Sub に集約されたイベントログは、 Cloud Dataflow を使って回収してデータ利用者の望む格納先に書き出します。 今のところのメインターゲットとしては、メルカリで長い利用実績がある BigQuery としています。 また Cloud Dataflow のジョブを実装するにあたり、 Apache Beam Java SDK をラップして抽象度を高め、便利関数もいくつか備えた spotify 製の Scala 向けライブラリ scio を利用しています。

その他、イベントログについては Protocol Buffer で定義することを考えています。 Protocol Buffer はメルカリ・メルペイのマイクロサービスにおいてサービスやメッセージを定義するのに広く採用されているため技術スキルの再利用性も高く、複数言語のライブラリの生成にも対応しており、また世の中に便利な protoc plugin が複数存在するため親和性が高いと考えています。

おわりに

本記事で紹介させて頂いたのはほんの一部で、 DataPlatform では他にも各マイクロサービスの保持するデータベースからのデータダンプやメタデータの管理、セキュリティへの配慮など取り組むべき課題が数多く存在します。 我々はマイクロサービスアーキテクチャ前提の新しいプロダクト開発の流れの中でより良いデータ収集基盤を構築したい方、新しく困難な課題に果敢に取り組む Go Bold な方を絶賛大募集しております!!

[merpay]ソフトウェアエンジニア(DataPlatform) / メルカリ