メルペイでバックエンドエンジニアをしている@ryuyamaです。
2022年8月23日(火)から3日間のオンライン技術カンファレンス「Merpay Tech Fest 2022」を開催しました。
今年のMerpay Tech Festではトークセッションだけではなく、より参加者とコミュニケーションを取れるようなコンテンツを作ってみようということで、「参加者全員で力を合わせて仕込まれているバグを見つける」というテーマのワークショップを企画しました。Merpay Tech Festの一日目と三日目に各3時間、約20人の方にご参加いただき、参加者の80%以上の方が満足をしていただく結果となりました。
本記事では、ワークショップの内容について紹介します。
コンテンツ
メルカリでは以前、Mercari Microservices Exampleという手元で動くマイクロサービスのデモを公開しており、今回はこのデモをメルペイならではの決済マイクロサービスに作り変えました。
そして、メルペイの技術スタックを体験していただけるように、Goやマイクロサービス、決済の開発において陥りがちなバグを多数仕込みました。
用意したマイクロサービスでは決済を行うための最小限の機能
- ユーザーの作成
- 残高の付与/照会
- 決済の作成(オーソリ-キャプチャー)
を行うことが出来るようにしました。
仕込んだ間違い
本番では15個のバグや不適切なコードを仕込みましたが、ここではその中から一部を紹介します。
(1)nilerr
(左が正しいコード、右がバグとなっています。)
うっかりreturn err
するべきところでnilを返してしまっています。
ちなみにこれは静的解析ツールで検出できます。
(2)10秒のつもりが10ナノ秒
Goのtimeパッケージでは、1 = 1 ナノ秒
となっていることに注意しなくてはいけません。コメントで// [s]と書いてあるところもポイントです。こちらも静的解析ツールで検出できます。
(3)デバッグコードに個人情報
これはユーザーの残高を取得する関数ですが、ユーザーIDと残高をログ出力してしまっています。個人情報を扱うサービスでは、ログの内容にも気を使わなくてはいけません。
(4)不適切な冪等性キー
このAPIは冪等性キーを利用して、一回実行しても複数回実行しても同じ結果になることを期待していますが、冪等性が破れてしまっています。
メルペイのAPIではマイクロサービスが冪等性のあるAPIを提供することが重要です。APIを利用する上位のマイクロサービスは、不整合が生じてもAPIをリトライすることによって安全に不整合を修復することが出来ます。
Tech Talk vol.2 Backend Engineer 〜マイクロサービスの冪等性〜
さいごに
今年のMerpay Tech Festでは、ワークショップを2回開催しました。参加者には学生、普段仕事でGoを使われている方、そうでない方など、さまざまなバックグランドを持った方がいらっしゃいました。それぞれのバックグランドは違っても、チームごとに活発に議論をしていただけていました。今回のようなワークショップは初めての試みでしたが、次回以降更によいコンテンツにしていきたいと思っています!
↓作っていただいたPR