Slide 1

Slide 1 text

1 Scala がメルカリでどう動くか? ScalaMatsuri 2020 LT slides

Slide 2

Slide 2 text

2 メルカリとは
 ●サービス開始日:2013年7月
 ●対応OS:Android、iOS ※Webブラウザからも利用可能 
 ●利用料:無料
 ※売れたときの手数料:販売価格の 10% ●対応地域・言語:日本・日本語基本仕様
 ●累計出品数:15億品を突破
 
 それを必要とする人の手に渡り、使用されることに喜びを感じ、ま た購入者は、多彩かつユニークな商品の中から「宝探し」感覚で 掘り出し物を見つける買い物体験を楽しんでいます。さらに「メル カリ」では、物の売買だけではなく、出品者・購入者間のチャットや 「いいね!」機能を通じて、お客さま間のコミュニケーションも活発 に行われています。 
 フリマアプリ「メルカリ」は、個人が簡単に中古品の売買を行える CtoCマーケットプレイスです。出品者・購入者双方が、安全・安心 な取引を楽しんでいただけるサービスを目指し、「メルカリ」が一時 的に購入代金を預かるエスクロー決済を活用した取引環境の整 備や、簡単かつ手頃な価格の配送オプション、差別化されたユ ニークなお客さま体験を提供しています。多くの出品者は、自分に とって必要でなくなったモノが、 
 2

Slide 3

Slide 3 text

3 ● 社外に発信している情報は Go が多め ○ 実際にバックエンド API の実装言語は Go が非常に多い ● でも一部 Scala も使っているんです! ○ 当 LT で事例紹介させてください! ○ Ref. 我々の技術スタック: https://engineering.mercari.com/technology-stack/ メルカリと Scala … ?

Slide 4

Slide 4 text

4 ● ビッグデータ処理ジョブ実装言語として ○ Java の資産が多いデータ処理において ○ Apache Spark, Apache Flink ジョブの実装のため ● Gatling による負荷テストシナリオ記述のため ● その他 Java 代替として メルカリにおける Scala の用途

Slide 5

Slide 5 text

5 ● kintone に蓄積されたデータを分析に利用したい ● kintone Spark connector で kintone のレコード取得部分を実装 事例1. Spark による Kintone -> BigQuery データ同期

Slide 6

Slide 6 text

6 ● 大規模データ基盤では品質の担保が困難 ○ 信頼できないデータ基盤では、そこから得られた分析結果も信頼できなくなる ○ 目視でデータの中身を確認できるはずもない ● Deequ; AWS が公開するデータユニットテストフレームワーク ○ Apache Spark を利用している、ので Spark のリッチな API を利用可能 ○ よく使われるテスト項目をサポート ■ 重複した値が含まれていないか? ■ NULL が含まれていないか? ■ 想定したパターン以外の値が含まれていないか? 事例2. Deequ を使ったデータ品質チェック

Slide 7

Slide 7 text

7 ● より抽象化されたテストシナリオのサポートを構想(開発中) ○ Spark, Scala の強力な表現能力は嬉しいが、みんなに実装しろと言うのは酷 ○ YAML にテスト項目を羅列するといい感じに実行されて欲しい 事例2. Deequ を使ったデータ品質チェック

Slide 8

Slide 8 text

8 ● Pub/Sub で配送されたログを永続化・配送 ● Apache Flink の Scala API を用いてジョブを実装 事例3. マイクロサービスのログ収集パイプライン

Slide 9

Slide 9 text

9 ● Flink ジョブでニアリアルタイムで変換・配送(開発中) ○ CRM(Customer Relationship Management) 関連用途特化のアプリを開発予定 事例3. マイクロサービスのログのストリーミング処理

Slide 10

Slide 10 text

10 ● MySQL の binlog を BigQuery に配送しニアリアルタイムで分析可能に ○ ETL ジョブで MySQL に巨大クエリを投げるより低負荷でデータ同期可能 ○ 分析可能になるまでのリードタイムが減少し、不正検知などへの活用が期待できる ● 変更ログ送信エージェントを Scala で実装 ● 変更ログを BigQuery に insert する Flink ジョブも Scala 製 事例4. CDC(Change Data Capture) パイプライン

Slide 11

Slide 11 text

11 ● Apache Beam ベースの実装言語にも Scala を一部使用 ○ For e.g. https://github.com/mercari/pubsubloader ● データ処理から派生して、スキーマ管理ツールも Scala で一部実装 余談