How Scala works at Mercari

4ab3fec3e82ddb19bcadd93ef909a443?s=47 Ryo Okubo
October 17, 2020

How Scala works at Mercari

4ab3fec3e82ddb19bcadd93ef909a443?s=128

Ryo Okubo

October 17, 2020
Tweet

Transcript

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

  2. 2 メルカリとは
 •サービス開始日:2013年7月
 •対応OS:Android、iOS ※Webブラウザからも利用可能 
 •利用料:無料
 ※売れたときの手数料:販売価格の 10% •対応地域・言語:日本・日本語基本仕様


    •累計出品数:15億品を突破
 
 それを必要とする人の手に渡り、使用されることに喜びを感じ、ま た購入者は、多彩かつユニークな商品の中から「宝探し」感覚で 掘り出し物を見つける買い物体験を楽しんでいます。さらに「メル カリ」では、物の売買だけではなく、出品者・購入者間のチャットや 「いいね!」機能を通じて、お客さま間のコミュニケーションも活発 に行われています。 
 フリマアプリ「メルカリ」は、個人が簡単に中古品の売買を行える CtoCマーケットプレイスです。出品者・購入者双方が、安全・安心 な取引を楽しんでいただけるサービスを目指し、「メルカリ」が一時 的に購入代金を預かるエスクロー決済を活用した取引環境の整 備や、簡単かつ手頃な価格の配送オプション、差別化されたユ ニークなお客さま体験を提供しています。多くの出品者は、自分に とって必要でなくなったモノが、 
 2
  3. 3 • 社外に発信している情報は Go が多め ◦ 実際にバックエンド API の実装言語は Go

    が非常に多い • でも一部 Scala も使っているんです! ◦ 当 LT で事例紹介させてください! ◦ Ref. 我々の技術スタック: https://engineering.mercari.com/technology-stack/ メルカリと Scala … ?
  4. 4 • ビッグデータ処理ジョブ実装言語として ◦ Java の資産が多いデータ処理において ◦ Apache Spark, Apache

    Flink ジョブの実装のため • Gatling による負荷テストシナリオ記述のため • その他 Java 代替として メルカリにおける Scala の用途
  5. 5 • kintone に蓄積されたデータを分析に利用したい • kintone Spark connector で kintone

    のレコード取得部分を実装 事例1. Spark による Kintone -> BigQuery データ同期
  6. 6 • 大規模データ基盤では品質の担保が困難 ◦ 信頼できないデータ基盤では、そこから得られた分析結果も信頼できなくなる ◦ 目視でデータの中身を確認できるはずもない • Deequ; AWS

    が公開するデータユニットテストフレームワーク ◦ Apache Spark を利用している、ので Spark のリッチな API を利用可能 ◦ よく使われるテスト項目をサポート ▪ 重複した値が含まれていないか? ▪ NULL が含まれていないか? ▪ 想定したパターン以外の値が含まれていないか? 事例2. Deequ を使ったデータ品質チェック
  7. 7 • より抽象化されたテストシナリオのサポートを構想(開発中) ◦ Spark, Scala の強力な表現能力は嬉しいが、みんなに実装しろと言うのは酷 ◦ YAML にテスト項目を羅列するといい感じに実行されて欲しい

    事例2. Deequ を使ったデータ品質チェック
  8. 8 • Pub/Sub で配送されたログを永続化・配送 • Apache Flink の Scala API

    を用いてジョブを実装 事例3. マイクロサービスのログ収集パイプライン
  9. 9 • Flink ジョブでニアリアルタイムで変換・配送(開発中) ◦ CRM(Customer Relationship Management) 関連用途特化のアプリを開発予定 事例3.

    マイクロサービスのログのストリーミング処理
  10. 10 • MySQL の binlog を BigQuery に配送しニアリアルタイムで分析可能に ◦ ETL

    ジョブで MySQL に巨大クエリを投げるより低負荷でデータ同期可能 ◦ 分析可能になるまでのリードタイムが減少し、不正検知などへの活用が期待できる • 変更ログ送信エージェントを Scala で実装 • 変更ログを BigQuery に insert する Flink ジョブも Scala 製 事例4. CDC(Change Data Capture) パイプライン
  11. 11 • Apache Beam ベースの実装言語にも Scala を一部使用 ◦ For e.g.

    https://github.com/mercari/pubsubloader • データ処理から派生して、スキーマ管理ツールも Scala で一部実装 余談