Bài viết này được viết dựa trên tổng hợp nhiều công nghệ, không nghiên cứu sâu vào một phương pháp tiếp cận hoặc một ứng dụng cụ thể nhưng có giải thích về các thuật ngữ, nếu có kiến thức nào sai vui lòng cung cấp để hoàn thiện bài viết.
Mục lụcI. Giới thiệu về Virtual Machine (VM)
1. Virtual Machine là gì?
2. Cấu trúc của một VM
3. Lý do nên sử dụng Virtual Machine
II. Hypervisor: The Core of Virtualization
1. Hypervisor Type 1 (Bare-metal)
2. Hypervisor Type 2 (Hosted)
III. CPU Virtualization
1. vCPU là gì?
2. Vấn đề và giải pháp với vCPU
3. Chọn CPU nào cho ảo hóa?
IV. Memory Management in Virtual Machines
1. Phân bổ bộ nhớ tĩnh
2. Phân bổ bộ nhớ động
3. Kỹ thuật tối ưu RAM: Memory Sharing, Overcommitment, TPS, Ballooning, Swapping
V. Storage Virtualization
1. Lưu trữ File-based
2. Lưu trữ Block-based
3. Snapshot và Clone
VI. Networking in Virtual Machines
VII. GPU in Virtual Environment
1. GPU Passthrough
2. GPU Sharing
VII. Kết luận
I. Giới thiệu về Virtual Machine (VM)
1. Virtual Machine là gì?
- Virtual machine (VM) là một máy tính ảo được tạo ra bên trong một máy chủ vật lý, cho phép chạy các hệ điều hành và ứng dụng như một máy tính thực.
- Mỗi VM có hệ điều hành riêng, tài nguyên phần cứng như CPU, RAM, ổ cứng, và các thành phần khác được ảo hóa từ phần cứng thực tế của máy chủ.
- VMs giúp người dùng chạy nhiều hệ điều hành trên cùng một máy tính triển khai ứng dụng một cách độc lập và an toàn hơn.
2. Cấu trúc của một VM
- Cấu trúc của một VM bao gồm:
- Hypervisor: Phần mềm hoặc phần cứng quản lý và phân phối tài nguyên từ máy chủ vật lý cho các VMs. Hypervisor có thể là loại 1 (chạy trực tiếp trên phần cứng) hoặc loại 2 (chạy trên hệ điều hành).
- Guest OS: Hệ điều hành được cài đặt bên trong VM.
- Virtualized Hardware: CPU, RAM, ổ cứng và các tài nguyên mạng được ảo hóa, nhưng hoạt động như phần cứng thực sự đối với hệ điều hành và ứng dụng chạy trên VM.
3. Lý do nên sử dụng Virtual Machine
Tại sao lại phải sử dụng Virtual Machine?
- Không ai rảnh để làm ra một ứng dụng mà không có tính ứng dụng gì cả. VM cũng vậy mình có một số lý do để khuyên các bạn nên sử dụng VM:
- Bảo mật - Nếu một ứng dụng bạn đang lưu trữ có lỗ hổng (và sự thật là mọi ứng dụng đều có), ít nhất chúng chỉ bị cô lập trong máy ảo (VM) đó thay vì ảnh hưởng đến toàn bộ server.
- Cô lập - Nếu một ứng dụng cần một phiên bản cụ thể của thư viện PHP và ứng dụng khác cần phiên bản khác, điều này không thành vấn đề trong VM. Container cũng có thể giải quyết được vấn đề này.Ngoài ra, một số phần mềm chỉ hỗ trợ một số phiên bản Linux hoặc thậm chí chỉ chạy trên Windows mà máy của bạn lại chỉ có thể sử dụng 1 hệ điều hành thì VM for you.
- Bảo trì - Với VM, bạn có thể lưu trạng thái dịch vụ và khôi phục sau khi máy chủ khởi động lại, có thể tiết kiệm thời gian và công sức so với việc khởi động lại các dịch vụ.
- Snapshots – Chắc có mình tui thấy cái này là ngon nhất, đối với một IT chuyên phá hoại OS như tôi thì việc có một cổ máy thời gian của Doremon sẽ rất là có ích, tính năng snapshots cho phép bạn quay trở lại phiên bản bạn đánh dấu.
- Độc lập phần cứng – Khi server của bạn gặp sự cố, tất cả những gì bạn cần làm là cài lại hệ điều hành và di chuyển các VM, sau đó chúng sẽ hoạt động trở lại. Việc phải cài đặt lại mọi thứ trên máy chủ sẽ rất phiền phức. Container cũng có thể giúp trong trường hợp này.
- Vấn đề về RAM và cô lập - Nếu một dịch vụ sử dụng nhiều RAM (ví dụ, rò rỉ bộ nhớ) hoặc tải trọng lớn, nó sẽ (gần như) không ảnh hưởng đến các dịch vụ khác (nếu không phân bổ quá mức). Bạn cũng có thể sử dụng VM để giới hạn việc sử dụng bộ nhớ.
- Ổ đĩa riêng biệt - Khi ứng dụng ghi log nhiều và không thiết lập đúng quy tắc xoay vòng log, điều này có thể làm đầy phân vùng và khiến các ứng dụng khác bị đóng băng hoặc sập. Khi điều này xảy ra trên một VM, chỉ VM đó bị ảnh hưởng.
- Nâng cấp/dùng thử dễ dàng - Khi bạn muốn nâng cấp lớn hoặc thử nghiệm, bạn tạo VM mới và thực hiện nâng cấp. Khi mọi thứ hoạt động tốt, bạn đồng bộ dữ liệu và loại bỏ VM cũ.
II. Hypervisor: The Core of Virtualization
- Hypervisor, còn được gọi là trình quản lý máy ảo (Virtual Machine Monitor - VMM), là phần mềm tạo và vận hành các máy ảo (VM). Hypervisor cho phép một máy chủ vật lý hỗ trợ nhiều máy ảo bằng cách chia sẻ ảo hóa các tài nguyên của nó, như bộ nhớ và khả năng xử lý.
- Nói chung, Hypervisor được tạo ra để tạo và quản lý VM, nhưng đây chỉ mới là bề nổi của tảng băng chìm nói như mình thì ai cũng nói được, vì đây là bài viết deep dive nên mình sẽ sâu hơn chút.
- Có hai loại hypervisor chính, được gọi là “Type 1” (hay “bare metal”) và “Type 2” (hay “hosted”):
- Hypervisor Type 1: Hoạt động giống như một hệ điều hành nhỏ và chạy trực tiếp trên phần cứng của máy chủ. Do đó, nó có hiệu suất cao và được sử dụng phổ biến trong các môi trường doanh nghiệp hoặc trung tâm dữ liệu lớn.
- Hypervisor Type 2: Chạy dưới dạng một lớp phần mềm trên hệ điều hành, giống như các chương trình máy tính khác. Loại này thường được sử dụng trên các máy tính cá nhân để ảo hóa các hệ điều hành khác nhau trong cùng một máy.
1. Hypervisor Type 1 (Bare-metal)
bare-metal hypervisor, trong đó phần mềm ảo hóa được cài đặt trực tiếp trên phần cứng, nơi mà hệ điều hành thường được cài đặt. Vì các hypervisor bare-metal tách biệt khỏi hệ điều hành dễ bị tấn công, chúng vô cùng an toàn. Ngoài ra, chúng thường có hiệu suất và hiệu quả cao hơn so với hypervisor hosted. Do những lý do này, hầu hết các công ty doanh nghiệp lựa chọn bare-metal hypervisor cho nhu cầu tính toán trong trung tâm dữ liệu.
2. Hypervisor Type 2 (Hosted)
hosted hypervisor chạy trên hệ điều hành (OS) của máy chủ. Mặc dù hosted hypervisor hoạt động trong OS, các hệ điều hành bổ sung (và khác) có thể được cài đặt trên hypervisor. Nhược điểm của hosted hypervisor là độ trễ cao hơn so với bare-metal hypervisor. Điều này là do quá trình giao tiếp giữa phần cứng và hypervisor phải đi qua lớp OS bổ sung.
Fact: Hosted hypervisor đôi khi còn được gọi là client hypervisor, vì chúng thường được sử dụng cho người dùng cuối và thử nghiệm phần mềm, nơi mà độ trễ cao không phải là mối lo ngại lớn.
Đó là lý thuyết còn theo mình, type 2 thường được dùng trên máy tính của chúng ta thường là để test sương sương tạo vài cái máy ảo chạy hệ điều hành coi nó có ổn để chúng ta nâng cấp hay không, còn type 1 thì được sử dụng rộng rãi hơn ở các server hoặc datacenter để tăng tốc độ xử lý.
Last edited: