Kiến Trúc Stateful: Hiểu Rõ Về Khái Niệm và Ứng Dụng
Trong lĩnh vực công nghệ thông tin, chắc hẳn bạn đã từng nghe tới hai khái niệm quan trọng là "Stateful" và "Stateless". Sự khác biệt chính giữa stateful server và stateless server nằm ở cách mà chúng quản lý dữ liệu.
Điểm Khác Biệt Giữa Stateful và Stateless
-
Stateful server: Ghi nhớ trạng thái của dữ liệu từ các yêu cầu (requests) mà client gửi đến. Điều này có nghĩa là thông tin từ yêu cầu trước đó sẽ được sử dụng trong các lần xử lý yêu cầu tiếp theo, giúp trải nghiệm của người dùng trở nên mượt mà hơn.
-
Stateless server: Ngược lại, không ghi nhớ bất kỳ dữ liệu hay trạng thái nào giữa các yêu cầu. Điều này giúp đơn giản hóa việc xử lý nhưng có thể dẫn đến một số hạn chế trong việc duy trì thông tin người dùng.
Trong bài viết này, chúng ta sẽ xem xét kỹ lưỡng về Stateful Architecture và những lợi ích cũng như vấn đề liên quan đến nó. Bài viết về Stateless Architecture sẽ được trình bày trong phần tiếp theo.
Ví Dụ Minh Họa Về Stateful Architecture
Khi sử dụng kiến trúc stateful, dữ liệu phiên làm việc (session data) và hình ảnh hồ sơ (profile image) của mỗi người dùng được lưu trữ trên một server cụ thể. Ví dụ:
- Nếu người dùng A gửi yêu cầu đến Server 1, server này sẽ kiểm tra và xác thực trạng thái của user A.
- Tuy nhiên, nếu yêu cầu được gửi đến Server 2 hoặc Server 3, việc xác thực sẽ thất bại vì các server này không chứa dữ liệu phiên của user A. Do đó, tất cả các yêu cầu từ user A cần phải được định tuyến đến Server 1.
- Cũng tương tự như vậy, tất cả yêu cầu từ user B cần đến Server 2 và user C đến Server 3.
Các Giao Thức Stateful Thông Dụng
Có một số giao thức stateful phổ biến mà bạn có thể đã nghe qua:
- FTP (File Transfer Protocol): Thường được sử dụng để tải file từ máy tính của bạn lên server và ngược lại.
- TELNET (Teletype Network): Thay thế cho việc đăng nhập từ máy tính này sang máy tính khác, cung cấp một giao diện dòng lệnh để tương tác với hệ thống.
Vấn Đề Phát Sinh Khi Sử Dụng Stateful Architecture
Mặc dù kiến trúc stateful mang lại rất nhiều lợi ích, nhưng cũng không thiếu những thách thức:
- Yêu cầu phải định tuyến đến server cụ thể: Mỗi request từ cùng một client cần phải được chuyển đến cùng một server để xử lý. Điều này có thể thực hiện thông qua các sticky sessions trong hầu hết các bộ cân bằng tải (load balancers).
- Khó khăn trong việc quản lý server: Khi thêm hoặc xóa server trở nên phức tạp hơn do sự phụ thuộc vào session data.
- Xử lý lỗi: Nếu một server gặp sự cố, các yêu cầu từ client có thể không được xử lý một cách hiệu quả.
Kết Luận
Trong phần tiếp theo, mình sẽ trình bày về Stateless Architecture, cách thiết kế giúp giảm bớt những khó khăn mà kiến trúc stateful gây ra. Nếu bạn thấy series "Thiết kế Hệ thống" này thú vị, hãy ủng hộ mình bằng một like, comment hoặc follow nhé.
Để tìm hiểu thêm về các khái niệm trong thiết kế hệ thống, bạn có thể tham khảo những bài viết khác trong series "Thiết kế Hệ thống - System Design" trên blog của mình. Hy vọng kiến thức này hữu ích cho bạn!
Hãy theo dõi mình trên Facebook tại "CLB Lập trình - THPT Ngọc Tảo" hoặc trên kênh Youtube "Tờ Mờ Sáng học Lập trình" để cùng nhau học hỏi và trao đổi về công nghệ và lập trình miễn phí nhé!
Facebook CLB Lập trình - THPT Ngọc Tảo: Link Facebook
Youtube Tờ Mờ Sáng học Lập trình: Link Youtube
Hẹn gặp lại các bạn! 👋
source: viblo