[ad_1]
Trạng thái và Không trạng thái là hai loại kiến trúc máy tính khác nhau xác định cách một ứng dụng quản lý các quy trình tồn tại lâu dài. Một số hệ thống tự nhiên không có trạng thái trong khi những hệ thống khác có thiên hướng về mô hình trạng thái. Cho dù bạn chọn cách tiếp cận nào, nó sẽ ảnh hưởng đến cách các nhóm kỹ thuật và vận hành xây dựng và duy trì giải pháp.
Trong bài viết này, bạn sẽ tìm hiểu sự khác biệt giữa các ứng dụng trạng thái và không trạng thái, cũng như khi nào chúng có thể được sử dụng. Bạn cũng sẽ thấy hai mô hình ảnh hưởng như thế nào đến các yêu cầu của việc triển khai DevOps.
Nhà nước là gì?
“Trạng thái” của dịch vụ là thông tin liên tục được ghi lại trong một giao dịch hoặc sự kiện và sau đó được gọi lại trong một giao dịch hoặc sự kiện khác. Một trong những ví dụ đơn giản nhất về trạng thái là máy chủ cơ sở dữ liệu: nó quản lý dữ liệu được lưu trữ cần được duy trì một cách đáng tin cậy. Bản ghi được lưu trong một phiên sẽ cần được truy xuất bởi phiên tiếp theo.
Nhà nước phải được quản lý cẩn thận để nó có thể sử dụng được trong tương lai. Các hệ thống bên ngoài không cần phải cung cấp nhiều thông tin để tham chiếu sự kiện trước đó. Một ID đơn giản như số giao dịch thanh toán cho phép dịch vụ khôi phục phần còn lại của dữ liệu liên quan đến hoạt động, chẳng hạn như số tiền thanh toán và địa chỉ giao hàng.
Ứng dụng không trạng thái là gì?
Không phải mọi ứng dụng đều có trạng thái. Một số hệ thống không hoạt động với dữ liệu tồn tại lâu dài hoặc chỉ lưu vào bộ nhớ cache để cải thiện hiệu suất. Chúng sẽ vẫn chạy nếu dữ liệu được lưu trữ trước đó bị mất.
Các ứng dụng không trạng thái xử lý từng sự kiện một cách riêng biệt. Các sự kiện không có nhận thức về nhau hoặc bối cảnh rộng hơn mà ứng dụng hoạt động. Chất lượng này làm cho các hệ thống không trạng thái dễ dàng lập luận hơn. Không có rủi ro rằng hoạt động trước đó đang ảnh hưởng đến hoạt động hiện tại.
Ứng dụng của tôi có trạng thái hay không trạng thái?
Một số ứng dụng làm mờ ranh giới giữa các mô hình trạng thái và không trạng thái. Cùng một hệ thống có thể được coi là cả trạng thái và không trạng thái, tùy thuộc vào quan điểm mà bạn tiếp cận nó.
Các ứng dụng web phía máy khách thường được xem là không trạng thái theo quan điểm của nhà điều hành dịch vụ. Chúng có thể được lưu trữ bởi một máy chủ web tĩnh, độc lập với bất kỳ thành phần nào khác. Ứng dụng vẫn có thể tích lũy trạng thái trong quá trình sử dụng, chẳng hạn như cài đặt được lưu vào thiết bị của người dùng và lịch sử các trang gần đây. Dạng trạng thái này không liên quan đến nhóm DevOps vì nó không ảnh hưởng đến cách ứng dụng được triển khai.
Bạn có thể xác định xem một ứng dụng cần một mô hình triển khai trạng thái hay không trạng thái bằng cách xem cách nó lưu trữ dữ liệu. Trạng thái không hiển thị khi không có tính ổn định hoặc dữ liệu chỉ được lưu trữ trên thiết bị của người dùng hoặc trong nhà cung cấp dịch vụ lưu trữ tách rời như Amazon S3. Ứng dụng sẽ có trạng thái nếu nó trực tiếp sửa đổi môi trường của nó thông qua việc ghi hệ thống tệp và các thay đổi khác, sau đó yêu cầu các sửa đổi đó tồn tại vô thời hạn.
Trạng thái với vùng chứa và đám mây
Các ứng dụng hiện đại thường được triển khai trên đám mây dưới dạng các thùng chứa. Các thùng chứa được thiết kế để trở thành các đơn vị chức năng tạm thời có thể được thay thế mà không có tác dụng phụ. Điều này có nghĩa là chúng chủ yếu là các thành phần máy tính không trạng thái.
Tuy nhiên, các thùng chứa có thể được sử dụng để đóng gói các hệ thống trạng thái. Khối lượng liên tục cung cấp một phương tiện để gắn bộ lưu trữ đáng tin cậy có tuổi thọ cao hơn các phiên bản vùng chứa riêng lẻ. Khi so sánh với các máy ảo truyền thống và triển khai bằng kim loại trần, sự khác biệt nằm ở sự cố ý vốn có của quản lý trạng thái vùng chứa.
Việc chứa một hệ thống trạng thái yêu cầu bạn phải dự đoán vị trí xảy ra trạng thái và cách nó được lưu trữ. Bạn không thể ghi một cách ngây thơ vào các đường dẫn hệ thống tệp tùy ý vì chúng sẽ không được ánh xạ tới một ổ đĩa. Nếu không có ổ đĩa, dữ liệu sẽ bị mất nếu vùng chứa bị dừng hoặc bị thay thế. Có thể cần một khoảng thời gian tái cấu trúc để làm cho ứng dụng của bạn luôn ghi vào đường dẫn ổ đĩa được gắn kết, vì vậy bạn cần xác định trước các yêu cầu lưu trữ dữ liệu.
Cách State ảnh hưởng đến DevOps
Quy trình DevOps cần được điều chỉnh tùy thuộc vào việc bạn đang chạy các dịch vụ trạng thái hay không trạng thái. Các mô hình triển khai không trạng thái cung cấp nhiều quyền tự do hoạt động hơn. Bạn có thể dễ dàng khởi chạy các vùng chứa mới và mở rộng quy mô chúng trên nhiều nút phân tán mà không cần phải suy nghĩ về việc truy cập trạng thái liên tục.
Một dịch vụ nhà nước đòi hỏi một cách tiếp cận quản lý chu đáo hơn. Mỗi cá thể ứng dụng cần được cung cấp quyền truy cập vào trạng thái được chia sẻ. Điều này có thể áp đặt các hạn chế về cách bạn mở rộng quy mô. Ví dụ, rất ít bản phân phối Kubernetes cho phép nhiều Node gắn một ổ đĩa với quyền truy cập ghi.
Cả hai loại ứng dụng đều yêu cầu giám sát chủ động để bạn biết các vấn đề trước khi chúng xảy ra. Điều này quan trọng hơn đối với các giải pháp trạng thái bởi vì bạn cần phải đi trước các yêu cầu lưu trữ và xác định khi nào các tùy chọn lập lịch vùng chứa đang bị ảnh hưởng bởi việc gắn khối lượng. Các triển khai trạng thái cũng sẽ cần được hỗ trợ bởi một chiến lược sao lưu thường xuyên.
State cũng làm phức tạp quá trình DevOps bằng cách làm cho nó khó tái tạo chính xác các môi trường. Có thể xảy ra sự cố trong quá trình sản xuất trong khi vẫn khó nắm bắt trên máy của nhà phát triển. Những vấn đề này có thể khó chẩn đoán. Bạn có thể làm cho chúng dễ quản lý hơn bằng cách cung cấp cơ chế cho các nhà phát triển sao chép môi trường để họ có thể tái tạo các vấn đề trong hộp cát.
State luôn thêm phức tạp và chi phí. Bạn cần phải cấu hình và cung cấp các giải pháp quản lý nhà nước như khối lượng và cơ sở dữ liệu, làm cho các đường ống CI trở nên phức tạp hơn và khó bảo trì hơn. Trạng thái là không thể tránh khỏi trong hầu hết các ứng dụng chính, vì vậy việc cố gắng quá mức để giữ cho hệ thống không ở trạng thái có thể là một sự chuyển hướng vô ích. Tốt hơn là sử dụng các công cụ và đào tạo để tích hợp liền mạch các ứng dụng trạng thái vào quy trình DevOps của bạn, ngay cả khi điều đó có nghĩa là sẽ có nhiều công việc hơn.
Bản tóm tắt
Phân biệt giữa các ứng dụng trạng thái và không trạng thái là điều quan trọng để thành công trong DevOps. Nhìn từ góc độ DevOps, một ứng dụng trạng thái sẽ phức tạp hơn để triển khai và duy trì vì bạn cần cung cấp cho mỗi phiên bản quyền truy cập vào một kho dữ liệu liên tục.
Các ứng dụng không trạng thái được tách biệt hoàn toàn khỏi môi trường của chúng, điều này thường khiến chúng dễ dàng chứa và mở rộng quy mô trong đám mây. Tuy nhiên, các hệ thống không trạng thái thực sự tương đối hiếm nên bạn thường kết hợp chúng với các kho dữ liệu trạng thái. Tái cấu trúc thành các thành phần không trạng thái nếu có thể, trong khi xây dựng công cụ để hỗ trợ triển khai trạng thái cùng với đó, thường là cách hiệu quả nhất để cân bằng DevOps được sắp xếp hợp lý với các yêu cầu chức năng của hệ thống của bạn.
[ad_2]