12/08/2018, 11:09

Ảo hoá sử dụng Container, những điều cơ bản cần biết

1. Giới thiệu Như các bạn đã biết, trong những năm gần đây khái niệm "Ảo hoá sử dụng container" được nhắc đến khá nhiều. Vậy nó là cái gì, có những ưu điểm gì và sử dụng nó như thế nào. Bài viết này của mình xin được nêu những khái niệm cơ bản về "ảo hoá sử dụng Container" và so sánh với "Ảo ...

1. Giới thiệu

Như các bạn đã biết, trong những năm gần đây khái niệm "Ảo hoá sử dụng container" được nhắc đến khá nhiều. Vậy nó là cái gì, có những ưu điểm gì và sử dụng nó như thế nào. Bài viết này của mình xin được nêu những khái niệm cơ bản về "ảo hoá sử dụng Container" và so sánh với "Ảo hoá truyền thống" để chúng ta có thể dễ dàng hình dung. (lay2)

2. Ảo hoá truyền thống? (Hypervisor Virtualization)

Nói đến ảo hoá truyền thống, chúng ta có thể hình dung được ngay đó chính là cách sử dụng ảo hoá thông thường mà người dùng hay lựa chọn như: VMWare, Virtual Box, Parallel...

Đây chính là giải pháp rất tốt khi chúng ta muốn chạy nhiều hệ điều hành cùng một lúc trên một máy. Với giải pháp ảo hoá truyền thống. Toàn bộ hệ thống: từ Phần cứng (RAM, CPU, HDD...) cho đến Hệ điều hành đều được "ảo hoá". Đem lại trải nghiệm sử dụng gần tương đương như một máy thật (hehe)

Một đặc điểm rất ưu thế nữa của giải pháp này đó là, chúng ta không cần quan tâm nhiều đến hệ điều hành của máy chính (host system: máy được dùng để cài máy ảo) là hệ điều hành nào. Chỉ cần có nhu cầu cài hệ điều hành bất kỳ mà "Máy Ảo" hỗ trợ là đều có thể cài được. VD trên Ubuntu nhưng chúng ta vẫn có thể cài được máy ảo window XP, window 7, Fedora, kể cả là MacOS ... :what?:

Tuy nhiên, mặc dù có khá nhiều ưu điểm nhưng "máy ảo" lại tồn tại một nhược điểm rất lớn: Việc phải ảo hoá từ phần cứng đến nguyên cả một hệ điều hành làm tiêu tốn một khoản tài nguyên không hề nhỏ của hệ điều hành chủ (host system). Có thể lấy ví dụ dễ hiểu như sau: Nếu bạn đang chạy Ubuntu và có nhu cầu chạy service vài chụ MB trên Fedora thôi thì bạn cũng phải tốn ít nhất: Vài GB cho hệ điều hành Fedora , vài trăm MB cấp cho Ram Máy ảo, và 1 vài nhân của CPU cho CPU của máy ảo.

Điểm yếu nữa của "máy ảo truyền thống" đó là thời gian chạy service, chúng ta phải khởi động cả hệ điều hành ảo mới chạy được service này. Và do đó thời gian startup, stop, hay restart nhanh cũng phải vài phút. Đây là sơ đồ minh hoạ hoạt động của "máy ảo" trên máy chủ (host system) Từ những điểm yếu trên mà "Ảo hoá sử dụng Container" sinh ra như là một giải pháp hoàn hảo để chạy các service trên máy ảo mà tiêu tốn tài nguyên ít nhất. Đồng thời có performance cao nhất

3. Ảo hoá sử dụng Container

Ảo hoá sử dụng Container còn có cách gọi khác là "ảo hoá mức hệ điều hành" (operating system virtualization). Chúng ta có thể thấy ngay sự khác nhau từ cái tên: một bên là "ảo hoá hệ điều hành" còn một bên là "máy ảo".

Ở đây, chúng ta không ảo hoá cả phần cứng , hệ điều hành "như thật" nữa mà chỉ ảo hoá môi trường. Các service trong Container vẫn chạy chung hệ điều hành chủ ở phía dưới, chung Kernel nhưng môi trường chạy của các service thì luôn được đảm bảo hoàn toàn độc lập với nhau như sơ đồ biểu diễn dưới đây:

Thuật ngữ "Container" ở đây được hiểu là khái niệm đóng gói. Một Container chứa đầy đủ application và tất các các thành phần phụ thuộc như: các file Bins, các thư viện kèm theo để đảm bảo các ứng dụng có thể chạy độc lập trong container đó. Như vậy mỗi Container ở đây được coi như một "máy ảo" mini (hehe)

Điểm mạnh lớn nhất của Container đó chính là "hiệu năng": Là ảo hoá nhưng Container lại rất nhẹ. Hệ điều hành chủ quản lý các Container bằng Systemd hoặc Upstart. Do vậy, các Container ở đây như là môt process của hệ thống. Chỉ mất vài giây để start, stop hay restart một Container, và khi các container ở trạng thái Idle (chờ) chúng gần như không tiêu tốn tài nguyên CPU. Với một máy tính cấu hình thông thường, nếu chạy máy ảo truyền thống chúng ta chỉ chạy được khoảng vài cái là cùng. Tuy nhiên nếu chạy bằng Container chúng ta có thể chạy vài chục thậm chí đến cả vài trăm cái. (yeah)

Một điểm mạnh nữa của Container đó là tính di động và tính mở rộng: Chúng ta có thể tự tạo một Container từ các template có sẵn, cài đặt môi trường, service, sau đó lưu trạng thái Container lại như là một "image"và triển khai image này đến bất kỳ chỗ nào chúng ta mong muốn. Hiện có nhiều dịch vụ cung cấp cho chúng ta có thể lưu Container lại trên Cloud như docker cực kỳ thuận tiện (tanghoa)

Điểm yếu có thể coi là duy nhất của "ảo hoá sử dụng Container" đó chính là giới hạn của việc ảo hoá hệ điều hành: Do các Container sử dụng chung kernel với hệ điều hành chủ nên chúng ta chỉ có thể "ảo hoá" được các hệ điều hành mà hệ điều hành chủ hỗ trợ. Ví dụ: Nếu hệ điều hành chủ là Linux thì chúng ta chỉ có thể ảo hoá được các hệ điều hành nhân Linux như Lubuntu, OpenSuse, LinuxMint ... chứ không thể tạo được một container Window được.

4. Kết luận

"Ảo hoá sử dụng Container" hiện ngay đang được sử dụng ngày một rộng rãi. Những công ty tập đoàn lớn (đặc biện là Google) đã triển khai giải pháp này trên hầu hết các dịch vụ của họ. Do vậy, tác giả nghĩ rằng sẽ không có gì bất ngờ khi nói Container sẽ là tương lai của công nghệ "ảo hoá", dần thay thế giải pháp ảo hoá truyền thống.(lay2)

Nguồn tham khảo

http://www.linuxjournal.com/content/containers—not-virtual-machines—are-future-cloud?page=0,1

http://blog.smartbear.com/web-monitoring/why-containers-instead-of-hypervisors/

https://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-

0