تفاوت VPS، VM و VPC چیست؟ راهنمای جامع
تفاوت دقیق VM، VPS و VPC را در این مقاله بخوانید. درک کنید که چرا VM یک فناوری، VPS یک محصول اجارهای و VPC یک شبکه ایزوله در فضای ابری است تا انتخاب درستی داشته باشید.
تفاوت VPS، VM و VPC در یک نگاه
یک VM (ماشین مجازی) کامپیوتری است که از نرمافزار ساخته شده است: یک hypervisor یک سرور فیزیکی را به چندین ماشین مستقل تقسیم میکند و هر کدام هسته (kernel) اختصاصی خود را اجرا میکنند. یک VPS (سرور مجازی خصوصی) یکی از همان ماشینهای مجازی است که بهعنوان یک محصول به شما اجاره داده میشود و شامل سیستمعامل، دسترسی root و هزینه ماهانه است. یک VPC (ابر خصوصی مجازی) اصلاً یک سرور نیست. این یک شبکه خصوصی است که شما در داخل یک حساب ابری تعریف میکنید و منابع خود را درون آن قرار میدهید. VM فناوری است، VPS محصول است و VPC شبکه پیرامون آن محصول است.
دو مورد از این واژهها یک ماشین را توصیف میکنند و سومی یک شبکه را. تقریباً تمام سردرگمیها از همین عدم تطابق ناشی میشود، زیرا افراد آنها را طوری با هم مقایسه میکنند که گویی سه محصول روی یک قفسه هستند.
ماشین مجازی (VM) چیست
هایپروایزر (hypervisor) لایهای است که نقش سختافزار را ایفا میکند. این لایه به هر سیستمعامل مهمان (guest)، یک CPU مجازی، بخشی از حافظه، یک دیسک مجازی و یک کارت شبکه مجازی اختصاص میدهد و سپس مانع از دسترسی سیستمهای مهمان به یکدیگر میشود. KVM، Xen، Hyper-V و VMware ESXi از رایجترین نمونهها در سرورها هستند. هایپروایزرهای مدرن از قابلیتهای مجازیسازی CPU (مانند Intel VT-x و AMD-V) بهره میبرند تا دستورات سیستم مهمان با سرعتی نزدیک به سرعت اصلی روی CPU واقعی اجرا شوند و نیازی به تفسیر (interpretation) نداشته باشند.
آنچه برای یک مدیر سیستم اهمیت دارد، هسته (kernel) است. یک VM هسته اختصاصی خود را بوت میکند؛ بنابراین شما توزیع سیستمعامل را انتخاب میکنید، ماژولهای هسته را بارگذاری میکنید و مقادیر sysctl را فقط برای خودتان تنظیم میکنید. این موضوع با کانتینرها (مانند LXC یا Docker) متفاوت است، زیرا کانتینرها از هسته میزبان استفاده میکنند و فقط دیدگاه مستقلی از پردازشها و فایلها دارند.
شما میتوانید پاسخ این موضوع را در هر سیستم لینوکسی با یک دستور مشاهده کنید.
systemd-detect-virtkvm به این معنی است که شما در یک ماشین مجازی روی هایپروایزر KVM هستید. lxc یا openvz نشان میدهد که شما در یک کانتینر روی هسته شخص دیگری قرار دارید. none به این معناست که سختافزار مستقیماً در اختیار شماست. اگر این دستور موجود نباشد، lscpu | grep -i hypervisor همان اطلاعات را از طریق پرچمهای (flags) CPU نمایش میدهد.
VPS چیست
یک VPS در واقع یک بستهبندی تجاری برای یک VM است. فناوری زیرساختی آن مجازیسازی است و واژه "VPS" ویژگیهایی را به آن اضافه میکند که آن را قابل فروش میسازد: یک image سیستمعامل که میتوانید آن را دوباره نصب کنید، یک آدرس IP، سهمیه پهنای باند، یک پنل کنترل، قیمت ماهانه و شخصی که در صورت از کار افتادن میزبان (host) به او ایمیل بزنید. واژه "Private" (خصوصی) برای متمایز کردن آن از هاستینگ اشتراکی به کار میرود؛ جایی که صدها سایت از یک سیستمعامل و یک پیکربندی PHP مشترک استفاده میکنند.
از آنجا که VPS یک نام تجاری است و نه یک اصطلاح فنی، همیشه به معنای یک VM کامل نیست. برخی طرحهای اقتصادی، containerها را با همین نام میفروشند. تفاوت زمانی آشکار میشود که برای اولین بار به kernel نیاز پیدا کنید. در یک طرح مبتنی بر container، دستور sudo modprobe wireguard با خطای RTNETLINK answers: Operation not supported یا modprobe: FATAL: Module wireguard not found شکست میخورد، زیرا kernel متعلق به میزبان است و شما اجازه تغییر آن را ندارید. در یک طرح KVM، ماژول بارگذاری شده و tunnel برقرار میشود. اگر قصد دارید Docker، یک VPN، kernelهای سفارشی یا ماشینهای مجازی خودتان را داخل سرور اجرا کنید، پیش از خرید نوع مجازیسازی را بررسی کنید. اجرای ماشینهای مجازی داخل یک VPS نیازمند KVM با قابلیت nested virtualisation است که در سمت میزبان فعال شده باشد؛ این قابلیت تنها در تعداد محدودی از طرحها ارائه میشود.
VPC چیست
یک VPC یک شبکه تعریفشده با نرمافزار در داخل زیرساخت یک ارائهدهنده ابری است. شما یک محدوده آدرس با نماد CIDR، مانند 10.0.0.0/16، به آن اختصاص میدهید و سپس زیرشبکههایی از آن ایجاد میکنید، جداول مسیریابی را به آن متصل کرده و قوانین فایروال (گروههای امنیتی) را در مقابل منابع داخلی قرار میدهید. این شبکه فاقد CPU، حافظه و دیسک است. هیچ محیطی برای ورود (Login) به آن وجود ندارد. حذف تمام سرورها در یک VPC، باعث میشود خود VPC همچنان باقی بماند، خالی و معمولاً رایگان.
آنچه یک VPC برای شما فراهم میکند، آدرسدهی خصوصی است. دو سرور در یک VPC یکسان از طریق آدرسهایی مانند 10.0.1.15 در بستر داخلی ارائهدهنده با هم ارتباط برقرار میکنند، بهطوری که ترافیک هرگز به اینترنت عمومی نمیرسد و به عنوان خروجی اینترنت (Egress) محاسبه نمیشود. در این حالت، یک دیتابیس میتواند فقط روی آدرس خصوصی خود گوش دهد و هیچ پورتی به روی دنیای خارج باز نخواهد بود.
ip -4 addr showیک آدرس در محدوده 10.0.0.0/8، 172.16.0.0/12 یا 192.168.0.0/16 خصوصی است. وجود یک آدرس عمومی روی همان سرور به این معناست که آن سرور مستقیماً از طریق اینترنت قابل دسترسی است، فارغ از اینکه در چه شیء شبکهای قرار گرفته باشد.
آیا VPC سرور من را خصوصی میکند؟
خیر، و این گرانترین سوءتفاهم در مورد این سه اصطلاح است. یک VPC مسیریابی و آدرسدهی را کنترل میکند. این ابزار تعیین نمیکند که آیا اینترنت میتواند به یک ماشین دسترسی داشته باشد یا خیر. اگر یک instance دارای IP عمومی باشد و قوانین امنیتی اجازه دسترسی به پورت 22 را از 0.0.0.0/0 بدهند، آن سرور دقیقاً به همان اندازهای که هر سرور دیگری (چه در VPC باشد چه نباشد) در معرض خطر است، در معرض دسترسی قرار دارد. ایزولهسازی که از یک VPC دریافت میکنید، توانایی تخصیص ندادن هیچ آدرس عمومی به یک منبع، به علاوه قوانینی است که مشخص میکند کدام زیرشبکهها (subnets) مجاز به برقراری ارتباط با یکدیگر هستند.
این سه واژه همچنین انواع متفاوتی از ایزولهسازی را وعده میدهند. یک VM پردازش را ایزوله میکند: هایپروایزر (hypervisor) زمان CPU و حافظه را جدا میکند، بنابراین یک guest دیگر نمیتواند RAM شما را بخواند. این ایزولهسازی برای دیسک و شبکه ضعیفتر است، جایی که یک همسایه پرمشغله روی همان میزبان همچنان میتواند سرعت شما را کاهش دهد. یک VPS مبتنی بر کانتینر از یک هسته (kernel) مشترک استفاده میکند، بنابراین یک باگ در سطح هسته یک ریسک مشترک محسوب میشود. یک VPC هیچ چیزی را در مورد پردازش ایزوله نمیکند. این ابزار فقط شبکه را شکل میدهد.
مدل ذهنی قیمتگذاری
یک VPS معمولاً با قیمت ماهانه ثابت برای یک ماشین مشخص فروخته میشود. شما پیش از شروع ماه از مبلغ صورتحساب آگاه هستید و فضای دیسک و سهمیه انتقال داده در آن لحاظ شده است. همین قابلیت پیشبینی، دلیل اصلی انتخاب VPS به جای cloud instance برای بارهای کاری کوچک است.
یک cloud VM به صورت مصرفی (metered) محاسبه میشود. هزینه instance بر اساس ساعت یا ثانیه محاسبه شده و دیسک، اسنپشاتها، load balancer و ترافیک خروجی به صورت جداگانه فاکتور میشوند. خودِ VPC معمولاً رایگان است، اما اجزای مدیریتشدهای که به آن متصل میشوند، خیر: یک NAT gateway که به instanceهای خصوصی اجازه دسترسی به اینترنت میدهد، بر اساس ساعت و گیگابایت محاسبه میشود و ترافیک بین availability zoneها نیز مشمول هزینه است. تا جولای 2026، ارائهدهندگان اصلی ابری همچنان هر instance جدید را بهطور خودکار در یک VPC پیشفرض قرار میدهند، بنابراین چه درخواست کرده باشید و چه نه، در حال استفاده از آن هستید.
واقعاً به کدام یک نیاز دارید
- یک سرور برای وبسایت، اپلیکیشن، سرور بازی یا VPN: یک VPS. ده دقیقه اول روی یک VPS جدید اهمیت بیشتری نسبت به عنوان طرح انتخابی دارد.
- چندین سرور که باید از طریق آدرسهای خصوصی به یکدیگر متصل شوند: یک VPC، یا قابلیت شبکه خصوصی که ارائهدهنده VPS شما با نام دیگری ارائه میدهد.
- باری کاری (workload) که باید در صورت از دسترس خارج شدن کل یک دیتاسنتر همچنان فعال بماند: ابری (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 یک ساختار متعلق به یک ارائهدهنده ابری خاص است و فقط منابعی را در خود جای میدهد که در همان حساب کاربری ایجاد شده باشند. یک VPS از یک ارائهدهنده مستقل، روی شبکه همان ارائهدهنده قرار دارد. اگر به ارتباط خصوصی بین این دو نیاز دارید، باید یک تونل VPN بین آنها ایجاد کنید تا VPS از طریق آن به زیرشبکههای خصوصی دسترسی پیدا کند.
چرا صورتحساب ابری من از یک VPS مشابه بیشتر است؟
قیمت instance تنها بخشی از هزینه است. فضای ذخیرهسازی، اسنپشاتها، ترافیک خروجی، لود بالانسرها و NAT gatewayها در سرویسهای ابریِ مبتنی بر مصرف، ردیفهای هزینهای جداگانهای هستند و هزینه یک NAT gateway به تنهایی میتواند در ماه از یک VPS کوچک بیشتر باشد. یک VPS با قیمت ثابت، هزینه دیسک و سهمیه انتقال داده را در یک عدد واحد ادغام میکند؛ به همین دلیل است که اجرای یک بار کاری مشابه، در آنجا اغلب ارزانتر به نظر میرسد.
چگونه بررسی کنم که آیا سرور من دسترسی واقعی به هسته (kernel) دارد؟
دستور systemd-detect-virt را اجرا کنید و خروجی آن را بخوانید. خروجیهای kvm، xen یا vmware به این معنی است که شما هسته اختصاصی خود را دارید و modprobe کار میکند. خروجیهای lxc، lxc-libvirt یا openvz به این معنی است که شما از هسته میزبان (host kernel) بهصورت اشتراکی استفاده میکنید و دستوراتی که ماژولها را بارگذاری میکنند یا در /proc/sys مینویسند، با خطای Operation not supported مواجه خواهند شد. روش تأیید دوم، استفاده از uname -r است که در طرحهای مبتنی بر کانتینر، اغلب نسخهای از هسته را گزارش میدهد که توزیع سیستمعامل شما هرگز آن را ارائه نکرده است.