Stateless và Stateful là gì?

Bài viết này được viết bởi Tino Phạm và được HEFC cho phép sử dụng

Khái niệm Stateless và Stateful là gì?

Stateless là một kiểu thiết kế không lưu trữ dữ liệu của client trên server. Khi client gửi dữ liệu lên server và quá trình xử lý hoàn tất, “quan hệ” giữa client và server bị “cắt đứt” – server không lưu bất kỳ dữ liệu nào của client.

Stateful ngược lại, là một kiểu thiết kế mà server phải lưu trữ dữ liệu của client. Điều này đồng nghĩa rằng, ràng buộc giữa client và server vẫn được giữ nguyên sau mỗi yêu cầu của client. Dữ liệu được lưu trữ phía server có thể được sử dụng làm đầu vào cho các lần tương tác tiếp theo hoặc trong quá trình xử lý các yêu cầu khác nhau phụ thuộc vào nghiệp vụ đã được cài đặt.

Mô hình tương tác client-server

Hai mô hình tương tác cơ bản trong thiết kế client-server đã hình thành các application protocol, framework, technology,… Ví dụ điển hình là giao thức ứng dụng HTTP. HTTP được phát triển ban đầu cho việc truy cập các trang web thông thường. Trong mô hình này, phần server không lưu trữ dữ liệu của client. Khi client gửi yêu cầu truy vấn đến các trang web (Web Page), server nhận yêu cầu, trả về nội dung của trang web và sau đó cắt đứt mọi kết nối với client (không lưu trữ dữ liệu của client).

Khi sự đơn giản của việc truy cập các trang web hoặc trang HTML bắt đầu thu hút sự quan tâm của nhà phát triển phần mềm, ý tưởng xây dựng phần mềm dưới dạng web đã được hình thành. Điều này có nghĩa là HTML được sử dụng làm giao diện người dùng cho một ứng dụng phần mềm, và phần mềm này được thiết kế theo mô hình client-server. Trong trường hợp này, HTTP chỉ đóng vai trò là giao thức để tương tác giữa client và server. Tuy nhiên, vì phần mềm được sử dụng để xử lý dữ liệu từ người dùng, nghĩa là server cần lưu trữ dữ liệu hoặc kết quả trả về để sử dụng trong các lần xử lý sau, đặc biệt trong các giao dịch. Với việc này, HTTP không đáp ứng được yêu cầu phát triển phần mềm phức tạp.

Cách lưu trữ dữ liệu của client trong một Web Application

  1. Sử dụng URL Rewriter

    HTML không phải là một ngôn ngữ lập trình, vì vậy không thể sử dụng các biến để lưu trữ dữ liệu. Tuy nhiên, dữ liệu có thể được ghi vào các liên kết (link) và khi người dùng nhấp vào liên kết đó, dữ liệu sẽ được gửi lên server. Phần lớn dữ liệu được ghi vào phần truy vấn (query) dưới dạng cặp key=value (khóa/giá trị). Một số cài đặt khác có thể đặt dữ liệu trong phần đường dẫn (path) hoặc trong các biến của JavaScript,…

  2. Hidden Form

    Thay vì lưu trữ dữ liệu trong liên kết, chúng ta có thể lưu trữ dữ liệu trong các phần tử của một form và các phần tử này có kiểu là ẩn. Như vậy, mọi hành động của người dùng sẽ gọi đến hành động gửi form đó lên server và dữ liệu cần lưu trữ từ lần truy vấn trước sẽ được gửi lại. Phương thức HTTP được sử dụng ở đây là Post, không phải Get như trong URL Rewriter. Get là một dạng truy vấn cho phép đọc dữ liệu, trong khi Post là một dạng truy vấn cho phép ghi dữ liệu. Khi đó, dữ liệu của client được gửi lên server nằm trong phần thân (body) của một HTTP Message, không phải trong phần đầu (header) như khi sử dụng liên kết.

  3. Sử dụng Cookie

    Trình duyệt cho phép mỗi ứng dụng web lưu trữ khoảng 4kb dữ liệu dưới dạng cặp key/value. Vì vậy, nếu chúng ta lưu dữ liệu từ lần truy vấn trước vào cookie, dữ liệu này sẽ được gửi lên server trong mỗi yêu cầu. Cookie là một phần của phần đầu (header) trong một HTTP Message.

  4. Sử dụng HTTP Session

    Ngược lại với cookie, các Web Server có thể cho phép mỗi client lưu trữ một lượng nhỏ dữ liệu trên đó. Dữ liệu được lưu trữ dưới dạng cặp key/value và sẽ hết hạn nếu client không gửi truy vấn nào đến server trong khoảng thời gian timeout. Khi đó, dữ liệu của client sẽ bị xóa đi.

Web Application là một ví dụ minh họa cho thiết kế stateless với một số kỹ thuật nhỏ để khắc phục yếu điểm của nó trong việc xây dựng phần mềm. Cấu trúc client-server cũng có thể được thiết kế dưới dạng phân tán. Ví dụ như trong kiến trúc EJB (Enterprise JavaBeans), session bean được thiết kế để hỗ trợ cả stateless và stateful.

Bài viết này được viết lại bằng tiếng Việt bởi HEFC. Mọi chi tiết vui lòng truy cập hefc.edu.vn.

Related Posts

Xét nghiệm Giải phẫu bệnh – Dẫn đường cho việc điều trị

Xét nghiệm giải phẫu bệnh được thực hiện trên những mẫu bệnh phẩm tế bào, bệnh phẩm mô từ các cơ quan trong cơ thể được sinh…

Phương pháp điều trị tủy răng tại nha khoa hiện nay

Viêm tủy răng là một trong những vấn đề về sức khỏe răng miệng nghiêm trọng. Người mắc viêm tủy răng không chỉ phải chịu đựng những…

Mỹ thuật ứng dụng là gì? (cập nhật 2023)

Khi những giá trị thẩm mỹ ngày càng được chú trọng thì các phẩm mỹ thuật ứng dụng ngày càng đi sâu vào đời sống của mọi…

Bát quái đồ là gì? Ý nghĩa và vai trò của bát quái trong phong thủy

Bát quái đồ là vật phẩm phong thủy được sử dụng khá rộng rãi và phổ biến trong văn hoá phương Đông, nhằm mang lại những niềm…

Du học ngành khoa học ứng dụng và cơ bản

>> Du học ngành khoa học đại cương >> Các trường có đào tạo ngành Khoa học ứng dụng và cơ bản Khoa học Ứng dụng và…

Trồng răng implant là gì? Những điều cần phải biết trước khi chọn trồng răng implant

Trồng răng implant là phương pháp trồng răng cấy trụ kim loại vào xương hàm để thay thế cho răng đã mất. Chính vì vậy trụ implant…