「100億円あげちゃうキャンペーン」でキャッシュレス決済市場に一大旋風を巻き起こしたスマートフォン決済「PayPay」。PayPayのシステムはAmazon Web Services上に構築されている。
今年6月に開催されたAmazon Web Servicesの年次イベント「AWS Summit Tokyo 2019」で、PayPayのエンジニアである山本啓介氏とshilei Long氏が、PayPayのシステム構築に関する講演を行った。講演の後は、山本氏に直接話を聞く機会を得た。
本稿では、講演とインタビューをもとに、PayPayが100億円キャンペーンによって生じたシステム障害から学んだ教訓についてお届けしたい。
3カ月でQRコード決済サービスをローンチするために
2018年10月にサービスの提供を開始したPayPayだが、山本氏が率いる開発チームは3カ月間でQRコード決済サービスをローンチすることがミッションとして課せられた。スクラッチ開発では到底間に合わない。
そこで、クラウドサービスである「Amazon Web Services」、コンテナ、マイクロサービスによるシステムを構築することになった。コンテナに関しては、AWS EC2上には独自にkubernetesのクラスタを構築している。ノードは約40個、Podは1000を超える。また、マイクロサービスの数は60を超え、リソースはサービス別となっている。
利用しているAWSのサービスは、EC2に始まり、RDS(Aurora、MySQL)、ElasticCache、CloudFront、S3など多岐にわたる。AWSのリソースはTerraformでコード管理を行っており、レビューやロールバックの管理コストを削減しているそうだ。
そのほか、ミドルウェアとして「kafka」「Cassandra」、監視には「Datadog」「PagerDuty」など、さまざまな技術を利用している。
こうした技術を活用して、第1ミッションである「3カ月間でQRコード決済サービスをローンチ」はクリアできた。問題は、次のミッション「100億円あげちゃうキャンペーン」で発生した。
100億円キャンペーン第1弾で数々の問題が発生
PayPayで支払ったら購入金額の最大20%戻ってくるという「100億円あげちゃうキャンペーン」はポイント還元の大きさから注目を集め、サービスがローンチすると、会員登録と利用が集中した。
その結果、システムへのアクセスが急増して不安定になり、何度も緊急メンテナンスを実施したという。「システムが不安定になってからは、ずっとサーバを追加していました」と山本氏。
山本氏は、100億円キャンペーン第1弾で生じた問題として、以下を挙げた。
- 外部連携サービスでトランザクションが滞留して全断
- 加盟店向けツールの負荷の高いクエリが想定以上にコールされて不安定になった
- RedisのBigkeysコマンド
- SESのリミットに達してメール送信が停止
- サインアップが多すぎて、アプリ登録のインセンティブである500円付与が遅延
山本氏によると、ピーク時は500円の付与が1時間以上遅延していたそうだ。
そこで、システムの負荷を軽減するメンテナンスが行われた。まず、負荷を分散するため、加盟店情報をRedisにキャッシュするように変更し、サービスを複製して片方はスレーブのみにアクセスするようにした。続いて、「加盟店ツールのオートリロードの停止」と「ダウンロード機能の制限」を行い、スマホアプリのホーム画面のデザインを変更して、機能を減らした。