Stateful VS. Stateless (Có trạng thái & Không có trạng thái) – Tổng quan
Sự khác biệt chính giữa các ứng dụng stateful và stateless là các ứng dụng không có trạng thái không “lưu trữ” dữ liệu trong khi các ứng dụng có trạng thái yêu cầu lưu trữ dự phòng.
Các ứng dụng stateful như cơ sở dữ liệu Cassandra, MongoDB và mySQL đều yêu cầu một số loại lưu trữ liên tục có thể tồn tại khi dịch vụ được khởi động lại.
Việc duy trì trạng thái là rất quan trọng để chạy một ứng dụng stateful trong khi mọi dữ liệu truyền qua dịch vụ stateless thường mang tính tạm thời và trạng thái chỉ được lưu trữ trong một dịch vụ back-end riêng biệt như cơ sở dữ liệu. Bất kỳ lưu trữ liên quan nào đều thường sẽ là tạm thời.
Tìm hiểu thêm về nền tảng quản lý & dịch vụ phân tích dữ liệu
Ví dụ: nếu container khởi động lại, bất cứ thứ gì được lưu trữ sẽ bị mất. Khi các tổ chức áp dụng container, họ thường bắt đầu với các container stateless vì chúng dễ dàng thích ứng hơn với loại kiến trúc mới này và tách biệt tốt hơn khỏi mã nguồn ứng dụng monolithic của họ, do đó chúng dễ dàng mở rộng quy mô độc lập hơn.
Containerization: Tóm tắt
Việc container hóa (Containerization) các ứng dụng đã trở nên phổ biến rộng rãi trong những năm gần đây khi các dịch vụ vi mô (microservices) và điện toán đám mây (cloud-computing) cũng bùng nổ về mức độ phổ biến.
Nhiều công ty công nghệ, từ các công ty start-up đến doanh nghiệp lớn, cũng đang thử nghiệm việc containerization. Containers (còn được gọi là phân vùng, máy ảo [VE] hoặc jails) thường trông giống như các máy tính tiêu chuẩn, tức là các chương trình chạy bên trong chúng.
Tuy nhiên, so với máy tính chạy trên hệ điều hành thông thường, các chương trình chạy bên trong một container chỉ có thể thấy nội dung của container và các thiết bị được gán cho container cụ thể đó.
Các tính năng quản lý tài nguyên thường được thiết lập để giới hạn phạm vi hoạt động của một container này đối với các container khác. Nhiều container có thể được xây dựng trên mỗi hệ điều hành và một phần tài nguyên của máy tính được phân bổ cho từng container khác nhau.
Mỗi container có thể chứa bất kỳ số lượng chương trình máy tính nào, nhiều chương trình này chạy cùng lúc hoặc riêng biệt và/hoặc tương tác với nhau.
Ứng dụng của Container
Các container thường dễ dàng, nhanh chóng để triển khai và tận dụng hiệu quả tài nguyên hệ thống. Công nghệ container, chẳng hạn như Docker Engine, cung cấp gói chuẩn và quản lý thời gian chạy của các thành phần cơ bản của ứng dụng
Các nhà phát triển có thể đạt được tính di động của ứng dụng và quản lý hình ảnh có thể lập trình bằng cách sử dụng containers; các hoạt động được hưởng lợi từ việc sử dụng các đơn vị thời gian chạy tiêu chuẩn để triển khai và quản lý Ngày càng có nhiều công ty đang đầu tư vào công nghệ container.
Hạn chế trong việc áp dụng rộng rãi container
Có ba thách thức cụ thể đối với việc áp dụng rộng rãi các containers:
- Khó khăn trong việc vượt qua lưu trữ ứng dụng liên tục nhận thức
- Quản lý vòng đời ứng dụng phải được duy trì lâu dài sau ngày triển khai đầu tiên.
- Hỗ trợ đa đám mây và đám mây lai
Các loại ứng dụng
Ứng dụng stateless (Không có trạng thái)
- Các ứng dụng stateless chỉ thực hiện một chức năng hoặc dịch vụ, chẳng hạn như thiết bị IoT.
- Chúng sử dụng máy chủ web, máy in hoặc CDN.
- Máy chủ xử lý các yêu cầu chỉ dựa trên thông tin được chuyển tiếp với mỗi yêu cầu và không dựa vào thông tin từ các yêu cầu trước đó – điều này có nghĩa là máy chủ không cần giữ thông tin trạng thái giữa các yêu cầu.
- Các yêu cầu khác nhau có thể được xử lý bởi các máy chủ khác nhau.
- Thực tế là bất kỳ phiên bản dịch vụ nào cũng có thể truy xuất tất cả trạng thái ứng dụng cần thiết để thực thi một hành vi từ nơi khác cho phép khả năng phục hồi, tính linh hoạt và khả năng thực hiện bất kỳ nhiệm vụ nào của bất kỳ phiên bản dịch vụ nào Các ứng dụng stateless về cơ bản là các ứng dụng microservices được đóng gói trong containers.
- Việc điều phối các ứng dụng stateless giúp xác định vị trí tốt nhất để chạy container dựa trên tài nguyên, bao gồm cả việc duy trì tính sẵn có (failover).
Ứng dụng Stateful (Có trạng thái)
- Các ứng dụng stateful thường là cơ sở dữ liệu;
- Chúng liên quan đến các giao dịch như ngân hàng trực tuyến;
- Sử dụng máy chủ thư;
- Máy chủ xử lý các yêu cầu dựa trên thông tin được truyền kèm với mỗi yêu cầu và thông tin được lưu trữ từ các yêu cầu trước đó – điều này có nghĩa là máy chủ phải truy cập và lưu thông tin trạng thái được tạo ra trong quá trình xử lý yêu cầu trước đó;
- Phải sử dụng cùng một máy chủ để xử lý tất cả các yêu cầu được liên kết đến cùng một thông tin trạng thái hoặc thông tin trạng thái cần được chia sẻ với tất cả các máy chủ cần nó;
- Quá trình triển khai cho các ứng dụng stateful liên quan đến việc xác định vị trí tốt nhất để chạy bộ sưu tập container theo quan điểm về nhu cầu tổng thể của ứng dụng bao gồm quan điểm lưu trữ, mạng và Đường dẫn IO;
- Quá trình triển khai các ứng dụng có trạng thái cũng quản lý tính sẵn sàng cao – di chuyển các containers và gắn kết lại khối lưu trữ mà không cần thay đổi ứng dụng hoặc mã nguồn.
Những sai lầm phổ biến về container
- Containers chỉ hoạt động kết hợp với các ứng dụng kiểu microservices không trạng thái.
- Bạn không thể đóng gói các ứng dụng có trạng thái vào container.
Chúng ta phải lưu ý khi nói về các ứng dụng stateful và stateless vì những gì có thể thuộc một danh mục trên thực tế có thể không phải như vậy. Điều này chủ yếu là do các dịch vụ stateless đã trở nên rất giống với hành vi của các dịch vụ stateful mà không thực sự trở thành chúng.
Tìm hiểu thêm về các dịch vụ của Renova Cloud
Tính không trạng thái là trạng thái khép kín và tham chiếu thay vì phụ thuộc vào khung tham chiếu bên ngoài.
Sự khác biệt chính giữa nó và trạng thái, như đã nêu ở trên, là dựa trên nơi trạng thái được lưu trữ. Trong một hệ thống không có trạng thái, chúng ta đang tương tác với một hệ thống hạn chế.
Trong điện toán trạng thái, trạng thái được lưu trữ bởi máy khách, tạo ra một loại dữ liệu nào đó để các hệ thống khác nhau sử dụng trong tương lai, bởi các hệ thống khác , tức là tính toán “có trạng thái” tham chiếu đến một trạng thái.