VPS مبتنی بر SSD چیست و چه مزیتی دارد؟
VPS مبتنی بر SSD از حافظه فلش استفاده میکند، نه دیسک چرخان. با IOPS بیشتر و تأخیر کمتر آشنا شوید و پیش از خرید، 3 پرسش مهم را بررسی کنید.
VPS مبتنی بر SSD چیست؟
VPS مبتنی بر SSD یک سرور خصوصی مجازی است که دیسک آن بهجای هارددیسک چرخان، از حافظه فلش استفاده میکند. SSD مخفف solid state drive است؛ نوعی فضای ذخیرهسازی که از تراشههای فلش NAND ساخته شده و هیچ قطعه متحرکی درون آن وجود ندارد. VPS مخفف virtual private server است؛ بخشی ایزوله از یک ماشین میزبان فیزیکی که سیستمعامل خود را اجرا میکند و بهگونهای به شما ارائه میشود که گویی یک سرور کامل است. ترکیب این دو اصطلاح یک ویژگی را وعده میدهد. هنگام خواندن یک بلوک داده توسط سرور، ابتدا نیازی به حرکت هیچ قطعه مکانیکی نیست.
این تمام تعریف است. مطالب زیر به مواردی میپردازند که این عنوان بیان نمیکند، زیرا عبارت «SSD hosting» در صفحه قیمتگذاری، اطلاعات بسیار کمی درباره آرایه ذخیرهسازی پشت آن ارائه میدهد.
اگر هنوز در حال بررسی تفاوت VPS با یک ماشین مجازی معمولی هستید، صفحه تفاوت VPS، VM و VPC گزینه بهتری برای شروع مطالعه است.
چرا میزبانها سرعت ذخیرهسازی را بهجای اندازه ذخیرهسازی اعلام میکنند
در صفحه یک طرح، تعداد هستههای CPU، حافظه، اندازه دیسک و پهنایباند فهرست میشود و سپس یک واژه درباره دیسک اضافه میشود که اصلاً واحد اندازهگیری نیست. میزبانها این کار را انجام میدهند، زیرا ظرفیت ذخیرهسازی از سالها پیش دیگر شاخص مهمی درباره عملکرد ذخیرهسازی نیست. دو عددی که تعیین میکنند یک سرور چه سرعتی دارد، IOPS (عملیات ورودی/خروجی در هر ثانیه) و latency (مدتزمان بازگشت یک عملیات) هستند.
دلیل این تفاوت، ساختار مکانیکی آنهاست. یک hard disk دادهها را روی platterهای چرخان نگه میدارد و آنها را با head متصل به یک بازوی متحرک میخواند. برای دسترسی به blockی در بخش دیگری از platter، بازو باید حرکت کند و سپس دیسک باید بچرخد تا sector موردنظر زیر head قرار بگیرد. در سرعت 7200 دور در دقیقه، میانگین زمان نیمدور حدود 4 ms است و عملیات seek چند میلیثانیه دیگر به آن اضافه میکند. Flash بازو و platter ندارد؛ بنابراین خواندن در آن یک جستوجوی الکتریکی است که در چند ده میکروثانیه بازمیگردد.
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
}
]یک hard disk با سرعت 7200 rpm برای حدود 125 خواندن تصادفی 4k در هر ثانیه رتبهبندی میشود و بازگشت هر خواندن حدود 8 ms طول میکشد. یک درایو NVMe برای نزدیک به 600,000 مورد از همین خواندنها، با زمان حدود 0.08 ms برای هر مورد، رتبهبندی میشود. رتبه درایو SATA SSD بین این دو، نزدیک به 90,000 است. این اعداد را بهعنوان مرتبه بزرگی بخوانید، نه بهعنوان درصد بهبود.
درباره این دادهها دو هشدار وجود دارد. این اعداد مشخصات منتشرشده برای درایوهای کامل از هر کلاس هستند؛ بنابراین ارقام درجشده در برگه مشخصات سازندهاند و روی یک VPS اندازهگیری نشدهاند. همچنین شما هیچوقت یک درایو کامل دریافت نمیکنید: volume شما بخشی از یک device یا بخشی از یک array است که در همان سختافزار، در کنار مشتریان دیگر قرار دارد.
این دو ستون به پرسشهای متفاوتی پاسخ میدهند؛ بنابراین آنها را در کنار هم بخوانید. Latency مدتزمانی است که برای یک عملیات منتظر میمانید. IOPS تعداد عملیاتی است که درایو میتواند همزمان پردازش کند. Flash با استفاده از parallelism به اعداد بالای IOPS میرسد، زیرا chipهای متعدد flash به درخواستهای متعدد بهصورت همزمان پاسخ میدهند و یک صف عمیق آنها را مشغول نگه میدارد. برنامهای با یک thread که یک خواندن را ارسال میکند، منتظر پاسخ آن میماند و سپس خواندن بعدی را ارسال میکند، هرگز بالاترین مقدار آن نمودار را نخواهد دید. چنین برنامهای به ستون latency میرسد.
SSD، NVMe، SATA و PCIe: چهار واژه در چهار لایه متفاوت
خریداران این واژهها را با هم اشتباه میگیرند، زیرا هرکدام بخش متفاوتی از سیستم را توصیف میکند.
- SSD رسانه ذخیرهسازی است. یعنی دادهها روی تراشههای فلش NAND ذخیره میشوند، نه روی صفحات مغناطیسی.
- SATA یک رابط است که در دوران دیسکهای مکانیکی طراحی شد. سرعت آن حداکثر به 6 Gbit/s میرسد که در عمل حدود 550 MB/s توان عملیاتی ایجاد میکند و صف فرمان آن 32 فرمان در حال انتظار را نگه میدارد.
- NVMe (non-volatile memory express) پروتکلی است که بهطور خاص برای فلش نوشته شده است. این پروتکل از صفهای متعدد پشتیبانی میکند که هرکدام هزاران فرمان را نگه میدارند. بنابراین چندین هسته CPU میتوانند همزمان بدون اشتراکگذاری یک صف باریک با درایو ارتباط برقرار کنند.
- PCIe (peripheral component interconnect express) گذرگاهی است که NVMe روی آن اجرا میشود؛ همان نوع مسیرهایی که کارت گرافیک به آن متصل میشود.
بنابراین یک SSD از نوع SATA و یک SSD از نوع NVMe هر دو دادهها را روی فلش ذخیره میکنند. تفاوت آنها در رابطی است که با آن ارتباط برقرار میکنند. یک SSD از نوع SATA همچنان بسیار سریعتر از هر دیسک سختی است، اما صف فرمان 32تایی آن میزان کار موازی قابل ارائه را محدود میکند؛ و کار موازی دقیقاً نقطه قوت فلش است. اینکه کدام گزینه ارزش هزینه بیشتر را دارد، به نوع workload شما بستگی دارد و مقایسه NVMe و SSD SATA این موضوع را بهطور کامل بررسی میکند.
حافظه فلش محلی یا ذخیرهسازی متصل به شبکه؟
دو نوع معماری کاملاً متفاوت با یک نام واحد عرضه میشوند.
ذخیرهسازی محلی یعنی درایوهای فلش در همان میزبان فیزیکی VPS شما قرار دارند. درخواست از طریق PCIe در داخل یک ماشین جابهجا میشود و مستقیماً برمیگردد؛ به همین دلیل تأخیر در محدوده دهها میکروثانیه باقی میماند.
ذخیرهسازی متصل به شبکه یعنی دیسک مجازی شما روی یک کلاستر ذخیرهسازی جداگانه، معمولاً Ceph یا SAN (شبکه ناحیه ذخیرهسازی)، قرار دارد و هر عملیات خواندن و نوشتن برای رسیدن به آن از شبکه عبور میکند. ارائهدهندگان معمولاً به این نوع ذخیرهسازی «فضای بلوکی ابری» یا «حجمهای انعطافپذیر» میگویند. فلش واقعی است. مسیر شبکه نیز واقعی است و به هر عملیات اضافه میشود؛ بنابراین تأخیر به چند صد میکروثانیه بالا یا چند میلیثانیه پایین میرسد، نه دهها میکروثانیه.
هیچکدام ذاتاً انتخاب نادرستی نیستند. ذخیرهسازی شبکهای در برابر از کار افتادن یک میزبان دوام میآورد، چون دادهها هرگز روی آن میزبان نبودهاند. ارائهدهنده میتواند سرور شما را روی سختافزار دیگری راهاندازی کند و دیسک نیز همراه آن منتقل شود. NVMe محلی سریعتر است و به یک ماشین فیزیکی وابسته است؛ بنابراین خرابی سختافزار آن ماشین به بازیابی از نسخه پشتیبان نیاز دارد. بررسی کنید هر پلن از کدام نوع استفاده میکند. تقریباً هیچکس این کار را انجام نمیدهد.
تفاوت در یک سرور واقعی چگونه احساس میشود
کار روی سرور عمدتاً شامل خواندن و نوشتنهای کوچک و تصادفی است، نه انتقالهای طولانی و ترتیبی. به همین دلیل، مقدار MB/s در متن تبلیغاتی کمکاربردترین عدد صفحه است.
- Commitهای پایگاه داده. پایگاه دادهای که دوام داده را تضمین میکند، هنگام commit شدن تراکنش
fsyncرا فراخوانی میکند و سپس منتظر میماند تا درایو تأیید کند داده واقعاً ذخیره شده است. در هارددیسک، این انتظار چند میلیثانیه طول میکشد و همین موضوع یک پایگاه داده کوچک را به چندصد commit در ثانیه محدود میکند. در حافظه فلش، همین انتظار کسری از یک میلیثانیه است. بیشترین تفاوت در همین بخش دیده میشود؛ چه PostgreSQL، MySQL یا SQLite بهعنوان پایگاه داده production را اجرا کنید. - نصب packageها.
apt installهزاران فایل کوچک را باز میکند و همزمان آنها را روی دیسک sync میکند. تقریباً هیچیک از این عملیات ترتیبی نیست، بنابراین عملکرد به IOPS محدود میشود. - دریافت imageهای container.
docker pullلایههای فشرده را از طریق شبکه دریافت میکند و سپس آنها را در قالب هزاران فایل کوچک استخراج میکند. دریافت به شبکه محدود است. استخراج به دیسک محدود است و در یک volume کند، همین بخش استخراج است که باید برای آن منتظر بمانید. - Boot و reboot. فرایند startup ابتدا یک kernel و یک initramfs را میخواند و سپس صدها فایل unit کوچک و shared library را که در بخشهای مختلف volume قرار دارند، میخواند.
هیچیک از این عملیات، خواندن ترتیبیِ حجیم نیست. volumeای که با سرعت 500 MB/s داده را بهصورت پیوسته میخواند اما فقط 3,000 IOPS ارائه میدهد، هنگام اجرای docker compose pull همچنان کند احساس میشود؛ زیرا زمان انتظار برای هر فایل محاسبه میشود، نه برای هر مگابایت.
چرا عبارت «میزبانی ابری SSD» در صفحه قیمتگذاری تقریباً هیچ اطلاعاتی به شما نمیدهد
این عبارت فقط رسانه ذخیرهسازی را توصیف میکند و در همینجا متوقف میشود. مشخص نمیکند درایو از چه رابطی استفاده میکند و همچنین نمیگوید آیا درایو در همان ماشینی قرار دارد که سرور شما روی آن اجرا میشود یا نه. درباره سقفی که پلن شما مجاز است به آن برسد نیز اطلاعاتی نمیدهد.
این سقف بیشترین اهمیت را دارد، اما کمترین میزان تبلیغ را دریافت میکند. ارائهدهندگان برای هر volume، مقدار IOPS و throughput را محدود میکنند، زیرا یک host به مشتریان زیادی سرویس میدهد و یک همسایه بدون محدودیت میتواند منابع سایر مشتریان را مصرف کند. وجود سقفی معادل چند هزار IOPS روی سختافزاری که توانایی صدها هزار IOPS را دارد، معمول و شفاف است، اما در توضیحات پلن دیده نمیشود. ممکن است هر دو پلن عبارت «SSD» را ذکر کنند، در حالی که یکی NVMe محلی و بدون محدودیت برای هر volume باشد و دیگری یک volume اشتراکی در یک cluster باشد که به 3,000 IOPS محدود شده است.
محدودیتها به دو شکل ارائه میشوند. محدودیت پایدار، یک سقف ثابت است که هرگز تغییر نمیکند. محدودیت burst، یک مقدار پایه پایین به همراه اعتبارهایی ارائه میدهد که برای مدتی امکان عبور از آن مقدار را فراهم میکنند؛ این اعتبارها زمانی که volume بیکار است دوباره افزایش مییابند. محدودیت burst در یک آزمایش پنجدقیقهای بسیار مناسب به نظر میرسد، اما هنگام اجرای import پایگاه داده یا restore بزرگ، به مقدار پایه سقوط میکند. اگر ارائهدهنده عدد بزرگی اعلام کرد، بپرسید چه مدت اجازه دارید آن سرعت را حفظ کنید.
چگونه بررسی کنیم VPS شما واقعاً چه منابعی دریافت کرده است
از داخل guest فقط میتوانید اطلاعاتی را ببینید که hypervisor در اختیار آن قرار میدهد.
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotationalvda را با نام دستگاه lsblk که برای دیسک شما چاپ شده است، جایگزین کنید. ROTA و فایل rotational زمانی مقدار 0 را میخوانند که به kernel اعلام شده باشد دستگاه non-rotational است، و زمانی مقدار 1 را میخوانند که خلاف آن اعلام شده باشد. یک virtual disk این flag را بر اساس اطلاعاتی تنظیم میکند که hypervisor اعلام میکند؛ بنابراین این flag دستگاه مجازی را توصیف میکند، نه سختافزار فیزیکی زیر آن را. MODEL معمولاً برای یک دیسک virtio مانند vda خالی است، یا روی یک SATA controller شبیهسازیشده، رشتهای عمومی مانند QEMU HARDDISK دارد. guestها قرار نیست array میزبان را ببینند و آن را نمیبینند.
بنابراین این flag را فقط یک نشانه در نظر بگیرید و سایر موارد را اندازهگیری کنید. با استفاده از fio، یک آزمون تصادفی 4k را روی فایلی در volume اجرا کنید؛ queue depth را برابر مقداری قرار دهید که برنامه شما واقعاً استفاده میکند و آزمون را آنقدر ادامه دهید تا هرگونه burst credit مصرف شود. اندازهگیری صحیح عملکرد VPS شامل commandهای fio و خطاهای رایجی است که اعداد عملکرد را بهتر از واقعیت نشان میدهند.
سه پرسش که باید پیش از خرید از ارائهدهنده بپرسید
- فضای ذخیرهسازی بهصورت محلی به hypervisor متصل است یا از طریق شبکه؟ پاسخ این پرسش حداقل تأخیر شما را تعیین میکند و مشخص میکند هنگام خرابی یک میزبان فیزیکی چه اتفاقی برای دادههای شما میافتد. ارائهدهندهای که پاسخ روشنی میدهد، این موضوع را بررسی کرده است.
- محدودیت IOPS روی volume من چقدر است؟ یک عدد درخواست کنید. «نامحدود» و «درجه سازمانی» عدد نیستند. اگر واقعاً سقفی وجود ندارد، بپرسید چه چیزی مانع میشود همسایهای روی همان میزبان، هنگام اجرای پشتیبانگیری خود، کل آرایه را مصرف کند.
- این محدودیت پایدار است یا burst؟ اگر burst است، مقدار پایه و مدت burst را بپرسید. کار شبانه شما با مقدار پایه اجرا خواهد شد؛ بنابراین برنامهریزی باید بر اساس همین مقدار انجام شود.
آیا حافظهٔ فلش فرسوده میشود و آیا این مسئلهٔ شماست؟
سلولهای فلش تعداد محدودی چرخهٔ نوشتن را میپذیرند. به همین دلیل، درایوها میزان دوام خود را با TBW (ترابایتِ نوشتهشده) یا DWPD (تعداد دفعات نوشتن کامل درایو در روز) اعلام میکنند. درایو عملیات نوشتن را بهطور یکنواخت میان سلولهای خود توزیع میکند. این فرایند wear levelling نام دارد. درایو همچنین تعدادی block اضافی را ذخیره نگه میدارد تا سلولهای خراب را با آنها جایگزین کند. در یک VPS، فرسودگی بر عهدهٔ ارائهدهنده است. ارائهدهنده شمارندههای SMART را در درایوهای خود پایش میکند و پیش از پایان یافتن میزان دوام اعلامشده، سختافزار را تعویض میکند. مشکل شما قدمتی بیشتر از فلش دارد. یک درایو نسخهٔ پشتیبان نیست. افزونگی زیر volume شما نیز نسخهٔ پشتیبان نیست، زیرا حذفشدن داده را همانقدر دقیق کپی میکند که خود داده را کپی میکند.
مبادلهای که واقعاً انجام میدهید، قیمت بهازای هر گیگابایت است. فلش بهازای هر گیگابایت از دیسکهای چرخان گرانتر است. بنابراین، یک طرح SSD معمولاً در همان قیمت، ظرفیت کمتری از یک طرح hard disk ارائه میدهد. اگر برای رسانه یا آرشیو به فضای حجیم نیاز دارید، volume سریع را کوچک نگه دارید و بخش حجیم داده را در محلی ارزانتر قرار دهید. این ساختار برای نگهداری نسخههای پشتیبان خارج از سرور نیز مناسب است. برای بررسی جایگاه storage در بخشهای دیگر هزینه، هزینهٔ واقعی یک VPS اقلام صورتحساب را تفکیک میکند.
FAQ
آیا SSD VPS همان NVMe VPS است؟
هر NVMe VPS یک SSD VPS است، زیرا درایوهای NVMe از حافظه فلش استفاده میکنند. عکس این گزاره درست نیست. طرحی که با عنوان «SSD» ارائه میشود ممکن است از SATA SSD استفاده کند؛ در این حالت، حافظه فلش از طریق رابطی متصل است که برای دیسکهای مکانیکی طراحی شده و دارای صفی با ظرفیت 32 فرمان و سقفی نزدیک به 550 MB/s است. هر دو گزینه بسیار سریعتر از هارد دیسک هستند. اگر تفاوت میان آنها برای workload شما مهم است، بهجای تکیه بر نام طرح، از ارائهدهنده بپرسید که طرح از کدام گزینه استفاده میکند.
آیا SSD VPS وبسایت من را سریعتر میکند؟
SSD فقط عملیات دیسک را سریعتر میکند. صفحهای که برای هر درخواست چندین query پایگاهداده اجرا میکند سریعتر میشود، زیرا این queryها و commitهای آنها I/O تصادفی کوچک هستند. صفحهای که از حافظه یا cache ارائه میشود، هنگام ارسال به دیسک دسترسی ندارد؛ بنابراین تغییر چندانی نمیکند. پیش از پرداخت هزینه برای storage با هدف رفع مشکل، اندازهگیری کنید که کدام بخش درخواست کند است.
چگونه بررسی کنم که VPS من واقعاً از SSD storage استفاده میکند؟
از داخل guest نمیتوانید سختافزار فیزیکی را تأیید کنید. lsblk -d -o NAME,ROTA مشخص میکند دستگاه مجازی چه قابلیتی را اعلام میکند و hypervisor این مقدار را تعیین میکند؛ بنابراین وجود 0 در آنجا فقط یک نشانه است، نه مدرک قطعی. روش عملی، انجام اندازهگیری است: fio را با workload خواندن تصادفی 4k برای چند دقیقه اجرا کنید و latency گزارششده را بررسی کنید. خواندن تصادفی با تأخیر چند میلیثانیهای معمولاً به دیسکهای چرخان یا volume شبکهای پرازدحام اشاره دارد. تأخیر در حد دهها میکروثانیه معمولاً نشاندهنده فلش محلی است.
آیا network attached SSD storage از NVMe محلی ضعیفتر است؟
این storage در هر عملیات کندتر است و نوع خرابی متفاوتی دارد. رفتوبرگشت شبکه به هر خواندن و هر نوشتن اضافه میشود؛ بنابراین با وجود فلش بودن هر دو، latency بیشتر است. در مقابل، دادههای شما روی یک host فیزیکی منفرد قرار ندارند؛ بنابراین خرابی host، volume را نیز از دسترس خارج نمیکند و snapshot و live migration برای ارائهدهنده آسانتر است. برای پایگاهدادهای که به latency حساس است، فلش محلی را انتخاب کنید. زمانی network storage را انتخاب کنید که حفظ volume از چند میکروثانیه latency مهمتر باشد.