
Sự khác biệt giữa Synchronous và Asynchronous Communication
January 24, 2025Trong các hệ thống phân tán, việc giao tiếp giữa client và server có thể diễn ra theo nhiều cách khác nhau, mỗi cách có các trường hợp sử dụng và đánh đổi riêng.
Bạn có thể đọc lại bài viết của mình về các cách giao tiếp các services tại đây: https://blog.ntechdevelopers.com/giao-tiep-trong-microservices/
Bài viết này cùng mình phân tích cách giao tiếp đồng bộ và bất đồng bộ nhé!

1. Synchronous Request-Response
Trong mô hình này, client gửi một request trực tiếp đến server và chờ đợi server phản hồi.
- Trường hợp sử dụng: Phù hợp nhất với các trường hợp yêu cầu phản hồi thời gian thực, chẳng hạn như xác thực người dùng hoặc truy vấn dữ liệu trong ứng dụng.
- Ví dụ: Một ứng dụng web khi người dùng gửi biểu mẫu và chờ xác nhận.
2. Asynchronous Request-Response
Ở đây, client gửi request đến server nhưng không chờ phản hồi. Thay vào đó, client tiếp tục thực hiện các tác vụ khác và xử lý phản hồi khi nó được trả về.
- Trường hợp sử dụng: Lý tưởng cho các trường hợp mà client muốn nhận phản hồi sau nhưng không muốn bị chặn, chẳng hạn như các tác vụ xử lý nền.
- Ví dụ: Gửi email, nơi client chỉ cần xác nhận rằng email đã được gửi sau đó.
3. Asynchronous Messaging
Client gửi một message đến messaging system (lớp trung gian) thay vì giao tiếp trực tiếp với server. Messaging system sẽ xác nhận đã nhận message, và client xem như nhiệm vụ đã hoàn thành.
- Trường hợp sử dụng: Hiệu quả trong các trường hợp mà client không yêu cầu phản hồi ngay lập tức hoặc không cần nhận phản hồi, chẳng hạn như logging hoặc thông báo sự kiện.
- Ví dụ: Một hệ thống ticketing, nơi client ghi nhận vấn đề và server xử lý nó bất đồng bộ.
Ưu điểm của Request-Response Model
Cả hai mô hình synchronous và asynchronous request-response đều đơn giản và dễ triển khai. Tuy nhiên, chúng đặt ra những thách thức:
- Điều gì xảy ra nếu server bị gián đoạn?
- Làm thế nào để xử lý các request thất bại?
- Chuyện gì xảy ra khi server bị chậm?
Tại sao nên sử dụng Messaging System?
Messaging system giải quyết nhiều vấn đề này bằng cách tách biệt client và server:
- Server gián đoạn: Nếu server bị gián đoạn, messaging system giữ lại các message và gửi chúng sau đó.
- Request thất bại: Messaging system có thể tự động retry các message thất bại.
- Mở rộng server: Nếu server bị quá tải, có thể thêm nhiều server để xử lý message song song.
Từ góc nhìn của client, tác vụ được xem là hoàn tất ngay khi messaging system xác nhận đã nhận message.
Nhược điểm của Messaging System
Mặc dù messaging system mang lại độ tin cậy và khả năng mở rộng, chúng đi kèm với những phức tạp bổ sung:
- Hệ thống cần đảm bảo tính sẵn sàng cao, khả năng mở rộng, tốc độ và bảo mật.
- Yêu cầu giám sát và bảo trì liên tục để vận hành trơn tru.
Tóm lại, việc lựa chọn giữa synchronous, asynchronous request-response hay asynchronous messaging phụ thuộc vào các yêu cầu cụ thể của hệ thống. Mô hình request-response đơn giản phù hợp để triển khai nhanh, trong khi messaging system là công cụ mạnh mẽ để xây dựng các hệ thống phân tán tin cậy và mở rộng, nhưng đi kèm với chi phí vận hành cao hơn.