PC依存エンジニアのブログ

開発者向けにIT関連の情報をお届けしています。特にバックエンド開発者向けの内容が多めです。たまにフリーランス情報もお届けしています。

Bonfire Backend #3 に参加①(Origami Pay、Kyash)

Bonfire Backend #3 に参加してきました。
マイクロサービスの製造や、ECサイトのバックエンド側の製造をやってはいましたが、
流行りのCPMやMPMでの決済は関わったことはなかったので非常に楽しかったです。

それにこの唐揚げの山
唐揚げがBonfireしてました!

Bonfire

メモをとったらかなりの量になったので、抜粋して2回に分けて記載していきます。
第1弾は、Origami Pay、Kyashです。

Origami Pay

MPM式でのQRコード決済ができます。
詳細はHP
https://origami.com/origami-pay/

Origami Pay の仕組み

手順としてはこのようになります。
①加盟店で金額を入力してもらい、お支払いコードを発行
②お客様が支払いコードを自分の端末に入力

ところで入力方法は以下の方法があります。
①手入力(カメラが使えないときにも使用できる)
②iBeacon(すでに廃止)
QRコード

iBeaconは初めて聞いたので調べてみました。

iBeacon

Appleが開発しており、BLE規格で非接触型の決済ができる
Android端末でも使用することができます。


BLE規格は、Bluetooth Low Energyの略語で、
極めて省電力で動作する無線通信の技術。通信速度は低速だが、省電力なので長持ちしやすい
といった特徴を持っております。


ただしデメリットがあって、
・電波を使用して通信を行っている分、受信状況が悪くなりがちで、決済に失敗しやすかった
・受信状況が悪いと、失敗したかどうかの判断をすることが困難になることが多かった
・端末によっては、電波の発信場所が異なるため、店員さんやお客さんにとっても負担があった
といった問題があります。


iBeaconと比べると、QRコードであれば、受信状況の影響もなくなるし、端末による戸惑いも少なくなります。
さらにエラーの判断もしやすいため、Origami Payでは徐々にQRコードに移行し、iBeaconは廃止されていきました。


余談ではありますが、
卓越してくると、肉眼でiBeaconの電波が見えてくるらしいです。

ぜひ見たい方はiBeaconを見えるまで使ってみたください。

導入時

導入したのは2015年10月
当初はあまりスマホ決済が普及しておらず、導入した後、使われないので問題が起きているのか確認するのが大変だったそうです。

なので当時は自分たちでカフェに行って、実際に決済を行いながら確認をしていたとのこと。
現在は社内売店に導入して、本番環境さながらテストを行っています。
ただしPOS経由の場合は、実際の店舗で行わなければならないです。

用語

CPMとMAMをご存じない方のために、補足として載せておきます。

CPM

Consumer Presented Modeの略語で、利用者がQRコードを表示し、店員がスキャンして決済します。

MPM

Merchant Presented Modeの略語で、利用者がお店のQRコードを読み取って、決済します。



Kyash

プリペイド式のVisaカードで、チャージやスマホでリアルタイムで管理したり、
現在開発中(Kyash Direct)だが、企業向けにAPIを開放して、パートナー企業がカード発行や決済などを行うことができるようにしている。
kyash.co


サーバサイド

AWS上で動作し、マイクロサービスをGo言語で実装しています。
マイクロサービス間の通信は同期で行っています。

スマホアプリからの通信と、VisaNetからのリクエストを、AWSのEC2インスタンス経由で受け取って処理を行う形になっています。

Visa決済の仕組み

普段カード会社がやるべき処理を内製して作っています。
例えば仮売り上げ処理や売り上げ確定処理などです。

ちなみにこのメッセージのやり取りはvisa特有の電文で行うそうですが、英語で1000ページはあるそうで、毎日眠気との戦いとおっしゃっていました。

内省したことによる利点

本来なら他社に処理を委託するところを、内製してますので、リアルタイム性が実現できます。
また自動でチャージすることも利点として挙げておりました。

課題

Visa決済のシステムで、課題としてあるのは

  • マイクロサービスに分散されているから、履歴の作成が負荷が大きい
  • APIサーバが肥大化している

といったところがあります。

対策

履歴の作成処理の負荷に対してのアプローチ
  • CQRSでシステム全体を更新系と参照系で処理を分散する
  • それぞれの処理は各サービスで処理し、履歴の検索は参照系の責務にする

といったことがあげられました。

APIサーバ 肥大化に対するアプローチ
  • Choreographyでマイクロサービス間のやり取りを非同期連携する
  • AWS SNSからSQSへイベント通知され、興味があるサービスだけが受け取り、処理を行う

これによりマイクロサービス間の通信を行わなくて済むようになりました。

ただしデバッグが大変だったり、 Eventの順番がずれると整合性が取れないといったことがデメリットにあります。

ちなみに自分はSQSのFIFOキューが、開発当初なく、順不同で出力されるStandard Queueを使ってましたが、順番がずれまくって大変な面倒な経験があります。。

用語

簡単に用語をまとめておきます。
いつかまた記事で掘り下げていきたいと思っております。

CQRS

Command and Query Responsibility Segregation(コマンド クエリ責務分離)の略語です。
コマンド側(更新系)とクエリ側(参照系)で完全に機能を分けてしまい、処理分散を図ってしまおうと。
そもそもコマンド側とクエリ側で求められる要件が異なるので、各々に沿ったアーキテクチャで製造することができます。

Choreography

それぞれのサービスが自立して動作し、あらかじめ定められた他のサービスを呼び出す方式です。
ちなみにそれぞれ自立してますので、結果を返すという概念はありません。

Orchestration

ついでにChoreographyと一緒にまとめますと、
各サービスはリクエストに応じて処理を行い、リクエストもとに実行結果をレスポンスとして返す方式です。

補足

builders con tokyo 2019で詳細な説明をしていただけるそうです。
ちなみに自分は行ってみようかと思っています。(嫁が許せば・・・)
builderscon.io