ما هو VPS بتخزين SSD؟ شرح التخزين الفلاش
تعرّف إلى VPS بتخزين SSD والفرق بينه وبين الأقراص الدوّارة، وافهم كيف تؤثر IOPS وزمن الاستجابة في الأداء، وما الأسئلة الثلاثة التي تطرحها قبل الشراء.
ما هو VPS مزوّد بتخزين SSD؟
VPS مزوّد بتخزين SSD هو خادم خاص افتراضي يعتمد قرصه على ذاكرة فلاش بدلاً من قرص صلب دوّار. SSD اختصار لـ solid state drive، أي وحدة تخزين مبنية من شرائح NAND flash ولا تحتوي على أجزاء متحركة. أما VPS فهو اختصار لـ virtual private server، أي جزء معزول من خادم فعلي يشغّل نظام تشغيله الخاص ويُباع لك كما لو كان خادماً كاملاً. جمع المصطلحين يعني وعداً واحداً: عندما يقرأ خادمك كتلة من البيانات، لا يحتاج أي مكوّن ميكانيكي إلى الحركة أولاً.
هذا هو التعريف الكامل. أما كل ما يلي فيتناول ما لا توضحه التسمية، لأن عبارة "استضافة SSD" في صفحة الأسعار لا تكشف إلا القليل عن مصفوفة التخزين التي تقف وراءها.
إذا كنت لا تزال تحاول فهم الفرق بين VPS والآلة الافتراضية العادية، فصفحة الفرق بين VPS وVM وVPC هي الأنسب لقراءتها أولاً.
لماذا يعلن مزوّدو الاستضافة عن سرعة التخزين بدلاً من سعته
تعرض صفحة الخطة عدد أنوية CPU والذاكرة وحجم القرص وعرض النطاق الترددي، ثم تضيف كلمة واحدة عن القرص لا تتعلق بالحجم إطلاقاً. يفعل مزوّدو الاستضافة ذلك لأن السعة لم تعد الرقم الأهم في التخزين منذ سنوات. الرقمان اللذان يحددان سرعة استجابة الخادم هما IOPS، أي عمليات الإدخال والإخراج في الثانية، وزمن الاستجابة، أي المدة التي تستغرقها عملية واحدة حتى تعود نتيجتها.
السبب هو الاختلاف الميكانيكي. يحتفظ القرص الصلب بالبيانات على أطباق دوارة، ويقرأها باستخدام رأس مثبت على ذراع متحركة. للوصول إلى كتلة موجودة في موضع آخر من الطبق، يجب أن يتحرك الذراع إلى ذلك الموضع، ثم يجب أن يدور القرص حتى يصل القطاع الصحيح أسفل الرأس. عند سرعة 7200 دورة في الدقيقة، يستغرق نصف دوران في المتوسط نحو 4 ms، ويضيف البحث عدة ميلي ثوانٍ أخرى. لا يحتوي Flash على ذراع أو طبق، لذلك تكون القراءة عملية بحث كهربائية تعود نتيجتها خلال عشرات الميكروثواني.
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 rpm نحو 125 قراءة عشوائية بحجم 4k في الثانية، وتستغرق إحدى هذه القراءات نحو 8 ms حتى تعود نتيجتها. ويبلغ المعدل الاسمي لمحرك NVMe نحو 600,000 من القراءات نفسها، بزمن يقارب 0.08 ms لكل قراءة. أما SATA SSD الواقع بينهما، فيبلغ معدله الاسمي نحو 90,000. اقرأ هذه القيم باعتبارها فروقاً في الرتبة، لا كنسبة تحسن مئوية.
هناك تحذيران بشأن هذه البيانات. هذه مواصفات منشورة لأقراص كاملة من كل فئة، ولذلك فهي أرقام واردة في نشرات الشركات المصنّعة وليست نتائج قياس على VPS. كما أنك لا تحصل على قرص كامل أبداً: فـvolume الخاص بك يمثل حصة من جهاز واحد أو من array، ويعمل بجانب volumes لعملاء آخرين على العتاد نفسه.
يجيب العمودان أيضاً عن سؤالين مختلفين، لذلك اقرأهما معاً. يوضح زمن الاستجابة مدة انتظارك لعملية واحدة. ويوضح IOPS عدد العمليات التي يستطيع القرص معالجتها في الوقت نفسه. يصل Flash إلى قيم IOPS المرتفعة من خلال التوازي، لأن العديد من شرائح Flash تستجيب لطلبات كثيرة في الوقت نفسه، بينما تحافظ queue عميقة على انشغالها. ولن يرى برنامج يعمل بخيط واحد ويصدر قراءة واحدة ثم ينتظر نتيجتها قبل إصدار القراءة التالية أعلى قيمة في ذلك المخطط أبداً. بل سيرى عمود زمن الاستجابة بدلاً من ذلك.
SSD وNVMe وSATA وPCIe: أربعة مصطلحات في أربع طبقات مختلفة
يخلط المشترون بين هذه المصطلحات لأن كل واحد منها يصف جزءاً مختلفاً من النظام.
- SSD هو وسيط التخزين. ويعني أن البيانات تُخزَّن على شرائح NAND flash بدلاً من الأقراص المغناطيسية.
- SATA هو واجهة صُمِّمت في عصر الأقراص الميكانيكية. وتصل سرعتها القصوى إلى 6 Gbit/s، أي نحو 550 MB/s من معدل النقل الفعلي، كما يحتوي طابور أوامرها على 32 أمراً قيد التنفيذ.
- NVMe (non-volatile memory express) هو بروتوكول صُمِّم خصيصاً لذاكرة flash. وهو يدعم طوابير متعددة، يحتوي كل منها على آلاف الأوامر، لذلك يمكن لعدة أنوية CPU التواصل مع محرك الأقراص في الوقت نفسه دون مشاركة طابور واحد ضيق.
- PCIe (peripheral component interconnect express) هو الناقل الذي يعمل NVMe عبره، وهو من النوع نفسه الذي تُوصَل به بطاقة الرسومات.
لذلك يخزّن كل من SATA SSD وNVMe SSD البيانات على flash. ويختلفان في الواجهة التي يستخدمها كل منهما. يظل SATA SSD أسرع بكثير من أي قرص صلب، لكن طابور الأوامر ذي السعة 32 يحد مقدار العمل المتوازي الذي يمكنه تنفيذه، والعمل المتوازي هو تحديداً ما تتفوق فيه flash. يعتمد الخيار الذي يستحق الدفع مقابله على حمل العمل لديك، وتفصّل المفاضلة بين NVMe وSATA SSD هذه المسألة بصورة صحيحة.
التخزين المحلي أم التخزين المتصل عبر الشبكة؟
يُباع ترتيبان مختلفان جداً تحت الاسم نفسه.
التخزين المحلي يعني أن محركات أقراص الفلاش موجودة داخل المضيف الفعلي نفسه الذي يستضيف VPS. ينتقل الطلب عبر PCIe داخل جهاز واحد ويعود مباشرة، ولذلك تبقى زمنية الاستجابة في نطاق عشرات الميكروثواني.
التخزين المتصل عبر الشبكة يعني أن القرص الافتراضي موجود في مجموعة تخزين منفصلة، غالباً باستخدام Ceph أو SAN (شبكة منطقة التخزين)، وأن كل عملية قراءة وكتابة تعبر الشبكة للوصول إليه. يطلق المزوّدون عليه عادةً اسم "التخزين الكتلي السحابي" أو "الأحجام المرنة". الفلاش حقيقي، وكذلك رحلة البيانات عبر الشبكة. وتُضاف هذه الرحلة إلى كل عملية، لذلك تصل زمنية الاستجابة إلى مئات الميكروثواني المرتفعة أو إلى بضعة أجزاء من الألف من الثانية، بدلاً من عشرات الميكروثواني.
لا يُعد أيٌّ منهما الخيار الخاطئ. يواصل التخزين الشبكي العمل عند تعطل مضيف، لأن البيانات لم تكن موجودة على ذلك المضيف أصلاً؛ إذ يستطيع المزوّد تشغيل خادمك على عتاد آخر، وينتقل القرص معه. أما NVMe المحلي فهو أسرع ومرتبط بجهاز فعلي واحد، ولذلك يعني تعطل العتاد استعادة البيانات من نسخة احتياطية. اسأل عن نوع التخزين الذي تستخدمه الخطة. لا يكاد أحد يفعل ذلك.
كيف يبدو الفرق على خادم فعلي
تتكوّن أعمال الخادم غالباً من عمليات قراءة وكتابة عشوائية صغيرة، لا من عمليات نقل تسلسلية طويلة. لذلك فإن قيمة MB/s الواردة في النص التسويقي هي أقل رقم فائدة في الصفحة.
- تنفيذ معاملات قاعدة البيانات. تستدعي قاعدة البيانات التي تضمن المتانة
fsyncعند تنفيذ المعاملة، ثم تنتظر حتى يؤكد محرك الأقراص تخزين البيانات فعلياً. على القرص الصلب، يستغرق هذا الانتظار عدة ميلي ثوانٍ، ما يحدّ قاعدة البيانات الصغيرة إلى بضع مئات منخفضة من عمليات التنفيذ في الثانية. أما في وحدات التخزين الوميضية، فيستغرق الانتظار نفسه جزءاً من الميلي ثانية. هنا يكون الفرق أكبر ما يمكن، سواء كنت تستخدم PostgreSQL أو MySQL أو SQLite كقاعدة بيانات إنتاجية. - تثبيت الحزم. يفك
apt installضغط آلاف الملفات الصغيرة ويزامنها مع القرص أثناء ذلك. لا يكاد أي جزء من هذه العملية يكون تسلسلياً، لذلك تحددها قيمة IOPS. - سحب صور الحاويات. يجلب
docker pullطبقات مضغوطة عبر الشبكة، ثم يستخرجها إلى آلاف الملفات الصغيرة. يكون التنزيل مقيداً بالشبكة. أما الاستخراج فيكون مقيداً بالقرص، وفي وحدة تخزين بطيئة يكون الاستخراج هو الجزء الذي تنتظر اكتماله. - الإقلاع وإعادة التشغيل. يقرأ النظام عند بدء التشغيل نواة وinitramfs، ثم مئات ملفات الوحدات والمكتبات المشتركة الموزعة على وحدة التخزين.
لا تتضمن أي من هذه العمليات قراءة تسلسلية كبيرة. قد توفر وحدة تخزين سرعة تدفق تبلغ 500 MB/s، لكنها ستظل تبدو بطيئة أثناء docker compose pull إذا كانت لا تنفذ سوى 3,000 IOPS، لأن زمن الانتظار يُحتسب لكل ملف، لا لكل ميغابايت.
لماذا لا تخبرك عبارة "استضافة سحابية على SSD" في صفحة الأسعار بأي شيء تقريباً
تصف هذه العبارة وسيط التخزين فقط. ولا تذكر شيئاً عن الواجهة التي يستخدمها القرص، ولا عمّا إذا كان القرص موجوداً في الجهاز نفسه الذي يستضيف خادمك. كما لا تذكر الحد الأقصى الذي تسمح خطتك ببلوغه.
هذا الحد هو العامل الأهم، لكنه الأقل ظهوراً في الإعلانات. يضع مزودو الخدمة حداً لعدد عمليات الإدخال والإخراج في الثانية IOPS ولمعدل النقل لكل وحدة تخزين، لأن مضيفاً واحداً يخدم عملاء كثيرين، ولأن جاراً غير مقيّد قد يستنفد الموارد المتاحة للآخرين. يُعد وجود حد يبلغ بضعة آلاف من IOPS على عتاد قادر على تنفيذ مئات الآلاف أمراً طبيعياً وصريحاً، لكنه لا يظهر في وصف الخطة. قد تصف خطتان كلتاهما التخزين بأنه "SSD"، بينما تستخدم إحداهما NVMe محلياً بلا حد لكل وحدة تخزين، وتستخدم الأخرى وحدة تخزين مشتركة في عنقود، محدودة بـ3,000 IOPS.
تأتي الحدود بنوعين. الحد المستمر هو سقف ثابت لا يتغير. أما حد الاندفاع فيمنحك معدلاً أساسياً منخفضاً، إضافة إلى أرصدة تتيح لك تجاوزه لفترة من الوقت، ثم تُعاد تعبئة هذه الأرصدة عندما تكون وحدة التخزين خاملة. قد يبدو حد الاندفاع ممتازاً في اختبار مدته خمس دقائق، ثم ينخفض إلى المعدل الأساسي أثناء استيراد قاعدة بيانات أو استعادة نسخة احتياطية كبيرة. إذا ذكر مزود الخدمة رقماً كبيراً، فاسأله عن المدة التي يُسمح لك بالحفاظ فيها على ذلك المعدل.
كيفية التحقق مما خصّصه VPS لك فعلياً
من داخل guest، لا يمكنك رؤية سوى المعلومات التي يقدّمها hypervisor.
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotationalاستبدل vda باسم الجهاز lsblk الذي طُبع للقرص. تكون قيمة rotational في الملف ROTA هي 0 عندما تكون النواة قد أُبلغت بأن الجهاز غير دوّار، وتكون 1 عندما تكون قد أُبلغت بالعكس. يضبط القرص الافتراضي هذه العلامة وفق ما يعلنه hypervisor، لذلك فهي تصف الجهاز الافتراضي، لا العتاد الفعلي الموجود تحته. تكون قيمة MODEL فارغة عادةً لقرص virtio مثل vda، أو تكون سلسلة عامة مثل QEMU HARDDISK على وحدة تحكم SATA محاكاة. لا يُفترض أن ترى guest مصفوفة التخزين لدى المضيف، وهو لا يراها.
لذلك، تعامل مع هذه العلامة باعتبارها مؤشراً، وقِس بقية الخصائص. شغّل اختباراً عشوائياً بحجم 4k باستخدام fio على ملف موجود في وحدة التخزين، وبعمق طابور يطابق ما يستخدمه تطبيقك فعلياً، وشغّله مدة تكفي لاستهلاك أي رصيد للأداء الدفعي. يتضمن إجراء قياس أداء VPS بطريقة صحيحة أوامر fio والأخطاء الشائعة التي تنتج أرقاماً أفضل من الواقع.
ثلاثة أسئلة يجب طرحها على المزوّد قبل الشراء
- هل التخزين محلي على hypervisor أم متصل عبر الشبكة؟ تحدد الإجابة الحد الأدنى لزمن الاستجابة لديك، كما تحدد ما يحدث لبياناتك عند تعطل مضيف فعلي. المزوّد الذي يجيب عن ذلك بوضوح يكون قد فكّر في الأمر.
- ما حد IOPS على volume الخاص بي؟ اطلب رقماً. «غير محدود» و«بمستوى المؤسسات» ليسا رقماً. إذا لم يكن هناك حد فعلاً، فاسأل ما الذي يمنع جاراً على المضيف نفسه من استهلاك المصفوفة كاملة أثناء فترة النسخ الاحتياطي لديه.
- هل هذا الحد مستمر أم burst؟ إذا كان burst، فاسأل عن baseline ومدته. هذا هو الرقم الذي سيعمل ضمنه job الليلي لديك، ولذلك يجب أن تبني خطتك عليه.
هل تتلف ذاكرة Flash بمرور الوقت، وهل هذه مشكلتك؟
تقبل خلايا Flash عدداً محدوداً من دورات الكتابة، لذلك تنشر محركات الأقراص تصنيفاً للتحمل بوحدة TBW (التيرابايت المكتوبة) أو DWPD (عدد مرات كتابة محرك الأقراص يومياً). يوزّع محرك الأقراص عمليات الكتابة بالتساوي على خلاياه، وتُسمّى هذه العملية موازنة التآكل، كما يحتفظ بكتل احتياطية لاستبدال الخلايا التي تتعطل. في VPS، يكون التآكل من مسؤولية المزوّد؛ فهو يراقب عدادات SMART في محركاته الخاصة ويستبدل الأجهزة قبل انتهاء تصنيف التحمل. أما مشكلتك فهي أقدم من Flash. محرك الأقراص ليس نسخة احتياطية، كما أن التكرار أسفل وحدة التخزين ليس نسخة احتياطية أيضاً، لأنه ينسخ الحذف بالقدر نفسه من الدقة التي ينسخ بها البيانات.
المقايضة الفعلية التي تجريها هي سعر الجيجابايت. تبلغ تكلفة Flash لكل جيجابايت أكثر من الأقراص الدوارة، لذلك توفر خطة SSD عادةً سعة أقل من خطة محرك الأقراص الصلبة بالسعر نفسه. إذا كنت تحتاج إلى مساحة كبيرة للوسائط أو الأرشيفات، فأبقِ وحدة التخزين السريعة صغيرة، وضع المساحة الأكبر في مكان أقل تكلفة. وهذا هو التصميم المناسب أيضاً للاحتفاظ بالنسخ الاحتياطية خارج الخادم. لمعرفة كيفية احتساب التخزين ضمن بقية الفاتورة، يوضّح ما الذي يكلّفه VPS فعلياً بنود التكلفة بالتفصيل.
FAQ
هل VPS مزود بقرص SSD هو نفسه VPS مزود بقرص NVMe؟
كل VPS مزود بقرص NVMe هو VPS مزود بقرص SSD، لأن أقراص NVMe تعتمد على ذاكرة فلاش. لكن العكس غير صحيح. قد تكون الخطة المعلَن عنها باسم "SSD" تستخدم قرص SATA SSD، وهو قرص فلاش يعمل عبر واجهة صُممت للأقراص الميكانيكية، مع طابور أوامر يتسع لـ32 أمراً وسرعة قصوى تقترب من 550 MB/s. كلاهما أسرع بكثير من القرص الصلب. إذا كان الفرق بينهما مهماً لحِمل العمل لديك، فاسأل مزود الخدمة عن نوع القرص المستخدم في الخطة بدلاً من استنتاجه من اسم الخطة.
هل يجعل VPS المزود بقرص SSD موقعي أسرع؟
يجعل عمليات القرص أسرع، وعمليات القرص فقط. تصبح الصفحة التي تنفذ عدة استعلامات لقاعدة البيانات في كل طلب أسرع، لأن هذه الاستعلامات وعمليات تثبيتها هي عمليات إدخال وإخراج عشوائية صغيرة. أما الصفحة التي تُخدَم من الذاكرة أو من ذاكرة التخزين المؤقت فلا تصل إلى القرص أثناء إرسالها، لذلك لن يتغير أداؤها كثيراً. قِس الجزء البطيء من الطلب قبل أن تدفع مقابل مساحة تخزين لمعالجة المشكلة.
كيف أتحقق من أن VPS لدي يستخدم فعلاً مساحة تخزين SSD؟
لا يمكنك التحقق من العتاد الفعلي من داخل الضيف. يعرض lsblk -d -o NAME,ROTA ما يعلنه الجهاز الافتراضي، ويحدد الـhypervisor هذه القيمة، لذلك فإن ظهور 0 هناك يُعد مؤشراً لا دليلاً. الفحص العملي هو إجراء قياس: شغّل fio مع حمل عمل لقراءات عشوائية بحجم 4k لعدة دقائق، ثم راجع زمن الاستجابة الذي يعرضه. تشير القراءات العشوائية بزمن استجابة من خانة واحدة بالميلي ثانية إلى أقراص دوارة أو إلى وحدة تخزين شبكية مزدحمة. أما الأزمنة التي تبلغ عشرات الميكروثواني فتشير إلى فلاش محلي.
هل مساحة تخزين SSD المتصلة عبر الشبكة أسوأ من NVMe المحلي؟
هي أبطأ في كل عملية، وتتعطل بطريقة مختلفة. تُضاف دورة الاتصال الشبكي إلى كل قراءة وكل كتابة، لذلك يكون زمن الاستجابة أعلى رغم أن النوعين يعتمدان على الفلاش. في المقابل، لا تكون بياناتك موجودة على مضيف فعلي واحد، لذلك لا يؤدي تعطل المضيف إلى فقدان وحدة التخزين معه، كما تصبح اللقطات والترحيل المباشر أسهل على مزود الخدمة. اختر الفلاش المحلي لقاعدة بيانات حساسة لزمن الاستجابة. واختر التخزين الشبكي عندما تكون سلامة وحدة التخزين أهم من فرق الميكروثواني.