デジタルイノベーションラボの齋藤です。
今回はQUOカードPayシステムのバックエンドで利用している技術を紹介します。
以下のような技術/サービス/ツールを利用しています。
バックエンドの言語
決済アプリになるので出来るだけ問題を検出しやすいようにしたいと考え、まず静的型付け言語で進める方向で検討をはじめました。その時の候補はJava,Scala,Kotlin,Goです。
実際にシステムを開発する際はプログラミング言語だけでなくフレームワークも重要な要素になると思いますが、KotlinであればJavaの資産も利用でき、またJavaより冗長さが無く良いのではと考えサーバーサイドKotlinを選択しました。 Goは決済システムのバックエンドとしてはプリミティブすぎるのではないかと考え、Scalaは表現力が高いと思いますがメンバーによる差が出やすいと考え選択肢から外しました。
ちなみにGoはLambdaで使っています。
フレームワーク
リリース時はシンプルな部分のみ作っていたことやスケジュール的な都合等色々あり、Lambdaでgoを動かしていました。以下の通り現在解消されたそうですが、当時は色々課題があり、順次Fargateに移行しようとしてました。
今年がサーバーレス元年な理由. それはLambdaに以下が揃ったから.
— Keisuke Nishitani (@Keisuke69) 2020年1月19日
・カスタムランタイムで実質どんな言語でも利用可能
・VPC利用時のコールドスタート改善
・Provisioned Concurrencyでスパイク対応も可能
・RDS ProxyでRDBとの接続が現実的に
これまで5年で受けたフィードバックがついに結実. 強い
Fargate移行後はメンバーの経験しているSpring Bootを利用していましたが、以下きしださんのスライドで説明されているように現在はコンテナの起動時間を考慮しMicronautも利用しています。
O/R Mapperは最初はDomaを利用していましたが、今後jOOQが主流になりそうな雰囲気を感じたのでjOOQを導入しました。今後は以下のExposedがどうなるのかが気になっています。
インフラ
AWSを利用しています。Fargate上にデプロイしています。細かい部分ではgoをLambdaで動かしています。DBはAurora PostgreSQLを主に使っています。