تفاوت VPS، VM و VPC چیست و کدام را نیاز دارید؟
VM فناوری ساخت ماشین مجازی است، VPS همان ماشین بهعنوان محصول و VPC شبکه خصوصی ابری است. تفاوت کاربرد، دسترسی root و انتخاب درست را روشن کنید.
VPS، VM و VPC در یک پاراگراف
VM (ماشین مجازی) رایانهای است که با نرمافزار ساخته میشود: یک hypervisor یک سرور فیزیکی را به چند ماشین مستقل تقسیم میکند و هرکدام kernel خود را اجرا میکند. VPS (سرور خصوصی مجازی) یکی از همین ماشینهای مجازی است که بهعنوان یک محصول در اختیار شما قرار میگیرد و دارای سیستمعامل، دسترسی root و هزینه ماهانه است. VPC (ابر خصوصی مجازی) اصلاً سرور نیست. VPC یک شبکه خصوصی است که درون یک حساب ابری تعریف میکنید و منابع را در آن قرار میدهید. VM فناوری است. VPS محصول است. VPC شبکه پیرامون محصول است.
دو مورد از این واژهها یک ماشین را توصیف میکنند. مورد سوم یک شبکه را توصیف میکند. تقریباً تمام سردرگمی از همین ناهماهنگی ناشی میشود، زیرا افراد آنها را طوری با هم مقایسه میکنند که گویی سه محصول در یک قفسه هستند.
ماشین مجازی چیست
هایپروایزر لایهای است که وانمود میکند سختافزار است. این لایه به هر مهمان یک CPU مجازی، مقداری حافظه، یک دیسک مجازی و یک کارت شبکه مجازی اختصاص میدهد و سپس مانع مشاهده مهمانها توسط یکدیگر میشود. KVM، Xen، Hyper-V و VMware ESXi از هایپروایزرهای رایج در سرورها هستند. هایپروایزرهای مدرن به افزونههای مجازیسازی CPU مانند Intel VT-x و AMD-V متکی هستند؛ بنابراین دستورهای مهمان با سرعتی نزدیک به سرعت بومی روی CPU واقعی اجرا میشوند و تفسیر نمیشوند.
برای مدیر سیستم، بخش مهم kernel است. یک VM، kernel خودش را راهاندازی میکند. بنابراین میتوانید توزیع را انتخاب کنید، ماژولهای kernel را بارگذاری کنید و مقادیر sysctl را تنظیم کنید؛ این تنظیمات فقط روی همان VM اعمال میشوند. این وضعیت با یک container مانند LXC یا Docker متفاوت است. container از kernel میزبان استفاده میکند و فقط نمای مستقل خودش از فرایندها و فایلها را دارد.
میتوانید پاسخ را روی هر سیستم Linux با یک دستور مشاهده کنید.
systemd-detect-virtkvm یعنی شما در یک ماشین مجازی روی هایپروایزر KVM هستید. lxc یا openvz یعنی در یک container با kernel متعلق به سیستم دیگری قرار دارید. none یعنی سختافزار متعلق به شماست. اگر این دستور وجود نداشته باشد، lscpu | grep -i hypervisor همین اطلاعات را از پرچمهای CPU نمایش میدهد.
VPS چیست
VPS یک پوشش تجاری برای یک VM است. فناوری زیربنایی آن مجازیسازی است. واژه «VPS» قابلیتهایی را اضافه میکند که آن را قابل فروش میکنند: یک image سیستمعامل که میتوانید دوباره نصب کنید، یک آدرس IP، سهمیه پهنایباند، یک control panel، قیمت ماهانه و شخصی که هنگام از کار افتادن host بتوانید به او ایمیل بزنید. واژه «Private» برای متمایز کردن آن از shared hosting به کار میرود؛ در shared hosting صدها سایت از یک سیستمعامل و یک پیکربندی PHP مشترک استفاده میکنند.
از آنجا که VPS نام یک محصول است، نه یک اصطلاح فنی، همیشه به معنای یک VM کامل نیست. بعضی طرحهای ارزان، containerها را نیز با همین نام عرضه میکنند. تفاوت این دو، نخستین بار هنگام نیاز به kernel آشکار میشود. در یک طرح مبتنی بر container، sudo modprobe wireguard با RTNETLINK answers: Operation not supported یا modprobe: FATAL: Module wireguard not found شکست میخورد، زیرا kernel متعلق به host است و اجازه تغییر آن را ندارید. در یک طرح KVM، module بارگذاری میشود و tunnel برقرار میشود. اگر قصد دارید Docker، یک VPN، kernelهای سفارشی یا ماشینهای مجازی خودتان را داخل server اجرا کنید، پیش از خرید نوع مجازیسازی را بررسی کنید. اجرای ماشینهای مجازی داخل یک VPS به KVM نیاز دارد که nested virtualisation در host فعال شده باشد؛ بنابراین تعداد طرحهای قابل استفاده باز هم کمتر است.
VPC چیست
VPC یک شبکه تعریفشده با نرمافزار درون یک ارائهدهنده ابری است. برای آن یک محدوده آدرس را با نمادگذاری CIDR، مانند 10.0.0.0/16، تعیین میکنید. سپس زیرشبکهها را از این محدوده ایجاد میکنید، جدولهای مسیریابی را متصل میکنید و قواعد فایروال (security groups) را در برابر منابع داخل آن قرار میدهید. VPC هیچ CPU، حافظه یا دیسکی ندارد. چیزی وجود ندارد که بتوانید به آن وارد شوید. حذف همه سرورها از یک VPC باعث نمیشود خود VPC حذف شود؛ VPC خالی باقی میماند و معمولاً هزینهای ندارد.
VPC امکان استفاده از آدرسدهی خصوصی را فراهم میکند. دو سرور در یک VPC از طریق آدرسهایی مانند 10.0.1.15 روی زیرساخت داخلی ارائهدهنده با یکدیگر ارتباط برقرار میکنند. بنابراین این ترافیک هرگز از اینترنت عمومی عبور نمیکند و بهعنوان خروجی اینترنتی هزینهای ندارد. در این حالت، پایگاه داده میتواند فقط روی آدرس خصوصی خود به درخواستها گوش دهد و هیچ پورتی در معرض جهان قرار نمیگیرد.
ip -4 addr showآدرسی که درون 10.0.0.0/8، 172.16.0.0/12 یا 192.168.0.0/16 قرار دارد، خصوصی است. وجود یک آدرس عمومی روی همان ماشین یعنی سرور مستقیماً از اینترنت قابل دسترسی است، صرفنظر از اینکه در کدام شیء شبکه قرار دارد.
آیا VPC سرور من را خصوصی میکند؟
خیر؛ این پرهزینهترین برداشت نادرست از این سه اصطلاح است. VPC مسیریابی و آدرسدهی را کنترل میکند. VPC تعیین نمیکند که اینترنت بتواند به یک ماشین دسترسی داشته باشد یا نه. اگر یک instance دارای IP عمومی باشد و قوانین امنیتی اجازه دسترسی به پورت 22 را از 0.0.0.0/0 بدهند، این instance، چه در VPC باشد و چه نباشد، به همان اندازه هر سرور دیگری در معرض دسترسی قرار دارد. جداسازیای که VPC فراهم میکند، امکان اختصاص ندادن هیچ آدرس عمومی به یک resource است؛ همچنین میتوانید قوانینی تعیین کنید که مشخص کنند کدام subnetها مجاز به ارتباط با کدام subnetها هستند.
این سه اصطلاح، انواع متفاوتی از جداسازی را نیز بیان میکنند. یک VM منابع محاسباتی را جدا میکند: hypervisor زمان CPU و حافظه را تفکیک میکند؛ بنابراین guest دیگری نمیتواند RAM شما را بخواند. این جداسازی در مورد disk و network ضعیفتر است؛ زیرا یک همسایه پرمصرف روی همان host همچنان میتواند سرعت شما را کاهش دهد. یک VPS مبتنی بر container از یک kernel مشترک استفاده میکند؛ بنابراین نقصی در سطح kernel، خطری مشترک است. VPC هیچ بخشی از منابع محاسباتی را جدا نمیکند. VPC فقط network را شکل میدهد.
مدل ذهنی قیمتگذاری
یک VPS معمولاً با قیمت ماهانه ثابت برای یک ماشین با مشخصات ثابت عرضه میشود. پیش از شروع ماه، از مبلغ صورتحساب مطلع هستید و فضای دیسک و سهمیه انتقال داده نیز در همان مبلغ گنجانده شدهاند. این قابلیت پیشبینی، دلیل اصلی انتخاب VPS بهجای یک نمونه ابری برای بار کاری کوچک است.
هزینه یک cloud VM بر اساس میزان استفاده محاسبه میشود. هزینه نمونه بهصورت ساعتی یا ثانیهای محاسبه میشود و دیسک، snapshotها، load balancer و ترافیک خروجی نیز جداگانه صورتحساب میشوند. خود VPC معمولاً رایگان است، اما اجزای مدیریتشده متصل به آن رایگان نیستند: یک NAT gateway که به نمونههای خصوصی اجازه میدهد به اینترنت دسترسی پیدا کنند، بر اساس ساعت و گیگابایت صورتحساب میشود و ترافیک بین availability zoneها نیز هزینه دارد. تا July 2026، cloudهای اصلی همچنان هر نمونه جدید را بهصورت خودکار در یک default VPC قرار میدهند؛ بنابراین، چه درخواست کرده باشید چه نه، از یکی استفاده میکنید.
واقعاً به کدام مورد نیاز دارید
- یک سرور برای وبسایت، برنامه، سرور بازی یا VPN: یک VPS. ده دقیقه اول در یک VPS جدید از نام طرح مهمتر است.
- چند سرور که باید از طریق نشانیهای خصوصی به یکدیگر دسترسی داشته باشند: یک VPC، یا قابلیتی برای شبکه خصوصی که ارائهدهنده VPS شما با نام دیگری ارائه میکند.
- بارکاریای که باید در صورت از دسترس خارج شدن یک مرکز داده کامل به کار خود ادامه دهد: یک cloud با چند zone؛ یعنی VMهایی درون یک VPC.
- کنترل کامل بر kernel، یا اجرای hypervisor اختصاصی روی آن: یک VPS مبتنی بر KVM یا یک سرور اختصاصی. هنگام مقایسه، نوع دیسک استفادهشده در طرح را نیز بررسی کنید.
بیشتر پروژههای تکسروره هرگز به VPC نیاز ندارند. قابلیت شبکه خصوصی همراه با VPS، همین کار را برای تعداد محدودی ماشین انجام میدهد.
FAQ
آیا VPS همان VM است؟
VPS یک VM است که شخصی آن را به شما میفروشد. هر VPS ساختهشده بر پایه KVM، Xen یا VMware یک ماشین مجازی است، اما هر ماشین مجازی VPS نیست؛ زیرا VM اجراشده روی لپتاپ شما در VirtualBox محصول هیچ ارائهدهندهای نیست. برخی طرحهای ارزان با عنوان VPS، بهجای VM کامل، کانتینر هستند؛ بنابراین پیش از اتکا به دسترسی به kernel، این مورد را با systemd-detect-virt بررسی کنید.
آیا میتوانم یک VPS را داخل VPC قرار دهم؟
معمولاً نمیتوانید؛ زیرا VPC ساختاری متعلق به یک ارائهدهنده cloud است و فقط منابعی را در خود جای میدهد که در همان حساب ایجاد شدهاند. VPS یک ارائهدهنده مستقل روی شبکه همان ارائهدهنده قرار دارد. اگر به اتصال خصوصی بین این دو نیاز دارید، باید بهجای آن بینشان یک تونل VPN ایجاد کنید؛ سپس VPS از طریق آن به subnetهای خصوصی دسترسی پیدا میکند.
چرا صورتحساب cloud من از VPS معادل بیشتر است؟
قیمت instance فقط بخشی از هزینه است. Storage، snapshotها، ترافیک خروجی، load balancerها و NAT gatewayها در یک cloud مبتنی بر محاسبه مصرف، ردیفهای هزینه جداگانه دارند و هزینه یک NAT gateway بهتنهایی ممکن است در ماه از یک VPS کوچک بیشتر شود. VPS با قیمت ثابت، disk و سهمیه انتقال داده را در یک مبلغ ادغام میکند؛ به همین دلیل همان workload اغلب در VPS ارزانتر به نظر میرسد.
چگونه بررسی کنم که server من دسترسی واقعی به kernel دارد؟
systemd-detect-virt را اجرا کنید و پاسخ را بخوانید. kvm، xen یا vmware به این معناست که kernel اختصاصی خود را دارید و modprobe کار میکند. lxc، lxc-libvirt یا openvz به این معناست که kernel میزبان را با دیگران به اشتراک گذاشتهاید و فرمانهایی که moduleها را بارگذاری میکنند یا در /proc/sys مینویسند، با Operation not supported شکست میخورند. تأیید دوم، uname -r است که در یک طرح مبتنی بر container اغلب نسخهای از kernel را گزارش میکند که توزیع شما هرگز آن را منتشر نکرده است.