Khi Tông môn còn nhỏ, vạn sự đều được xử lý trong cùng một ngọn núi (Monolithic). Bá tánh đưa tiền, thủ quỹ gạch sổ, quản kho xuất gươm. Mọi việc diễn ra dưới một mái nhà, hễ có gì sai sót, Tông chủ chỉ cần gào lên một tiếng là tất cả dừng lại, trả tiền lại cho khách (Cựu Pháp ACID Transaction).
Nhưng nay, Tông môn đã chẻ ra thành hàng trăm phân đà (Microservices) nằm rải rác trên khắp các lục địa để gánh 100 triệu lưu lượng. Khoảng cách sinh ra Lôi Kiếp Mạng Lưới (Network Fallacies).
Bá tánh chuyển 100 vạn linh thạch. Phân đà Thanh Toán (ở núi A) đã trừ tiền xong, hớn hở gửi bồ câu báo cho Phân đà Kho Vũ Khí (ở núi B) xuất gươm. Nào ngờ bồ câu bị sét đánh cháy giữa đường. Tiền đã mất, gươm không giao. Khách nhân nổi điên cầm đuốc đến đốt Tông môn. Làm sao đây? Ta phải triệu hồi Saga Pattern và gRPC.
Trong Hệ thống phân tán, Tông chủ không thể "khóa" toàn bộ các ngọn núi lại để chờ giao dịch hoàn tất (Two-Phase Commit) vì làm thế Tông môn sẽ treo cứng, bá tánh phải xếp hàng dài vạn dặm. Saga Pattern đi theo con đường Đạo Pháp mềm dẻo: Cứ làm đi, nếu sai thì xài Bùa Chuộc Lỗi (Compensating Transaction).
Một giao dịch (Saga) sẽ được chia thành nhiều bước nối tiếp nhau. Nếu bước 1 xong, bước 2 xong, nhưng bước 3 thất bại, hệ thống tự động bẻ lái, chạy ngược lại bước 2 và bước 1 để thi triển phép hoàn tác.
Bản chất: Các phân đà tự lắng nghe tự làm, không ai làm đại ca.
Cách thi triển: Phân đà Thanh Toán trừ tiền xong, quăng một tiếng pháo sáng (Event) lên bầu trời Kafka / SQS: "Ta đã lấy tiền!". Phân đà Kho Vũ Khí đang ngước lên trời, thấy pháo sáng bèn chạy đi xuất gươm. Nếu Kho hết gươm, nó lại bắn một quả pháo màu đỏ: "Hết gươm rồi!". Phân đà Thanh Toán thấy pháo đỏ, tự động âm thầm hoàn lại tiền cho khách.
Ưu điểm: Tự do, linh hoạt, ngọn núi này sập cũng không kéo ngọn núi kia sập theo. Tốc độ cực nhanh.
Tử huyệt: Khi chuỗi giao dịch quá dài (ví dụ 10 bước), các tiếng pháo sáng nổ loạn xạ trên trời. Tông chủ nhìn vào không biết đơn hàng đang bị kẹt ở khâu nào. Dễ tẩu hỏa nhập ma.
Bản chất: Đặt một lão Tể Tướng đứng giữa cầm trịch mọi việc.
Cách thi triển: Tông môn dùng AWS Step Functions làm Tể Tướng. Tể Tướng cầm sớ chỉ tay: "Núi A, trừ tiền!". Núi A làm xong báo cáo lại. Tể Tướng lại chỉ tay: "Núi B, xuất gươm!". Núi B khóc lóc: "Bẩm, kho cháy rồi!". Tể Tướng lập tức quay sang Núi A vung cờ: "Kho cháy, trả tiền lại cho khách mau!".
Ưu điểm: Dễ quản lý, có sơ đồ rành mạch. Đơn hàng kẹt ở đâu nhìn phát biết ngay.
Tử huyệt: Lão Tể Tướng trở thành nút thắt cổ chai. Nếu Tể Tướng mệt mỏi đi ngủ, toàn bộ chuỗi mắt xích đứng hình.
Dù dùng Saga, các phân đà vẫn phải nói chuyện với nhau. Vạn năm qua, Tông môn dùng cựu pháp REST API với định dạng thư tay là JSON. Tờ sớ JSON nhìn rất cồng kềnh với ngoặc kép, dấu phẩy dư thừa. Khi 100 triệu bá tánh thao tác, hàng vạn tấn giấy tờ bay lợp trời, làm tắc nghẽn toàn bộ ống dẫn linh khí (Băng thông mạng).
Để đạt đến tốc độ thần thánh, các đại năng từ Ma giáo Google đã ban tặng gRPC kết hợp với Protobuf (Protocol Buffers):
- Mật Ngữ Nhị Phân (Binary Payload): Protobuf không viết chữ phàm trần. Nó nén toàn bộ thông tin lại thành những hạt tinh thể số 0 và 1 cực nhỏ. Cùng một tờ sớ, JSON nặng 100 gram, Protobuf chỉ nặng 20 gram. Tốc độ truyền tin xé gió.
- Khế Ước Thép (Strong Typed Contract): gRPC ép hai phân đà phải ký một bản khế ước đúc bằng thép (File .proto). Khế ước ghi rõ định dạng chính xác. Nếu phân đà A lén gửi nhầm kiểu dữ liệu, hệ thống lập tức đánh bật ra ngay tại cửa. Tránh triệt để tẩu hỏa nhập ma do dữ liệu rác.
- Hô Hấp Liên Tục (HTTP/2 Multiplexing): Cựu pháp REST gửi một tờ sớ phải mở một cánh cửa, xong lại đóng cửa chờ sớ về. gRPC dùng luồng khí HTTP/2, mở cửa một lần và ném hàng vạn tờ sớ qua lại trên cùng một luồng (Streaming), không bao giờ tắc nghẽn.
Lược đồ để các Tông chủ quyết định pháp bảo phù hợp trong cuộc chiến xé rách hư không:
| Pháp Bảo / Trận Pháp | Đặc Điểm Cốt Lõi | Ẩn Dụ Tiên Giới | Khi Nào Sử Dụng? |
|---|---|---|---|
| REST API (JSON) | Nặng, dễ đọc, ai cũng xài được | Thư tay gửi bằng xe ngựa | Để giao tiếp với người ngoài (Frontend, Web, App phàm trần). |
| gRPC (Protobuf) | Nhẹ, siêu tốc, nén nhị phân mã hóa | Mật ngữ truyền âm nhập mật | Để các phân đà (Backend Microservices) tự nói chuyện với nhau bên trong Tông môn. |
| Saga - Choreography | Giao tiếp qua Events (Kafka/SQS) | Quăng pháo sáng, ai rảnh thì làm | Khi quy trình ngắn (2-3 bước), cần tốc độ phản ứng chớp nhoáng. |
| Saga - Orchestration | Có máy điều phối (Step Functions) | Tể Tướng đứng chỉ đạo | Khi quy trình phức tạp (Thanh toán, Giao hàng, Tích điểm, Hủy đơn). |
“Đừng cố gắng tạo ra một sự đồng bộ hoàn hảo trong một thế giới phân tán.
Hãy chấp nhận sự trễ nhịp (Eventual Consistency).
Miễn là Tông chủ có Bùa Chuộc Lỗi (Saga) trong tay, vạn sự cuối cùng rồi cũng sẽ trở về đúng quỹ đạo của nó. Hãy nén lời nói lại (gRPC) và hành động quyết đoán, Tông môn tự khắc trường tồn.”