SlideShare a Scribd company logo
Submit Search
Upload
Goで実装した UPSIDERの決済金額リミット機能
Report
Share
M
Miki Masumoto
Follow
•
3 likes
•
2,148 views
1
of
25
Goで実装した UPSIDERの決済金額リミット機能
•
3 likes
•
2,148 views
Report
Share
Download Now
Download to read offline
Technology
こちらのイベントで話した内容です! Tech Meetup 〜Goで作る決済サービス〜 https://upsider.connpass.com/event/254313/
Read more
M
Miki Masumoto
Follow
Recommended
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24 by
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
2.6K views
•
33 slides
分散システムについて語らせてくれ by
分散システムについて語らせてくれ
Kumazaki Hiroki
119.4K views
•
45 slides
エンジニアの個人ブランディングと技術組織 by
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
23.3K views
•
40 slides
君はyarn.lockをコミットしているか? by
君はyarn.lockをコミットしているか?
Teppei Sato
30.4K views
•
25 slides
Docker Compose 徹底解説 by
Docker Compose 徹底解説
Masahito Zembutsu
61.1K views
•
123 slides
コンテナ未経験新人が学ぶコンテナ技術入門 by
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
140.3K views
•
89 slides
More Related Content
What's hot
僕がつくった 70個のうちの48個のWebサービス達 by
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
18.8K views
•
121 slides
入門!Jenkins by
入門!Jenkins
Shuntaro Saiba
6.6K views
•
84 slides
AWSのログ管理ベストプラクティス by
AWSのログ管理ベストプラクティス
Akihiro Kuwano
77.2K views
•
57 slides
超実践 Cloud Spanner 設計講座 by
超実践 Cloud Spanner 設計講座
Samir Hammoudi
21.3K views
•
26 slides
DockerとPodmanの比較 by
DockerとPodmanの比較
Akihiro Suda
47.8K views
•
37 slides
フロー効率性とリソース効率性について #xpjug by
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
106.1K views
•
62 slides
What's hot
(20)
僕がつくった 70個のうちの48個のWebサービス達 by Yusuke Wada
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
•
18.8K views
入門!Jenkins by Shuntaro Saiba
入門!Jenkins
Shuntaro Saiba
•
6.6K views
AWSのログ管理ベストプラクティス by Akihiro Kuwano
AWSのログ管理ベストプラクティス
Akihiro Kuwano
•
77.2K views
超実践 Cloud Spanner 設計講座 by Samir Hammoudi
超実践 Cloud Spanner 設計講座
Samir Hammoudi
•
21.3K views
DockerとPodmanの比較 by Akihiro Suda
DockerとPodmanの比較
Akihiro Suda
•
47.8K views
フロー効率性とリソース効率性について #xpjug by Itsuki Kuroda
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
106.1K views
テストコードの DRY と DAMP by Yusuke Kagata
テストコードの DRY と DAMP
Yusuke Kagata
•
1.6K views
マイクロサービスにおける 結果整合性との戦い by ota42y
マイクロサービスにおける 結果整合性との戦い
ota42y
•
12.3K views
Google Cloud のネットワークとロードバランサ by Google Cloud Platform - Japan
Google Cloud のネットワークとロードバランサ
Google Cloud Platform - Japan
•
6.5K views
BuildKitによる高速でセキュアなイメージビルド by Akihiro Suda
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
•
42.6K views
目grep入門 +解説 by murachue
目grep入門 +解説
murachue
•
89.4K views
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善 by Ito Takayuki
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
•
528 views
イベント・ソーシングを知る by Shuhei Fujita
イベント・ソーシングを知る
Shuhei Fujita
•
31K views
DockerコンテナでGitを使う by Kazuhiro Suga
DockerコンテナでGitを使う
Kazuhiro Suga
•
18.8K views
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話) by Tokoroten Nakayama
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
Tokoroten Nakayama
•
9.4K views
本当は恐ろしい分散システムの話 by Kumazaki Hiroki
本当は恐ろしい分散システムの話
Kumazaki Hiroki
•
686.1K views
コンテナの作り方「Dockerは裏方で何をしているのか?」 by Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
•
30.8K views
世界一わかりやすいClean Architecture by Atsushi Nakamura
世界一わかりやすいClean Architecture
Atsushi Nakamura
•
47.1K views
分散トレーシング技術について(Open tracingやjaeger) by NTT Communications Technology Development
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
23.3K views
ChatGPT 人間のフィードバックから強化学習した対話AI by Shota Imai
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
•
106K views
Similar to Goで実装した UPSIDERの決済金額リミット機能
2020.02.14「雇用類似の働き方に係る論点整理等に関する検討会」フリーランス協会平田資料 by
2020.02.14「雇用類似の働き方に係る論点整理等に関する検討会」フリーランス協会平田資料
プロフェッショナル&パラレルキャリア・フリーランス協会
638 views
•
36 slides
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210 by
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
Osamu Ise
2.8K views
•
79 slides
ブレークスルーキャンプ By IMJ キックオフイベント by
ブレークスルーキャンプ By IMJ キックオフイベント
ブレークスルーパートナーズ 赤羽雄二
2.3K views
•
75 slides
20121022 paidcontent nojima by
20121022 paidcontent nojima
一般社団法人メディア事業開発会議
1.2K views
•
18 slides
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』 by
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』
Ryo RKTM
1.1K views
•
32 slides
Dチーム_佐藤、浜野、三井、矢島、山根 by
Dチーム_佐藤、浜野、三井、矢島、山根
Jumpei Yamane
592 views
•
18 slides
Similar to Goで実装した UPSIDERの決済金額リミット機能
(20)
2020.02.14「雇用類似の働き方に係る論点整理等に関する検討会」フリーランス協会平田資料 by プロフェッショナル&パラレルキャリア・フリーランス協会
2020.02.14「雇用類似の働き方に係る論点整理等に関する検討会」フリーランス協会平田資料
プロフェッショナル&パラレルキャリア・フリーランス協会
•
638 views
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210 by Osamu Ise
【Halo】スマホアプリ3つの法則 ボケてをアプリ化するときにやったこと121210
Osamu Ise
•
2.8K views
ブレークスルーキャンプ By IMJ キックオフイベント by ブレークスルーパートナーズ 赤羽雄二
ブレークスルーキャンプ By IMJ キックオフイベント
ブレークスルーパートナーズ 赤羽雄二
•
2.3K views
20121022 paidcontent nojima by 一般社団法人メディア事業開発会議
20121022 paidcontent nojima
一般社団法人メディア事業開発会議
•
1.2K views
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』 by Ryo RKTM
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』
Ryo RKTM
•
1.1K views
Dチーム_佐藤、浜野、三井、矢島、山根 by Jumpei Yamane
Dチーム_佐藤、浜野、三井、矢島、山根
Jumpei Yamane
•
592 views
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』 by モノビット エンジン
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
モノビット エンジン
•
6.4K views
解剖!テレワーク普及の秘訣、導入ノウハウ、業績向上とのつながり by Tomohiro KIMURA
解剖!テレワーク普及の秘訣、導入ノウハウ、業績向上とのつながり
Tomohiro KIMURA
•
6.2K views
大規模JSプロジェクト ロードオブナイツの管理手法紹介 2012-11-06 by 俊仁 小林
大規模JSプロジェクト ロードオブナイツの管理手法紹介 2012-11-06
俊仁 小林
•
5.2K views
リーンスタートアップ時代の事業計画とサービス開発、資金調達のあり方 by ブレークスルーパートナーズ 赤羽雄二
リーンスタートアップ時代の事業計画とサービス開発、資金調達のあり方
ブレークスルーパートナーズ 赤羽雄二
•
14.2K views
巨大決済システムに関わる仕事 by Yahoo!デベロッパーネットワーク
巨大決済システムに関わる仕事
Yahoo!デベロッパーネットワーク
•
508 views
Payjp by yoshichiba
Payjp
yoshichiba
•
3.2K views
「コンバージョン数を2倍にしてくれ」と言われた時の対処法 by Tsuyoshi Kaneko
「コンバージョン数を2倍にしてくれ」と言われた時の対処法
Tsuyoshi Kaneko
•
10.8K views
ITでみんなを幸せに、ITで自分も幸せに by suno88
ITでみんなを幸せに、ITで自分も幸せに
suno88
•
779 views
Hour of-code-2016冬-シンポジウム by Yuta Tonegawa
Hour of-code-2016冬-シンポジウム
Yuta Tonegawa
•
1.1K views
第1回 継続率経営セミナー 公開資料 by pLucky
第1回 継続率経営セミナー 公開資料
pLucky
•
4.9K views
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~ by Koichiro Sumi
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
Koichiro Sumi
•
7.1K views
Redmineをつかったスクラム開発のはじめの一歩 by kiita312
Redmineをつかったスクラム開発のはじめの一歩
kiita312
•
24.2K views
Fit26 by Masa Tadokoro
Fit26
Masa Tadokoro
•
899 views
フリーランスエンジニアを半年間やってみた by Ohira Yukito
フリーランスエンジニアを半年間やってみた
Ohira Yukito
•
3.1K views
Recently uploaded
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development site
Atomu Hidaka
80 views
•
41 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.
51 views
•
29 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
97 views
•
64 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
18 views
•
38 slides
SNMPセキュリティ超入門 by
SNMPセキュリティ超入門
mkoda
301 views
•
15 slides
IPsec VPNとSSL-VPNの違い by
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
328 views
•
8 slides
Recently uploaded
(11)
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development site
Atomu Hidaka
•
80 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.
•
51 views
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
97 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
18 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門
mkoda
•
301 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
328 views
JJUG CCC.pptx by Kanta Sasaki
JJUG CCC.pptx
Kanta Sasaki
•
6 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
•
104 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
41 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023
法林浩之
•
94 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdf
icebreaker4
•
287 views
Goで実装した UPSIDERの決済金額リミット機能
1.
Goで実装した UPSIDERの決済金額リミット機能 株式会社 UPSIDER Miki Masumoto 1 Gopherは「Go」のマスコットキャラクター、原作者は
Renee French さんです。以降のページも同様。
2.
自己紹介 ● Masumoto Miki ●
2022/1からUPSIDERにJOIN ○ Sler→フリーランス→UPSIDER ● Gopher歴は1年ほど ○ JavaとJavaScript/TypeScriptをよく書いてました ● 常にワーケーション中 2
3.
UPSIDERについて ● 成長企業向けの法人カード、支払いプラットフォームを提供 ● ビジネスの「お金」を呼吸感覚まで自在に 3
4.
Today’s goal 決済というクリティカルかつリアルタイム性が 求められるシステムで Goをどう活用しているのかを知ってもらうこと 4
5.
目次 ● 決済システムの概要 ● 決済金額リミットを扱う機能の紹介 ●
実装のポイントとGoのコードサンプル ● Goで書いてよかったところ 5
6.
カード決済の流れ 6 カード決済 システム 加盟店 オーソリ(承認要求) クリアリング(売上確定) ◯◯円で決済します OK/NG ◯◯円請求します カード利用者
7.
決済金額のリミット機能とは? 決済が飛んできた時にチェックされる金額上限 1.企業ごとの決済金額リミット 2.ユーザーごと1取引の決済金額リミット 3.ユーザーごとの月間決済金額リミット 毎月1日0時にリセット 4.ユーザーごとの日次決済金額リミット 毎日0時にリセット ユーザごとのリミットはユーザが任意で設定可能 7
8.
決済金額リミット関連の処理たち ● 決済金額のリミットを設定/解除する ○ WEB画面からの操作によって呼ばれる ●
DBからのトータル決済額の読み込み・書き込み ○ オーソリ・クリアリングなどが飛んできた時に呼ばれる ● トータル金額のリセット ○ システム内部のバッチで呼ばれる 8
9.
決済金額リミット関連のデータを扱うstruct 9
10.
実装のポイント① 柔軟な金額リミット機能 10
11.
実装のポイント① 柔軟な金額リミット機能 11 今後、もっと柔軟なリミット機能が欲しくなるかも ● 週ごと/期ごとにリミットを持たせたい...
etc ● 毎月20日/15日など間隔は同じで特定日や時間にリセットしたい
12.
実装のポイント① 柔軟な金額リミット機能 12 💡新しいリミットのタイプを実装したい 👉次回のリセットのタイミングを計算するロジックだけ作れば実装できる
13.
実装のポイント① 柔軟な金額リミット機能 13 👉次回リセット日時(NextResetAt)を変えることで実現できる 💡既存のリミット間隔で特定の日付・時間にリセットしたい ● 20日にリセットされる月間リミット 7/1
8/1 9/1 リミットの設定をする NextResetAt = 7/20 リセット処理が走る NextResetAt = 8/20 LastResetAt = 7/20 7/17 7/20 8/20
14.
実装のポイント② 安全なトータル金額のリセット 14
15.
実装のポイント② 安全なトータル金額のリセット 15 トータル金額リセット時の懸念 ● リセット時刻にリセットする処理が遅延/失敗したら? ●
オーソリなどのリアルタイムで飛んでくる決済が同時に飛んできたら?
16.
実装のポイント② 安全なトータル金額のリセット 16 💥ケース1:リセット処理がまだなのにオーソリが飛んできてしまった 単純な、トータル金額を0円にするリセット処理ではなぜダメなのか 00:00:00 00:00:01 23:59:59 トータル金額 0時にリセットされる1日あたりの決済金額リミットの例 10000円
13000円 0円 オーソリ 3000円 リセット処理の実行 本当の トータル金額 10000円 3000円 3000円 合わない
17.
実装のポイント② 安全なトータル金額のリセット 17 💥ケース2:日付が変わる直前にオーソリが飛んできて処理中にリセットが走った 単純な、トータル金額を0円にするリセット処理ではなぜダメなのか 00:00:00 00:00:01 23:59:59 トータル金額 0時にリセットされる1日あたりの決済金額リミットの例 10000円
0円 4000円 オーソリ 4000円(処理に時間がかかった) リセット処理の実行 本当の トータル金額 10000円 0円 0円 合わない
18.
実装のポイント② 安全なトータル金額のリセット 18 リセット前後のトータル金額も保持し、取得時刻から使われるべきトータル金額を判断する
19.
実装のポイント② 安全なトータル金額のリセット 19 トータル金額リセット処理は0にするのではなく、次の断面にスライドさせる
20.
Goのよかったところ① 20 ● 言語仕様がシンプルで既存コードのキャッチアップしやすい 処理の流れと分岐が追いやすい
21.
Goのよかったところ② 21 ● 抽象化の機能が限られているので、個別ケースの扱いに困ったり 過度な抽象化による難読コードを書くリスクを避けられる 抽象化していないことで コードを追いやすい 似た振る舞いのstruct
22.
Goのよかったところ③ 22 ● エラーハンドルが必ず入るのでバグに気付きやすい いろんなところにif err If
errを書きながら不具合に気づく Try catchのネストもない
23.
Goのよかったところ④ 23 ● ほぼ標準ライブラリで開発が可能(特にテストで嬉しい) テストカバレッジも自動で出してくれる🎉 標準ライブラリで テーブル駆動テストが簡単に書ける
24.
まとめ 24 📍 決済というクリティカルかつリアルタイム性が求められるシステムで Goをどう活用しているのか? 💪 考えることが多い要件や仕様でもGoのシンプルな言語仕様を生かし レビューしやすく見通しの良いコードを書くことによって 堅牢なシステム作りをしています
25.
Thank you for listening. 25 We
are hiring! @masumomo @m_miki0108
Editor's Notes
さて、先ほどの図で出てきたカード決済システムがUPSIDERではどんな構成になっているかみてみます。 弊社はマイクロサービスを採用していて、複数のサービスによって構成されています。 先ほどの話でてできた、オーソリとかクリアリングと呼ばれる電文は私たちの場合はVisaNetと呼ばれるVisaのネットワークから飛んできます。 そこからUPSIDERのゲートウェイやルータなどを介して、オーソリ、クリアリングなどの電文ごとのハンドラーに渡されます。 そこからさらに各ドメインを担当しているReaderやWriterと呼ばれるマイクロサービスたちを呼び出すといった流れです。 今回のメインテーマである決済金額のリミットの機能も、ユーザの利用金額を管理するサービスとして独立しています。 ではその決済金額のリミット機能の紹介に入っていきます。が、