Ảo hóa: Sự khác nhau giữa Container và Virtual Machine là gì?

Công nghệ container đang tạo điều kiện cho sự phát triển ứng dụng nhanh chóng và linh hoạt hơn bao giờ hết. Nhưng còn đó nhiều câu hỏi liên quan đến việc triển khai container, cụ thể:

  • Container khác nhau như thế nào với các máy ảo (virtual machine hay VM)?
  • Nếu container, về bản chất là tạm thời và “dùng một lần”, làm thế nào bạn có thể sử dụng chúng cùng với việc lưu trữ dài hạn?
  • Container có thể bổ sung như thế nào cho các giải pháp ảo hóa và điều phối ứng dụng hiện có?

Trong bài viết này, chúng tôi sẽ đề cập đến câu hỏi đầu tiên: máy ảo (VM) khác với Container như thế nào?

Máy ảo (VM) là gì?

Trong lịch sử ngành IT, khi sức mạnh và năng lực xử lý của máy chủ tăng lên, các ứng dụng baremetal không thể khai thác sự mở rộng đa dạng về tài nguyên. Do đó, VM đã ra đời, được thiết kế với một phần mềm chạy trên các máy chủ vật lý để “mô phỏng” một hệ thống phần cứng nào đó. Một trình ảo hóa (hypervisor), hay còn gọi là trình giám sát máy ảo, là phần software / firmware hoặc hardware cho phép tạo ra và chạy các VM. Đó là thành phần nằm giữa phần cứng và máy ảo, cần thiết để thực hiện ảo hóa máy chủ.

Trong mỗi máy ảo chạy một hệ điều hành khách (Guest OS) duy nhất. Các máy ảo với các hệ điều hành khác nhau có thể chạy trên cùng một máy chủ vật lý. Máy ảo UNIX có thể ngồi cùng với máy ảo Linux, v.v… Mỗi VM có các mã binary, thư viện và ứng dụng riêng mà nó phục vụ và VM có thể có kích thước nhiều gigabyte.

Ảo hóa máy chủ cung cấp nhiều lợi ích khác nhau, một trong những khả năng lớn nhất là khả năng hợp nhất các ứng dụng trên một hệ thống. Đã qua rồi thời của một ứng dụng chạy trên một máy chủ vật lý. Ảo hóa mở ra cơ hội tiết kiệm chi phí thông qua việc loại bỏ footprint, cung cấp máy chủ nhanh hơn và hệ thống phục hồi thảm họa (DR) được cải thiện, vì phần cứng của DR Site không cần phải phản ánh chính xác trung tâm dữ liệu chính.

Các dự án phần mềm cũng được hưởng lợi từ sự hợp nhất vật lý này vì việc sử dụng nhiều hơn các máy chủ cỡ lớn, nhanh hơn, giải phóng các máy chủ không được sử dụng sau đó để tái sử dụng cho bộ phận QA, nhóm phát triển hoặc phòng lab.

Nhưng phương pháp này cũng bộc lộ nhược điểm của nó. Mỗi VM bao gồm một “hình ảnh” của hệ điều hành riêng biệt, tăng thêm không gian lưu trữ trong bộ nhớ và dung lượng lưu trữ. Hóa ra, vấn đề này làm tăng thêm sự phức tạp cho tất cả các giai đoạn của vòng đời phát triển phần mềm, từ phát triển và thử nghiệm đến vận hành và khắc phục thảm họa. Cách tiếp cận này cũng hạn chế nghiêm trọng tính di động của các ứng dụng giữa các đám mây công cộng, đám mây riêng và trung tâm dữ liệu truyền thống.

Container là gì?

Ảo hóa hệ điều hành (HĐH) đã trở nên phổ biến trong một thập kỷ qua, nó cho phép phần mềm chạy trong tầm kiểm soát và hoạt động tốt khi được chuyển từ môi trường máy chủ này sang môi trường máy chủ khác. Nhưng các container cung cấp một cách để chạy các hệ thống được cô lập này trên chỉ một máy chủ hay Host OS.

Các container nằm trên một máy chủ vật lý và Host OS của nó, như Linux hoặc Windows. Mỗi container chia sẻ Host OS kernel và thông thường cũng chia sẻ luôn các mã binary và thư viện. Các thành phần được chia sẻ là Read-Only. Do đó, các container có điểm đặc biệt là cực kỳ “nhẹ”, các ứng dụng này có kích thước chỉ vài megabyte và chỉ mất vài giây để khởi động, so với hàng gigabyte và mất vài phút để VM khởi động.

Container cũng cắt giảm chi phí quản lý. Bởi vì chúng chia sẻ một hệ điều hành chung, chỉ một hệ điều hành duy nhất cần được quan tâm bảo trì để sửa và vá lỗi, v.v… Khái niệm này tương tự như những gì chúng ta trải nghiệm với máy chủ hypervisor. Nói chung, container có kích cỡ nhẹ hơn và mang tính “di động” hơn so với VM. 

Kết luận

Các máy ảo và các container khác nhau theo một số cách, nhưng sự khác biệt chính là các container cung cấp mức độ ảo hóa HĐH để nhiều ứng dụng có thể chạy trên chỉ một thực thể HĐH (OS instance). Với máy ảo, phần cứng đang được ảo hóa để chạy nhiều phiên bản HĐH. Tốc độ, sự linh hoạt và tính di động của các container khiến chúng trở thành một công cụ mới giúp hợp lý hóa việc phát triển phần mềm.

Liên hệ tác giả