Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ポイント付与の非同期化 / Event Driven Point Assignment

omo
September 12, 2022

ポイント付与の非同期化 / Event Driven Point Assignment

omo

September 12, 2022
Tweet

More Decks by omo

Other Decks in Technology

Transcript

  1. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    ポイント付与の非同期化
    メッセージング基盤を用いたマイクロサービス連携
    2022/09/12 Omotani Kouhei

    View Slide

  2. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    2
    本日の
    流れ
    1. 自己紹介
    2. 背景
    3. 構成変更の方針
    4. 展望
    5. 最後に
    Today's Flow

    View Slide

  3. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    自己紹介
    - Omotani Kouhei
    - Twitter: @k_omotani
    - KyashID: @komotani
    - 2020年2月入社
    - 携わった機能
    - カテゴリー機能、共有口座機能、他
    (「面白かったら投げ銭お願いします」をやりたかったのでチャレンジ)
    3

    View Slide

  4. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    4
    本日の
    流れ
    1. 自己紹介
    2. 背景
    3. 構成変更の方針
    4. 展望
    5. 最後に
    Today's Flow

    View Slide

  5. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    先にちょっとKyashリワードの宣伝
    「お買い物」タブを押してもらうと色々なお店が出てきます。
    ここからお買い物をしていただくとKyashポイントとして
    還元されるのでぜひ使ってみてください!
    Kyashリワード
    5

    View Slide

  6. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    Kyashポイントについて
    決済、Kyashリワード、友達紹介特典など
    特定の条件を満たすと付与される。
    決済の場合、決済時(オーソリが来たタイミング)に
    金額に応じて獲得予定ポイントが付与される。
    売り上げ確定時(SalesDraftが来たタイミング)に
    ポイントが確定する。
    6

    View Slide

  7. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    Kyashの決済処理では決済による残高変動とポイント付与などが一つのトランザクションで処理されている。
    トランザクション自体は別れているが決済後のPush通知サービスへのリクエストやお知らせの作成なども同一のサービス
    で行っている。
    これによりポイント付与処理中に何かしら問題が起きると決済自体が失敗してしまう。
    7

    View Slide

  8. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    Kyashでは決済のルートとしてVisaとQUICPay+が存在する。
    そもそもの電文が来るルートが違い、別々のサービスとして存在している。
    他にもKyashリワードや、招待特典などさまざまな経路でポイントがつく。
    ポイントの実体は共有データベース上のテーブルに入っていてそれぞれのサービスが同じDBに書き込む形になっている。
    8

    View Slide

  9. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    実装レベルだとポイント処理周りはライブラリとして切り出されており、
    各Repositoryがそのライブラリ経由でDBにアクセスするようにはなっている
    Kyashとしては各サービスに閉じているデータソースは独自DBして切り出そうとしており、
    この状況は大きな隔たりになっている。
    9

    View Slide

  10. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    背景
    課題
    - ポイント付与処理を複数サービスに書かないといけない
    - DB分割したい(できるような道筋が欲しい)
    - ポイント付与で転けた場合決済がコケる ←金融系事業者として一番大事
    10

    View Slide

  11. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    11
    本日の
    流れ
    1. 自己紹介
    2. 背景
    3. 構成変更の方針
    4. 展望
    5. 最後に
    Today's Flow

    View Slide

  12. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    課題
    - ポイント付与処理を複数サービスに書かないといけない
    - DB分割したい(できるような道筋が欲しい)
    - ポイント付与で転けた場合決済がコケる
    →複数サービスからの同期的な共有DBへの書き込みをやめる
    構成変更の方針
    12

    View Slide

  13. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    13
    複数サービスからの
    同期的な共有DB書き込み

    Event Drivenな非同期化

    View Slide

  14. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    複数サービスから同期的な共有DBへの書き込み→AWS SNS/SQSを用いたEvent Drivenな非同期化
    「Visaで決済を行った」や「QUICPay+で決済を行った」のようなイベントをmessageとしてSNSに投げる。
    ポイント付与サービスを立てそこがconsumerとしてmessageを食いポイントを付与する。
    構成変更の方針
    14

    View Slide

  15. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    なぜSNSを挟んでいるのか?
    →複数サービスへのfanoutを想定。
    「決済時にPush通知/emailを送信する」のような機能を実現したい場合、
    上流のサービス全てに同じ実装を追加する必要があった。この基盤に乗るとConsumerを追加するだけでOK。
    → Message Bus Pattern
    構成変更の方針
    15

    View Slide

  16. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    当初fanoutのためにEvent Bridgeを考えていた。
    - Eventbridge経由だとMessage Attributeを送ることが今の所できない(要望は出してる)
    - 柔軟にペイロードを操作したい/ルーティングをきめ細やかに実施したいならEventBridge
    - 高速に処理したいならSNS
    失敗したメッセージの再送はDLQからの積み直しで可能。
    構成変更の方針
    16

    View Slide

  17. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    ちなみに...
    Kyashが昔開発していたtoBサービスのKyash Directでも
    SNS/SQSを用いたEvent Drivenのシステムを構築していた。
    (さらにevent sourcingとかもやっていて中々尖っていましたが)
    ↓面白い資料なのでぜひに
    ウォレットアプリKyashの先 〜 Kyash Directのアーキテクチャ
    構成変更の方針
    17

    View Slide

  18. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    18
    本日の
    流れ
    1. 自己紹介
    2. 背景
    3. 構成変更の方針
    4. 展望
    5. 最後に
    Today's Flow

    View Slide

  19. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    展望
    - 現状ポイント付与の全ての処理がこの仕組みに移行しているわけではない
    - 順次移行予定
    - DB分割はできていない
    - consumerが共有DBのテーブルをみてる状態
    - 完全にポイント付与処理の移行ができればDBを切り出すことは可能になる
    - 非同期でも問題ない処理に関してはこの基盤に乗ることで後続の処理を気にせずに実装できる
    - ポイント付与に限らない
    - 例えばアカウント作成時に期限付き残高を付与しているがこれも移行できそう
    - 直近としては通知周りを移行予定
    - これによりコレオグラフィーなマイクロサービスが実現できる
    19

    View Slide

  20. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    20
    本日の
    流れ
    1. 自己紹介
    2. 背景
    3. 構成変更の方針
    4. 展望
    5. 最後に
    Today's Flow

    View Slide

  21. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    21
    Kyashではメンバーを絶賛募集中です!!!
    少しでも興味があるという方は
    カジュアル面談もやっているので
    ガンガン応募してください!!
    よろしくお願いします!!
    →Kyashエンジニアの採用面接ガイド

    View Slide

  22. ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    ©2022 Kyash Inc. PROPRIETARY & CONFIDENTIAL
    Thank you
    2022.09.12
    Omotani Kouhei
    22

    View Slide