1. Virtual Machines: Okay trước khi đi sâu vào hai khái niệm này, mình sẽ lướt qua một chút về cách thức vận hành của các công ty, tập đoàn lớn trước khi hai khái niệm này ra đời.Ban đầu, các công ty vận hành việc kinh doanh của họ thông qua các ứng dụng được cài đặt trên những máy chủ lớn (Servers). Mỗi Server chỉ gồm duy nhất một ứng dụng được thực thi, có thể là ứng dụng quản lí trang web, quản lí database hay đơn giản là quản lí emails. Điều này đơn giản là bởi vì những hệ thống này (OS: Linux dist., Windows, etc) không có, hoặc chưa, khả năng vận hành hiệu quả, chính xác và an toàn nhiều ứng dụng cùng lúc trên Server của họ. Do đó, với mỗi một ứng dụng mới họ phải mua thêm riêng một máy Server cho nó (so rich). Yeah, rõ ràng là với cách làm này, thật phung phí resource vì một ứng dụng chả bao giờ tận dụng hết được sức mạnh của một con Server lúc đó. Ngày nay các Server rất mạnh mẽ nên chắc hoạt động hiệu suất bình thường tầm 10% là nhiều. Để “giải phóng tiềm năng” của Server, các kĩ sư dã phát triển nên khái niệm Máy ảo (Virtual Machine). VMs cho phép nhiều ứng dụng chạy trên cùng một Server và, dĩ nhiên, đa nền tảng, bằng cách mô phỏng cả phần mềm và phần cứng. Ví dụ như công ty có 3 Server chạy 3 ứng dụng khác nhau, chúng ta có thể sử dụng 1 Server và chạy 3 VMs trên Server đó (ex: Windows:App1, Linux:App2, Unix:App3). Có thể tóm tắt mô hình của 1 Server chạy đa nền tảng như sau: [APP1][APP2][APP3] [VM1: Linux][VM2: Windows][VM3: Unix] [HYPERVISOR] —> cấp phát và quản lí resource của HW[SERVER/HARDWARE] Hypervisor là VM monitor (VMM), bao gồm phần mềm hoặc Firmware layer giúp chạy đa nền tảng OS chia sẻ chung 1 Hardware máy host. Có hai loại Hypervisor là Bare-metal (MS Hyper-V Server, Citrix XenServer) và Hosted Hyper (Oracle VỉtualBox, MS Hyper-V, etc), mình sẽ đề cập trong bài sau nếu mình siêng.
Yeah, mặc dù VMs nhìn thì tiết kiệm về mặc kinh tế, tuy nhiên, VMs cũng có mặt chưa tốt, đó là ngốn Disk space, RAM, CPU kinh khủng, và khởi động khá chậm. Thêm nữa là vấn đề license cho mỗi OS (nhiều tiền hơn). Từ đây chúng ta có new tech: Containers. 2. Containers: Thoạt nghe thì Containers có vẻ khá giống VMs về mặt hình thức, khác biệt lớn nhất ở đây chính là VMs giả lập toàn bộ hệ thống, trong khi Containers có thể hiểu nôm na là 1 software package siêu gọn nhẹ và tiện lợi, dễ porting, bao gồm tất tần tật những thứ bạn cần như files, configurations, dependencies, bla bla đảm bảo package này chạy được trên bất cứ computing environment nào. Một ví dụ nhỏ: Bạn dev ra 1 website và bạn muốn phân tán nó trên các máy chủ khác chẳng hạn, ok, Container sẽ hỗ trợ bạn. [Container: Libs, HTML code, Scripts, Web img, Web server sofware]➔ Container img Giờ bạn có thể phân tán nó qua các máy chủ khác và sử dụng mà không cần thêm vào bất cứ 3rd party Apps hay tools nào. Sound cool right? Containers mà giới dev chúng ta hay dùng nhất chính là Docker. Okay, Docker có thể chạy trên cả Linux dist. lẫn Windows (mình chỉ làm trên 2 OS này, các bạn biết thêm OS nào thì để lại comment nha).Có thể tóm tắt mô hình của 1 Server chạy Containers như sau: [APP1][APP2][APP3][CONTAINER ENGINE] —> bung container files và đẩy về OS core (Kernel) [OS][SERVER/HARDWARE] Ở đây ta thấy rõ, do mỗi VM chứa cả 1 OS nên làm cho file size lớn hơn dẫn đến boot chậm (minutes). Còn ở Containers thì dùng chung HW và OS, nên file size nhỏ hơn, nhẹ hơn và boot nhanh hơn (milisec), tốn ít RAM và CPU hơn. Có thể nói nếu VM files là portable thì Container files sẽ là ultra-portable.
Bất cứ công nghệ nào cũng có mặt chưa hoàn hảo, và Containers cũng không ngoại lệ. Containers chỉ được đóng gói và hoạt động trên cùng một OS. Ví dụ nếu OS là Linux base thì Containers cũng phải là Linux base, nếu OS là Windows thì Containers cũng chỉ được là Windows. Nói sâu hơn thì cả về mặt kiến trúc luôn. Cơ bản như s390x (IBM Z) dùng trong banking vậy, nó là Big Edian Architecture nên nếu bạn chạy nó trên Ubuntu (Little Edian) chẳng hạn, thì sẽ fail. Lúc đó mình phải dùng đến emulator, nhưng oh yeah đó lại là một câu chuyện khác. Một vấn đề nữa mà Containers gặp phải là tụi nó dùng chung OS nên nếu OS mà crash thì … yeah you know: All falls down! 3. How about using both? Một số dự án thậm chí dùng cả 2 công nghệ, họ chạy VMs và trong 1 VMs nào đó có thể có các Containers.Bài viết đến đây cũng khá/siêu dài rồi. Mong sẽ hữu ích với các bạn. Cảm ơn đã đọc tới đây.