VPS, VM và VPC khác nhau thế nào?
VM là công nghệ, VPS là server cho thuê chạy trên VM hoặc container, còn VPC là mạng cloud riêng. Hiểu đúng để chọn dịch vụ và thiết kế hệ thống.
VPS, VM và VPC trong một đoạn
VM (virtual machine) là một máy tính được tạo bằng phần mềm: hypervisor chia một máy chủ vật lý thành nhiều máy độc lập, mỗi máy chạy kernel riêng. VPS (virtual private server) là một máy chủ được cho bạn thuê dưới dạng sản phẩm, kèm hệ điều hành, thường có quyền root và mức giá theo tháng. Phần lớn gói VPS là máy ảo, nhưng một số nhà cung cấp bán container dùng chung kernel của host dưới cùng tên gọi này. VPC (virtual private cloud) không phải là máy chủ. Đây là một mạng riêng do bạn định nghĩa trong cloud account, sau đó đưa các resource vào mạng đó. VM là công nghệ phổ biến. VPS là sản phẩm. VPC là mạng bao quanh sản phẩm.
Hai trong ba thuật ngữ này mô tả một máy. Thuật ngữ còn lại mô tả một mạng. Hầu hết nhầm lẫn xuất phát từ sự khác biệt này, vì mọi người so sánh chúng như thể đây là ba sản phẩm nằm trên cùng một kệ.
VM là gì
Hypervisor là lớp giả lập phần cứng. Nó cấp cho mỗi guest một CPU ảo, một vùng bộ nhớ, một ổ đĩa ảo và một card mạng ảo, sau đó ngăn các guest nhìn thấy nhau. KVM, Xen, Hyper-V và VMware ESXi là những hypervisor phổ biến trên server. Các hypervisor hiện đại sử dụng phần mở rộng virtualisation của CPU (Intel VT-x, AMD-V), nên instruction của guest chạy trực tiếp trên CPU thật với tốc độ gần bằng tốc độ native, thay vì bị diễn giải.
Điều sysadmin cần quan tâm là kernel. VM khởi động kernel riêng, nên bạn có thể chọn distribution, load kernel module và đặt các giá trị sysctl chỉ áp dụng cho VM của bạn. Điều này khác với container (LXC, Docker), vì container dùng chung kernel của host và chỉ có view riêng về process và file.
Bạn có thể kiểm tra trên bất kỳ máy Linux nào bằng một lệnh.
systemd-detect-virtkvm nghĩa là bạn đang dùng một virtual machine trên hypervisor KVM. lxc hoặc openvz nghĩa là bạn đang ở trong một container dùng kernel của người khác. none nghĩa là không phát hiện được virtualisation được hỗ trợ. Nếu thiếu command này, lscpu | grep -i hypervisor sẽ hiển thị thông tin về hypervisor nhưng không xác định được container.
VPS là gì
VPS là một sản phẩm thương mại được xây dựng trên một server biệt lập, thường là một VM. Công nghệ bên dưới là virtualisation. Từ “VPS” bổ sung những thứ giúp sản phẩm này có thể bán được: OS image để bạn reinstall, một IP address, hạn mức bandwidth, control panel, giá thuê theo tháng và một nơi để bạn liên hệ khi host gặp sự cố. Từ “Private” dùng để phân biệt VPS với shared hosting, nơi hàng trăm website dùng chung một operating system và một cấu hình PHP.
Vì VPS là tên sản phẩm chứ không phải thuật ngữ kỹ thuật, VPS không phải lúc nào cũng là một VM đầy đủ. Một số gói giá rẻ cung cấp container nhưng vẫn gọi là VPS. OpenVZ, một container platform đứng sau nhiều gói như vậy, mô tả các container của mình là “còn được gọi là virtual private server”. Khác biệt này thể hiện ngay khi bạn cần kernel. Với gói dựa trên container, kernel thuộc về host và bạn không được phép thay đổi kernel đó. sudo modprobe wireguard sẽ fail nếu không tìm thấy module trong module directory của container, ngay cả khi host đã load module đó; việc load module còn thiếu cũng cần quyền thay đổi kernel của host. Nếu host kernel không hỗ trợ WireGuard, việc tạo interface (ip link add dev wg0 type wireguard) sẽ fail với RTNETLINK answers: Operation not supported. Sau đó, wg-quick sẽ chuyển sang userspace implementation (mặc định là wireguard-go) nếu đã được cài đặt và in ra dòng “Missing WireGuard kernel module. Falling back to slow userspace implementation.” Cơ chế fallback này vẫn yêu cầu container được phép sử dụng TUN device, nhưng không phải host nào cũng cho phép. Nếu không có userspace binary, wg-quick sẽ dừng với lỗi. Với gói KVM, kernel thuộc về bạn: bạn cài WireGuard, load module nếu module chưa được load, cấu hình interface, rồi tunnel sẽ hoạt động. Nếu bạn định chạy Docker, VPN, custom kernel hoặc các virtual machine của riêng mình bên trong server, hãy kiểm tra loại virtualisation trước khi mua. Việc chạy virtual machine bên trong VPS cần KVM với nested virtualisation được bật trên host, nên số gói đáp ứng được yêu cầu này còn ít hơn.
VPC là gì
VPC là một mạng được định nghĩa bằng phần mềm bên trong cloud provider. Trên hầu hết cloud, bạn gán cho VPC một dải địa chỉ theo ký hiệu CIDR, chẳng hạn 10.0.0.0/16, rồi chia dải đó thành các subnet (Google Cloud bỏ qua dải mạng cấp VPC và cấp cho mỗi subnet theo khu vực một dải riêng). Bạn gắn route table và đặt các firewall rule (security group) trước những resource bên trong. VPC không có CPU, memory hay disk. Không có gì để đăng nhập. Khi xóa mọi server trong một VPC, VPC vẫn nằm đó, trống và thường không mất phí.
VPC cung cấp cho bạn địa chỉ private. Hai server trong cùng một VPC giao tiếp qua các địa chỉ như 10.0.1.15 trên hạ tầng nội bộ của provider, nên traffic không đi qua public internet và không bị tính phí internet egress. Khi đó, database chỉ cần listen trên địa chỉ private của nó, và không có port nào được expose ra bên ngoài.
ip -4 addr showĐịa chỉ bên trong 10.0.0.0/8, 172.16.0.0/12 hoặc 192.168.0.0/16 là private. Chỉ có public address không khiến server có thể truy cập từ internet: route và firewall rule cũng phải cho phép truy cập.
VPC có làm server của tôi private không?
Không. Đây là hiểu lầm tốn kém nhất trong 3 thuật ngữ này. VPC kiểm soát việc định tuyến và cấp địa chỉ. Nó không quyết định Internet có thể truy cập một máy hay không. Nếu một instance có public IP, subnet của nó có route ra Internet và các security rule cho phép port 22 từ 0.0.0.0/0, thì instance đó exposed tương tự mọi server khác, dù có dùng VPC hay không. Với VPC mặc định, route ra Internet này đã có sẵn. Isolation mà VPC cung cấp là khả năng không cấp public address cho resource, cùng với các rule quy định subnet nào được phép giao tiếp với subnet nào.
3 thuật ngữ này cũng nói đến các dạng isolation khác nhau. VM isolate compute: hypervisor tách CPU time và memory, nên guest khác không thể đọc RAM của bạn. Isolation này yếu hơn đối với disk và network, vì neighbour bận trên cùng host vẫn có thể làm giảm hiệu năng của bạn. Container-based VPS dùng chung một kernel, nên lỗi ở kernel level là rủi ro chung. VPC không isolate compute. Nó chỉ định hình network.
Mô hình chi phí
VPS thường được bán với mức giá cố định hằng tháng cho một máy chủ có cấu hình cố định. Bạn biết trước hóa đơn trước khi tháng mới bắt đầu, còn disk và hạn mức transfer đã được tính trong đó. Tính dễ dự đoán này là lý do chính khiến nhiều người chọn VPS thay cho cloud instance khi chạy workload nhỏ.
Cloud VM được tính phí theo mức sử dụng. Instance được tính theo giờ hoặc theo giây, còn disk, snapshot, load balancer và traffic outbound được tính riêng. VPC bản thân thường miễn phí, nhưng các thành phần managed gắn với nó thì không: NAT gateway cho phép các instance private truy cập Internet sẽ bị tính phí theo giờ, còn cách tính phí traffic phụ thuộc vào provider. AWS tính thêm phí cho mỗi gigabyte được NAT gateway xử lý, trong khi OVHcloud cho biết Public Cloud Gateway được tính phí theo giờ và theo mức sử dụng, với traffic đã bao gồm. Trên AWS, traffic đi qua các availability zone cũng bị tính phí, còn Azure không tính phí traffic giữa các zone trong cùng một region. Tính đến ngày October 27, 2026, tài liệu AWS VPC cho biết mỗi region có một default VPC, trong khi AWS VPC FAQ cho biết các account được tạo trước ngày March 18, 2013 có thể sử dụng default VPC trong những region đã bật, nếu trước đó chưa khởi chạy EC2 instance hoặc provision resource ELB, RDS, ElastiCache hay Redshift tại đó. Default VPC đã xóa có thể được tạo lại nhưng không thể khôi phục. Google Cloud tạo một default network cho mọi project mới, trừ khi administrator tắt tùy chọn này, còn Azure tạo một virtual network cùng với VM mới nếu bạn không chọn network có sẵn. Dù thế nào, cloud VM của bạn vẫn nằm trong một trong các network này, cho dù bạn có yêu cầu hay không.
Bạn thực sự cần loại nào
- Một server cho website, app, game server hoặc VPN: VPS. 10 phút đầu tiên trên một VPS mới quan trọng hơn tên gọi của gói dịch vụ.
- Nhiều server cần kết nối với nhau bằng địa chỉ private: VPC hoặc tính năng private network mà nhà cung cấp VPS của bạn dùng tên khác.
- Workload phải tiếp tục hoạt động khi cả một datacentre ngừng hoạt động: cloud có nhiều zone, tức là các VM nằm trong một VPC.
- Cần toàn quyền kiểm soát kernel hoặc muốn chạy hypervisor riêng bên trên: VPS dựa trên KVM (bật nested virtualisation nếu bạn muốn chạy hypervisor) hoặc dedicated server. Trong lúc so sánh, hãy kiểm tra loại disk đứng sau gói dịch vụ.
Hầu hết project chỉ có một server không cần VPC. Tính năng private network đi kèm VPS đã đáp ứng cùng nhu cầu cho một nhóm nhỏ máy.
FAQ
VPS có phải là VM không?
Thường là có, nhưng không phải lúc nào cũng vậy. Mọi VPS chạy trên KVM, Xen hoặc VMware đều là máy ảo, nhưng không phải mọi máy ảo đều là VPS, vì VM chạy trên laptop của bạn bằng VirtualBox không phải sản phẩm của ai cả. Ngược lại, không phải VPS nào cũng là VM: các gói chạy trên OpenVZ hoặc LXC là container dùng chung kernel của host, và bản thân OpenVZ gọi các container của mình là virtual private server. Hãy xác nhận bằng systemd-detect-virt trước khi phụ thuộc vào quyền truy cập kernel.
Tôi có thể đặt một VPS bên trong VPC không?
Thường là không, vì VPC là một cấu trúc thuộc về một cloud provider; AWS cũng hỗ trợ chia sẻ subnet giữa các account trong cùng một tổ chức. VPS từ một provider độc lập nằm trên network của provider đó. Nếu cần liên kết private giữa hai bên, bạn phải tạo một VPN tunnel giữa chúng, sau đó VPS sẽ truy cập các private subnet thông qua tunnel này.
Vì sao hóa đơn cloud của tôi cao hơn VPS tương đương?
Giá instance chỉ là một phần. Storage, snapshot, traffic outbound, load balancer và NAT gateway được tính thành các khoản riêng trong cloud tính phí theo mức sử dụng, và riêng một NAT gateway có thể tốn mỗi tháng nhiều hơn một VPS nhỏ. VPS có giá cố định gộp disk và dung lượng transfer vào cùng một mức giá, nên cùng một workload thường có vẻ rẻ hơn khi chạy trên đó.
Làm thế nào để kiểm tra server của tôi có quyền truy cập kernel thực sự?
Chạy systemd-detect-virt và đọc kết quả. kvm, xen hoặc vmware (hoặc amazon trên các instance EC2 mới hơn) nghĩa là bạn có kernel riêng và modprobe có thể load module vào đó. lxc, lxc-libvirt hoặc openvz nghĩa là bạn dùng chung kernel của host; việc load module cần quyền trên kernel của host, còn các setting có namespace bên dưới /proc/sys, bao gồm cả setting network, vẫn có thể cấu hình nếu host cho phép. Một cách xác nhận khác là uname -r, lệnh này trên gói container thường báo một phiên bản kernel mà bản phân phối của bạn chưa từng release.