Bounded Contexts & Microservices

Khi PayPay ra mắt, kiến trúc cần phải đủ linh hoạt để lặp lại (iterate) nhanh chóng. Họ chọn Kiến trúc Microservices được host hoàn toàn trên AWS.

Thay vì một monolithic to lớn, hệ thống được chia nhỏ thành các domain business logic riêng biệt (Bounded Contexts trong Domain-Driven Design):

  • User Domain: Authentication, quản lý hồ sơ, eKYC.
  • Wallet/Payment Domain: Quản lý sổ cái (Ledger), số dư (balances), xử lý giao dịch.
  • Merchant Domain: Đăng ký đối tác, quản lý cửa hàng.
  • Campaign/Promo Domain: Xử lý logic mã giảm giá, tặng điểm, hoàn tiền.

Giao tiếp nội bộ: gRPC

Để đảm bảo độ trễ (latency) thấp giữa 100+ microservices, PayPay chuẩn hóa sử dụng gRPC. Các contract protobuf khắt khe giúp đảm bảo backward compatibility và ranh giới API rõ ràng giữa các team, tránh được sự cồng kềnh và overhead của REST/JSON trong internal traffic.

Platform Engineering & GitOps

Với hàng trăm microservices, việc deploy thủ công hoặc dùng các pipeline Jenkins dễ vỡ trở thành một gánh nặng lớn. Team Platform của PayPay đã áp dụng GitOps.

Kubernetes & ArgoCD

Toàn bộ service chạy trên Kubernetes. Trạng thái của cluster được định nghĩa (declarative) bằng các file lưu trên Git repositories.

  • ArgoCD liên tục theo dõi Git repository và tự động đồng bộ trạng thái của cluster sao cho khớp với các file manifest trên Git.
  • Nếu một developer cần scale up một service hay deploy một image mới, họ chỉ việc merge một Pull Request thay đổi file manifest. ArgoCD sẽ lo phần còn lại.

Lợi ích của cách tiếp cận này:

  1. Auditable: Mọi thay đổi hạ tầng đều là một Git commit, dễ dàng trace lại.
  2. Reversible: Nếu bản deploy gây ra sự cố, rollback cực kỳ đơn giản: chỉ cần revert cái Git commit đó lại.
  3. Developer Autonomy: Product engineer không cần quyền truy cập kubectl vào môi trường production; họ chỉ thao tác với Git, giúp Platform team bảo mật cluster hiệu quả hơn.

Mô hình này cũng chính là cách tiếp cận GitOps ở quy mô lớn mà chúng ta đã thảo luận trước đây để xử lý hơn 20+ microservices thương mại điện tử.

Ở phần tiếp theo, chúng ta sẽ tìm hiểu cách PayPay dùng Event-Driven và Kafka làm “bộ đệm” để hứng chịu những đợt tải đột biến khổng lồ. Đọc tiếp Phần 2 — Xử lý tải đột biến: Event-Driven & Kafka.