$30 off During Our Annual Pro Sale. View Details »

fake clock microservice -時刻をハックしてテストする方法- / The...

mercari
October 14, 2023

fake clock microservice -時刻をハックしてテストする方法- / The “Fake Clock” Microservice: How to Hack the Time for Testing

メルペイのあと払いやメルペイスマートマネーでは、請求書を2ヶ月延滞した状態などをテストしたいケースがあります。
現実時間で2ヶ月かけてテストするのは非効率すぎるため、時刻をハックして短時間でテストを終わらせる仕組み(fake clock)を用意しています。複数のマイクロサービスにまたがる場合にどのような課題があるのか、またどのように解決しているのかについて開発者が語ります。

For Merpay deferred payments and Merpay Smart Money, there are cases where our engineers wanted to use invoices that were two months overdue in tests.
Since running tests in real time over a period of two months was too inefficient, the team created a hack that allows them to complete tests in a shorter amount of time by using a mechanism called fake clock.
In this session, the developers discuss the issues they encountered when a test straddled multiple microservices and how they resolved this.

------
Merpay & Mercoin Tech Fest 2023は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイ・メルコインの技術スタックに興味がある方々を対象に2023年8月22日(火)、23日(水)、24日(木)の3日間、開催します。 Merpay & Mercoin Tech Fest は事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りです。

今年のテーマは「Unleash Fintech」。 メルペイ・メルコインのこれまでの技術的な取り組みはもちろん、メルカリグループのFintech事業における新たな挑戦をお伝えします。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチなど多面的にご紹介予定です。

メルペイ・メルコインが今後どのようにUnleash(解放)していくのか、ぜひ見に来てください。

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2023/
- 申し込みページ:https://mercari.connpass.com/event/286670/
- Twitterハッシュタグ: #MerpayMercoinTechFest
■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari

October 14, 2023
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. vvakame Solutionsチームで働くねこ大好きエンジニ ア。GoとかGraphQLとかが得意。今回は社 内ツール作成第一人者(自称)として fakeclock改善に乗り出した。 Merpay Solutions Team Hiraku Nakano

    Merpay Credit Design Team 2021年1月にメルペイに入社。 Credit Design チームのバックエンドエンジニアとして、日々 信用を創造してなめらかな社会を創ってい る。 Merpay Credit Design Team Hiroyuki Tanaka 2015年メルカリ入社。メルペイでは銀行接 続、NFC決済など色々な microserviceの Tech Leadを経て、今はCredit Designチーム のバックエンドエンジニアとして従事。
  2. よくあるテスト方法 • システム時刻を8/1に変更 ◦ 購入をテスト • システム時刻を9/1に変更 ◦ 請求バッチをテスト •

    システム時刻を10/1に変更 ◦ 延滞バッチをテスト ◦ 延滞後の支払いをテスト • ...
  3. 環境を専有する 環境自体の時刻を固定化してしまうため、設定を分割するために 複数のマイクロサービス環境を用意しているが、無駄が多い • システム時刻を8/1に変更 ◦ 購入をテスト • システム時刻を9/1に変更 ◦

    請求バッチをテスト • システム時刻を10/1に変更 ◦ 延滞バッチをテスト ◦ 延滞後の支払いをテスト • ... A service B service C service • システム時刻を8/1に変更 ◦ 購入をテスト • システム時刻を9/1に変更 ◦ 請求バッチをテスト • システム時刻を10/1に変更 ◦ 延滞バッチをテスト ◦ 延滞後の支払いをテスト • ... A service B service C service Aさんがテストする環境 Bさんがテストする環境
  4. メタデータ案で問題視された点 • 伝播がどうしても止まってしまう箇所があった ◦ 例: 社外システム • ルート上のどこかにメタデータの伝播の未実装があると、 動作がおかしくなる service

    A service B service C service D 社外システム Z {"now": "2023-07-01"} メタデータハンドリング 未実装 コールバックが 真の現在時刻で返ってくる
  5. fakeclock service案 Pros ✅ テストがユーザー単位のため、別ユーザーを使えば並列性は確保 できる ✅ 外部システムが系に入っていても、時刻を強制的に復元できる ✅ サービス毎の実装を共通化する効果

    ✅ 未実装サービスがあっても、導入済みサービスは恩恵がある Cons 😇 本番環境と構成が違う 😇 新たなサービス運用 (テスト環境限定のSPOF)
  6. パネルディスカッション (テーマ) • 今どこまで進んでいるのか • 導入時のQAどうするのか問題 • グループ全体から見た位置づけ • 時刻操作あるあるトーク

    ◦ OS時刻ずらしすぎてtokenが失効して通信できなくなる • マイクロサービスとe2eテスト • ここがすごいよ新fakeclockサービス