SSD VPS چیست و چه تفاوتی با سرورهای معمولی دارد؟
سرور SSD VPS از حافظه فلش بهجای دیسکهای چرخشی استفاده میکند تا سرعت IOPS و تأخیر کمتری ارائه دهد. پیش از خرید، حتماً این 3 نکته فنی درباره نوع آرایه ذخیرهسازی را بررسی کنید.
SSD VPS چیست؟
یک SSD VPS، یک سرور مجازی خصوصی است که فضای ذخیرهسازی آن بهجای دیسکهای سخت چرخشی، بر پایه حافظه فلش است. SSD مخفف solid state drive است: حافظهای که از تراشههای NAND flash ساخته شده و هیچ قطعه متحرکی در داخل آن وجود ندارد. VPS مخفف virtual private server است: یک بخش ایزوله از یک ماشین میزبان فیزیکی که سیستمعامل اختصاصی خود را اجرا میکند و بهگونهای به شما فروخته میشود که گویی یک سرور کامل است. ترکیب این دو، وعده یک عملکرد مشخص را میدهد. هنگامی که سرور شما یک بلوک داده را میخواند، هیچ قطعه مکانیکی نباید حرکت کند.
این تمام تعریف آن است. هر آنچه در ادامه میآید، درباره مواردی است که این عنوان نادیده میگیرد؛ زیرا عبارت "SSD hosting" در یک صفحه قیمتگذاری، اطلاعات بسیار کمی درباره آرایه ذخیرهسازی پشت آن ارائه میدهد.
اگر هنوز در حال بررسی تفاوت VPS با یک ماشین مجازی معمولی هستید، تفاوت بین VPS، VM و VPC صفحه بهتری برای مطالعه در ابتدا است.
چرا میزبانها بهجای حجم ذخیرهسازی، سرعت آن را تبلیغ میکنند
صفحهٔ پلنها شامل تعداد هستههای CPU، حافظه، حجم دیسک و پهنای باند است و سپس یک کلمه دربارهٔ دیسک اضافه میشود که اصلاً به حجم مربوط نیست. میزبانها این کار را انجام میدهند زیرا سالهاست که ظرفیت، دیگر عدد جذاب در مورد ذخیرهسازی نیست. دو عددی که تعیین میکنند یک سرور چه عملکردی دارد، IOPS (عملیات ورودی/خروجی در ثانیه) و latency (مدت زمانی که طول میکشد تا یک عملیات پاسخ داده شود) هستند.
تفاوت مکانیکی، دلیل این موضوع است. یک هارد دیسک دادهها را روی صفحات چرخان نگه میدارد و آنها را با یک هد روی بازوی متحرک میخواند. برای رسیدن به یک بلاک در جایی دیگر از صفحه، بازو باید seek کند و سپس دیسک باید بچرخد تا سکتور مناسب زیر هد قرار گیرد. با سرعت 7200 دور در دقیقه، نیم دور چرخش بهطور میانگین حدود 4 میلیثانیه زمان میبرد و عملیات seek نیز چندین میلیثانیه دیگر اضافه میکند. حافظه فلش بازو و صفحه ندارد، بنابراین یک عملیات خواندن، یک جستجوی الکتریکی است که در دهها میکروثانیه پاسخ میدهد.
The data behind this chart
[
{
"device": "7200 rpm hard disk",
"random_read_iops": "125",
"read_latency_ms": 8
},
{
"device": "SATA SSD",
"random_read_iops": "90,000",
"read_latency_ms": 0.15
},
{
"device": "NVMe SSD",
"random_read_iops": "600,000",
"read_latency_ms": 0.08
}
]یک هارد دیسک 7200 دور در دقیقه برای تقریباً 125 عملیات خواندن تصادفی 4k در ثانیه رتبهبندی میشود و یکی از این خواندنها حدود 8 میلیثانیه طول میکشد تا پاسخ داده شود. یک درایو NVMe نزدیک به 600,000 از همان عملیات خواندن را با حدود 0.08 میلیثانیه برای هر کدام انجام میدهد. درایو SATA SSD که بین آنها قرار دارد، نزدیک به 90,000 رتبهبندی میشود. این اعداد را به عنوان مرتبه بزرگی بخوانید، نه به عنوان درصد بهبود.
دو هشدار دربارهٔ این دادهها وجود دارد. اینها مشخصات منتشرشده برای کل درایوهای هر کلاس هستند، بنابراین ارقام برگه تولیدکننده هستند و چیزی نیستند که روی یک VPS اندازهگیری شده باشند. و شما هرگز یک درایو کامل را دریافت نمیکنید: حجم (volume) شما بخشی از یک دستگاه یا بخشی از یک آرایه است که در کنار سایر مشتریان روی همان سختافزار قرار دارد.
این دو ستون به سوالات متفاوتی پاسخ میدهند، بنابراین آنها را با هم بخوانید. Latency مدت زمانی است که شما برای یک عملیات منتظر میمانید. IOPS تعداد عملیاتی است که درایو میتواند همزمان روی آنها کار کند. فلش به ارقام بالای IOPS خود از طریق موازیسازی دست مییابد، زیرا تراشههای فلش متعدد به درخواستهای زیادی بهطور همزمان پاسخ میدهند در حالی که یک صف عمیق آنها را مشغول نگه میدارد. یک برنامه تکرشتهای که یک عملیات خواندن صادر میکند، منتظر آن میماند و سپس عملیات بعدی را صادر میکند، هرگز به بالای آن نمودار نمیرسد. این برنامه در عوض ستون latency را تجربه میکند.
SSD، NVMe، SATA و PCIe: چهار واژه در چهار لایه متفاوت
خریداران این واژهها را با هم اشتباه میگیرند، زیرا هر کدام بخشی متفاوت از سیستم را توصیف میکنند.
- SSD رسانهٔ ذخیرهسازی است. این یعنی دادهها بهجای صفحات مغناطیسی، روی تراشههای حافظه NAND flash قرار میگیرند.
- SATA یک رابط (interface) است که در دوران دیسکهای مکانیکی طراحی شده است. حداکثر سرعت آن 6 Gbit/s است که حدود 550 MB/s خروجی واقعی ارائه میدهد و صف دستورات آن تنها 32 دستور معلق را نگه میدارد.
- NVMe (مخفف non-volatile memory express) پروتکلی است که بهطور اختصاصی برای حافظههای فلش نوشته شده است. این پروتکل از صفهای متعددی پشتیبانی میکند که هر کدام هزاران دستور را در خود جای میدهند؛ بنابراین چندین هسته CPU میتوانند همزمان و بدون نیاز به اشتراکگذاری یک صف محدود، با درایو ارتباط برقرار کنند.
- PCIe (مخفف peripheral component interconnect express) گذرگاهی (bus) است که NVMe روی آن اجرا میشود؛ همان نوع مسیرهایی که کارت گرافیک به آن متصل میشود.
بنابراین، هم SSD نوع SATA و هم SSD نوع NVMe دادهها را روی فلش ذخیره میکنند. تفاوت آنها در رابطی است که با آن صحبت میکنند. یک SSD نوع SATA همچنان بسیار سریعتر از هر دیسک سخت (HDD) است، اما صف 32 دستوری آن، میزان کار موازی که میتواند انجام دهد را محدود میکند؛ در حالی که کار موازی دقیقاً همان چیزی است که حافظههای فلش در آن عملکرد خوبی دارند. اینکه کدامیک ارزش هزینه کردن دارد، به workload شما بستگی دارد و تصمیمگیری بین NVMe و SATA SSD این موضوع را بهدرستی کالبدشکافی میکند.
ذخیرهسازی محلی (Local) یا متصل به شبکه (Network Attached)؟
دو ساختار کاملاً متفاوت تحت یک عنوان واحد به فروش میرسند.
ذخیرهسازی محلی (Local storage) به این معناست که درایوهای فلش درون همان میزبان فیزیکی VPS شما قرار دارند. درخواست از طریق PCIe در داخل یک ماشین جابهجا شده و مستقیماً بازمیگردد؛ به همین دلیل است که تأخیر (latency) در حد دهها میکروثانیه باقی میماند.
ذخیرهسازی متصل به شبکه (Network attached storage) به این معناست که دیسک مجازی شما روی یک کلاستر ذخیرهسازی جداگانه قرار دارد که اغلب Ceph یا یک SAN (شبکه ذخیرهسازی) است و هر عملیات خواندن و نوشتن برای رسیدن به آن، از شبکه عبور میکند. ارائهدهندگان معمولاً این مورد را "cloud block storage" یا "elastic volumes" مینامند. فلش واقعی است، اما مسیر شبکه نیز واقعی است و به تکتک عملیاتها اضافه میشود؛ بنابراین تأخیر بهجای دهها میکروثانیه، به صدها میکروثانیه یا چند میلیثانیه میرسد.
هیچکدام از این دو گزینه اشتباه نیستند. ذخیرهسازی شبکه از خرابی میزبان جان سالم به در میبرد، زیرا دادهها هرگز روی آن میزبان نبودهاند: ارائهدهنده میتواند سرور شما را روی سختافزار دیگری بالا بیاورد و دیسک به دنبال آن منتقل میشود. NVMe محلی سریعتر است و به یک ماشین فیزیکی خاص وابسته است، بنابراین خرابی سختافزاری در آنجا به معنای نیاز به بازیابی از نسخه پشتیبان است. بپرسید که هر طرح از کدام نوع استفاده میکند. تقریباً هیچکس این کار را انجام نمیدهد.
تفاوت عملکرد در یک سرور واقعی
بخش عمده فعالیت سرور شامل خواندن و نوشتنهای تصادفی و کوچک است، نه انتقالهای طولانی و متوالی. به همین دلیل، عدد MB/s در بروشورهای تبلیغاتی، بیفایدهترین عدد در آن صفحه است.
- تراکنشهای دیتابیس (Database commits). دیتابیسی که پایداری دادهها را تضمین میکند، هنگام ثبت یک تراکنش، دستور
fsyncرا فراخوانی کرده و منتظر میماند تا درایو تأیید کند که داده واقعاً ذخیره شده است. در یک هارد دیسک، این انتظار چند میلیثانیه طول میکشد که باعث میشود یک دیتابیس کوچک به نرخ چند صد تراکنش در ثانیه محدود شود. در حافظههای فلش، همین انتظار کسری از میلیثانیه است. اینجاست که شکاف عملکرد بیشترین نمود را دارد، چه از PostgreSQL استفاده کنید، چه MySQL یا SQLite به عنوان دیتابیس عملیاتی. - نصب پکیجها. ابزار
apt installهزاران فایل کوچک را استخراج کرده و همزمان آنها را روی دیسک همگامسازی (sync) میکند. تقریباً هیچکدام از این عملیات متوالی نیستند، بنابراین سرعت کار توسط IOPS محدود میشود. - دریافت ایمیجهای کانتینر. ابزار
docker pullلایههای فشرده را از طریق شبکه دریافت کرده و سپس آنها را به هزاران فایل کوچک استخراج میکند. دانلود فایلها محدود به شبکه است، اما استخراج آنها محدود به دیسک است؛ در یک درایو کند، بخشی که باید برای آن منتظر بمانید، همین مرحله است. - بوت و ریبوت. فرآیند راهاندازی، هسته (kernel) و initramfs را میخواند و سپس صدها فایل unit کوچک و کتابخانههای اشتراکی را که در سراسر درایو پراکندهاند، بارگذاری میکند.
هیچکدام از این موارد، خواندن متوالیِ حجیم نیستند. درایوی که میتواند با سرعت 500 MB/s داده منتقل کند اما تنها 3,000 IOPS ارائه میدهد، همچنان در حین docker compose pull کند به نظر میرسد؛ زیرا زمان انتظار بر اساس هر فایل محاسبه میشود، نه بر اساس هر مگابایت.
چرا عبارت "SSD cloud hosting" در صفحات قیمتگذاری تقریباً هیچ اطلاعات مفیدی نمیدهد
این عبارت فقط نوع رسانه ذخیرهسازی را توصیف میکند و فراتر از آن نمیرود. این اصطلاح هیچ چیزی درباره رابط (interface) درایو نمیگوید و مشخص نمیکند که آیا آن درایو در همان ماشینی قرار دارد که سرور شما روی آن است یا خیر. همچنین، هیچ اطلاعاتی درباره سقف عملکردی که پلن شما مجاز به رسیدن به آن است، ارائه نمیدهد.
آن سقف عملکردی بیشترین اهمیت را دارد و کمترین تبلیغ برای آن انجام میشود. ارائهدهندگان خدمات، میزان IOPS و پهنای باند (throughput) هر volume را محدود میکنند، زیرا یک میزبان (host) به مشتریان زیادی سرویس میدهد و یک همسایه بدون محدودیت میتواند منابع بقیه را ببلعد. محدود کردن به چند هزار IOPS روی سختافزاری که توانایی ارائه صدها هزار IOPS را دارد، امری عادی و صادقانه است، اما در توضیحات پلن دیده نمیشود. دو پلن میتوانند هر دو برچسب "SSD" داشته باشند، در حالی که یکی از آنها NVMe محلی بدون محدودیت در هر volume است و دیگری یک volume کلاستری اشتراکی با محدودیت 3,000 IOPS.
محدودیتها به دو شکل اعمال میشوند. محدودیت پایدار (sustained cap) یک سقف ثابت است که هرگز تغییر نمیکند. محدودیت انفجاری (burst cap) یک سطح پایه پایین به همراه اعتبار (credit) به شما میدهد که اجازه میدهد برای مدتی از آن فراتر بروید؛ این اعتبارها زمانی که volume در حالت بیکار است، دوباره پر میشوند. محدودیت انفجاری در یک تست 5 دقیقهای عالی به نظر میرسد، اما در میانه یک import دیتابیس یا یک restore بزرگ، به سطح پایه سقوط میکند. اگر ارائهدهندهای عدد بزرگی را اعلام کرد، بپرسید که چه مدت مجاز به حفظ آن سطح از عملکرد هستید.
چگونه بررسی کنید که VPS شما واقعاً چه منابعی ارائه میدهد
از داخل سیستمعامل مهمان (guest)، شما فقط میتوانید آنچه را که هایپروایزر به شما نشان میدهد، مشاهده کنید.
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotationalعبارت vda را با نام دستگاه lsblk که برای دیسک شما چاپ شده است، جایگزین کنید. فایلهای ROTA و rotational زمانی مقدار 0 را نشان میدهند که به هسته (kernel) اعلام شده باشد دستگاه غیرچرخشی (non-rotational) است، و زمانی مقدار 1 را نشان میدهند که عکس آن اعلام شده باشد. یک دیسک مجازی این پرچم (flag) را بر اساس آنچه هایپروایزر تبلیغ میکند تنظیم میکند؛ بنابراین این مقدار، دستگاه مجازی را توصیف میکند و نه سختافزار فیزیکی زیرین آن را. مقدار MODEL معمولاً برای دیسکهای virtio مانند vda خالی است، یا یک رشته عمومی مانند QEMU HARDDISK را روی کنترلرهای SATA شبیهسازیشده نشان میدهد. سیستمهای مهمان قرار نیست آرایه (array) میزبان را ببینند و در واقعیت هم نمیبینند.
بنابراین، این پرچم را صرفاً به عنوان یک راهنما در نظر بگیرید و بقیه موارد را اندازهگیری کنید. یک تست تصادفی 4k با استفاده از fio روی فایلی در آن حجم (volume) اجرا کنید؛ این کار را با عمق صف (queue depth) واقعی که برنامه شما استفاده میکند انجام دهید و آن را به اندازهای طولانی اجرا کنید که هرگونه اعتبار burst مصرف شود. مطلب بنچمارک صحیح VPS شامل دستورات fio و اشتباهات رایجی است که منجر به تولید اعداد غیرواقعی و اغراقآمیز میشوند.
سه پرسشی که باید پیش از خرید از ارائهدهنده بپرسید
- آیا فضای ذخیرهسازی محلی (local) است یا به شبکه متصل (network attached) است؟ پاسخ این پرسش، حداقل تأخیر (latency) شما را تعیین میکند و مشخص میسازد در صورت خرابی یک میزبان فیزیکی، چه بلایی سر دادههای شما میآید. ارائهدهندهای که صریح به این پرسش پاسخ میدهد، قبلاً در مورد آن فکر کرده است.
- محدودیت IOPS برای volume من چقدر است؟ یک عدد مشخص بخواهید. عباراتی مانند «نامحدود» یا «در سطح سازمانی» عدد نیستند. اگر واقعاً هیچ محدودیتی وجود ندارد، بپرسید چه چیزی مانع از آن میشود که یک همسایه روی همان میزبان، در طول بازه زمانی پشتیبانگیری خود، تمام ظرفیت آرایه را اشغال کند.
- آیا این محدودیت پایدار است یا لحظهای (burst)؟ اگر محدودیت لحظهای است، مقدار پایه (baseline) و مدتزمان آن را بپرسید. مقدار پایه، همان عددی است که عملیاتهای شبانه شما با آن سر و کار دارند؛ بنابراین برنامهریزی خود را باید بر اساس آن انجام دهید.
آیا حافظه فلش مستهلک میشود و آیا این مشکل شماست؟
سلولهای حافظه فلش تعداد محدودی چرخه نوشتن را میپذیرند، بنابراین درایوها نرخ استقامت خود را بر اساس TBW (ترابایت نوشتهشده) یا DWPD (تعداد دفعات نوشتن کل ظرفیت درایو در روز) اعلام میکنند. درایو، عملیات نوشتن را بهطور یکنواخت در تمام سلولها پخش میکند که به آن wear levelling میگویند و بلوکهای یدکی را برای جایگزینی سلولهای معیوب رزرو نگه میدارد. در یک VPS، استهلاک بر عهده ارائهدهنده است: آنها شمارندههای SMART درایوهای خود را پایش میکنند و پیش از پایان یافتن نرخ استقامت، سختافزار را تعویض میکنند. مشکل شما قدیمیتر از حافظه فلش است. یک درایو به معنای نسخه پشتیبان (backup) نیست و افزونگی (redundancy) در زیر حجم ذخیرهسازی شما نیز نسخه پشتیبان محسوب نمیشود، زیرا همانطور که دادهها را کپی میکند، حذف آنها را نیز با دقت انجام میدهد.
معاملهای که در واقع انجام میدهید، قیمت به ازای هر گیگابایت است. قیمت حافظه فلش به ازای هر گیگابایت از دیسکهای چرخان بیشتر است، بنابراین یک پلن SSD معمولاً ظرفیت کمتری نسبت به یک پلن هارد دیسک با همان قیمت ارائه میدهد. اگر به فضای حجیم برای رسانه یا آرشیو نیاز دارید، حجم سریع را کوچک نگه دارید و فضای حجیم را در جای ارزانتری قرار دهید؛ این کار همچنین روش مناسبی برای نگهداری نسخههای پشتیبان خارج از سرور است. برای اطلاع از نحوه قرارگیری فضای ذخیرهسازی در سایر هزینهها، مطلب هزینه واقعی یک VPS اقلام مختلف صورتحساب را بررسی میکند.
FAQ
آیا SSD VPS با NVMe VPS یکی است؟
هر NVMe VPS یک SSD VPS محسوب میشود، زیرا درایوهای NVMe از نوع فلش هستند. عکس این موضوع صادق نیست. طرحی که با عنوان "SSD" تبلیغ میشود ممکن است از نوع SATA SSD باشد؛ این درایوها از حافظه فلش استفاده میکنند اما پشت رابطی قرار دارند که برای دیسکهای مکانیکی طراحی شده است، دارای صف دستور 32 تایی هستند و سقف سرعت آنها حدود 550 MB/s است. هر دو نوع بسیار سریعتر از دیسکهای سخت (HDD) هستند. اگر تفاوت بین این دو برای بار کاری شما اهمیت دارد، بهجای تکیه بر نام طرح، از ارائهدهنده بپرسید که از کدام نوع استفاده میکند.
آیا SSD VPS وبسایت من را سریعتر میکند؟
این حافظه فقط عملیات دیسک را سریعتر میکند. صفحهای که در هر درخواست چندین کوئری دیتابیس اجرا میکند سریعتر میشود، زیرا آن کوئریها و commitهای مربوط به آنها، عملیات I/O تصادفی و کوچک هستند. صفحهای که از حافظه RAM یا کش سرو میشود، در مسیر خروجی هرگز با دیسک درگیر نمیشود، بنابراین تغییر چندانی نخواهد کرد. پیش از هزینه کردن برای ارتقای حافظه، ابتدا اندازهگیری کنید که کدام بخش از درخواست شما کند است.
چگونه میتوانم بررسی کنم که VPS من واقعاً از حافظه SSD استفاده میکند؟
از داخل سیستمعامل مهمان (guest) نمیتوانید سختافزار فیزیکی را تأیید کنید. lsblk -d -o NAME,ROTA نشان میدهد که دستگاه مجازی چه چیزی را گزارش میدهد، اما این مقدار توسط هایپروایزر تعیین میشود، بنابراین مشاهده 0 در آنجا بیشتر یک نشانه است تا مدرک. بررسی عملی از طریق اندازهگیری انجام میشود: fio را با یک بار کاری خواندن تصادفی 4k برای چند دقیقه اجرا کنید و به تأخیر (latency) گزارششده نگاه کنید. تأخیر تکرقمی میلیثانیه برای خواندن تصادفی، نشاندهنده دیسکهای چرخشی یا یک volume شبکه شلوغ است. تأخیر در حد دهها میکروثانیه نشاندهنده حافظه فلش محلی است.
آیا حافظه SSD متصل به شبکه از NVMe محلی بدتر است؟
این حافظه در هر عملیات کندتر است و نحوه خرابی متفاوتی دارد. زمان رفتوبرگشت شبکه به هر عملیات خواندن و نوشتن اضافه میشود، بنابراین با وجود اینکه هر دو از نوع فلش هستند، تأخیر بالاتر است. در مقابل، دادههای شما روی یک میزبان فیزیکی واحد قرار ندارند، بنابراین خرابی میزبان باعث از دست رفتن volume نمیشود و تهیه snapshot و مهاجرت زنده (live migration) برای ارائهدهنده آسانتر است. برای دیتابیسهایی که به تأخیر حساس هستند، حافظه فلش محلی را انتخاب کنید. زمانی که بقای volume اهمیت بیشتری نسبت به میکروثانیهها دارد، حافظه شبکه را انتخاب کنید.