Bối cảnh
PayPay ra mắt năm 2018 và nhanh chóng thống trị thị trường thanh toán di động Nhật Bản, một phần nhờ các chiến dịch marketing mạnh tay như chiến dịch “Tặng 10 Tỷ Yên”. Những chiến dịch này tạo ra các đợt tăng vọt traffic khổng lồ, không thể đoán trước, làm sập các hệ thống monolithic và đồng bộ truyền thống.
Thách thức
Hệ thống thanh toán đối mặt với một bài toán hóc búa trong giai đoạn tăng trưởng nóng:
- Concurrency siêu cao: Hàng triệu user mở app và thực hiện giao dịch cùng một giây.
- Nhất quán dữ liệu tuyệt đối (Data Consistency): Hệ thống không được phép đánh rơi giao dịch hoặc trừ tiền hai lần (double-spend), kể cả khi quá tải.
- Release tính năng liên tục: Đòi hỏi từ business là phải ra mắt tính năng mới hàng ngày để đánh bại đối thủ.
Giải pháp
PayPay đã giải quyết bài toán này bằng cách áp dụng Kiến trúc Microservices hướng sự kiện (Event-Driven) trên nền tảng Cloud-Native, phụ thuộc nhiều vào xử lý bất đồng bộ và cơ sở dữ liệu phân tán.
Các Trụ cột Kiến trúc Chính
- Microservices & GitOps: Hệ thống gồm hơn 100+ microservices giao tiếp qua gRPC. Việc deploy được tự động hóa hoàn toàn nhờ ArgoCD và Kubernetes, giúp các team độc lập release tính năng mà không bị nghẽn (bottleneck) lẫn nhau.
- Đàn hồi nhờ Event-Driven (Kafka): Để sống sót qua các đợt tải đột biến, PayPay dùng rất nhiều Apache Kafka. Request của user được ghi nhận cực nhanh và đẩy vào hàng đợi Kafka, tách bạch luồng traffic khổng lồ ở front-end khỏi quá trình xử lý giao dịch nặng nề ở database.
- NewSQL cho Data Layer (TiDB): Khi AWS Aurora chạm tới giới hạn scale ghi (write-scaling limit), PayPay đã chuyển sang dùng TiDB (một cơ sở dữ liệu NewSQL) để scale ghi theo chiều ngang (horizontally) trong khi vẫn giữ được chuẩn ACID bắt buộc đối với sổ cái tài chính (financial ledgers).
- Platform SRE & Chaos Engineering: Một team Platform chuyên trách đảm bảo sự bền bỉ của hệ thống thông qua load testing liên tục, circuit breakers, và Chaos Engineering để chuẩn bị cho những sự cố không lường trước.
Bài học cho các hệ thống hiện đại
Hành trình của PayPay chứng minh rằng việc đắp thêm phần cứng cho một database quan hệ (vertical scaling) rồi cũng sẽ thất bại. Sự bền bỉ thực sự (resilience) đòi hỏi phải tách rời hệ thống (decouple) một cách bất đồng bộ và chấp nhận việc mở rộng theo chiều ngang (horizontal scaling) ở cả tầng ứng dụng (application) lẫn tầng dữ liệu (data layer).