SSD Nodes Learn 8GB RAM — $66/שנה
מדריכים Matt Connorמאת Matt Connor

מהו SSD VPS? הסבר על אחסון פלאש וביצועים

מהו SSD VPS ומה באמת מקבלים בתמורה? הסבר על IOPS, זמן השהיה וההבדלים בין אחסון פלאש לדיסק מסתובב, כולל שלוש שאלות שכדאי לשאול לפני הרכישה.

מהו SSD VPS?

SSD VPS הוא שרת פרטי וירטואלי שהדיסק שלו מבוסס על זיכרון הבזק במקום על דיסק קשיח מסתובב. SSD הוא קיצור של solid state drive: אמצעי אחסון הבנוי משבבי הבזק מסוג NAND, ללא חלקים נעים. VPS הוא קיצור של virtual private server: חלק מבודד של מכונה פיזית מארחת, שמפעיל מערכת הפעלה משלו ונמכר לכם כאילו היה שרת שלם. השילוב בין השניים מבטיח דבר אחד. כאשר השרת קורא בלוק נתונים, אין צורך להזיז תחילה רכיב מכני.

זו ההגדרה כולה. כל מה שמופיע בהמשך עוסק במה שהתווית אינה מציינת, משום שהמילים "SSD hosting" בדף תמחור אומרות מעט מאוד על מערך האחסון שמאחוריהן.

אם אתם עדיין מבררים במה VPS שונה ממכונה וירטואלית רגילה, ההבדל בין VPS, VM ו-VPC הוא הדף שכדאי לקרוא תחילה.

מדוע ספקי אירוח מפרסמים את מהירות האחסון במקום את נפח האחסון

בדף של תוכנית מופיעים מספר ליבות CPU, נפח זיכרון, נפח אחסון ורוחב פס, ולאחר מכן מתווספת מילה אחת על הדיסק שאינה מציינת נפח כלל. ספקי אירוח עושים זאת משום שלפני שנים נפח האחסון חדל להיות הנתון המעניין ביותר. שני הנתונים שקובעים כיצד השרת מגיב הם IOPS (מספר פעולות הקלט/פלט בשנייה) וזמן השהיה (משך הזמן עד לקבלת התוצאה של פעולה אחת).

ההבדל המכני הוא הסיבה לכך. דיסק קשיח שומר נתונים על פלטות מסתובבות וקורא אותם באמצעות ראש המותקן על זרוע נעה. כדי להגיע לבלוק שנמצא במקום אחר בפלטה, הזרוע צריכה לבצע חיפוש, ולאחר מכן הדיסק צריך להסתובב עד שהמגזר המתאים יגיע מתחת לראש. במהירות של 7200 סיבובים לדקה, חצי סיבוב נמשך בממוצע כ־4 ms, וזמן החיפוש מוסיף כמה אלפיות שנייה. ל־Flash אין זרוע ואין פלטה, ולכן קריאה היא חיפוש חשמלי שמסתיים בתוך עשרות מיקרו־שניות.

ChartRandom 4k read, published device class specifications rather than VPS measurements
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. בנוסף, לעולם אינכם מקבלים כונן שלם: אמצעי האחסון שלכם הוא חלק מהתקן אחד או חלק ממערך, והוא נמצא לצד לקוחות אחרים על אותה חומרה.

שתי העמודות עונות גם על שאלות שונות, ולכן יש לקרוא אותן יחד. זמן השהיה הוא משך ההמתנה לפעולה אחת. IOPS הוא מספר הפעולות שהכונן יכול לבצע במקביל. Flash מגיע לערכי IOPS גבוהים באמצעות עיבוד מקבילי, משום שבבי Flash רבים עונים על בקשות רבות בו־זמנית, בעוד שתור עמוק ממשיך להעסיק אותם. תוכנית בעלת תהליכון יחיד שמנפיקה קריאה אחת, ממתינה לה ולאחר מכן מנפיקה את הקריאה הבאה, לעולם לא תגיע לראש הטבלה הזאת. היא תראה את עמודת זמן ההשהיה במקום זאת.

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. זהו אותו סוג של נתיבים שאליהם מתחבר כרטיס גרפי.

לכן, גם SSD מסוג SATA וגם SSD מסוג NVMe שומרים נתונים על flash. ההבדל ביניהם הוא בממשק שבו הם משתמשים. SSD מסוג SATA עדיין מהיר בהרבה מכל דיסק קשיח, אך תור הפקודות, המוגבל ל־32 פקודות, מגביל את כמות העבודה המקבילית שהוא יכול לבצע. עבודה מקבילית היא בדיוק התחום שבו flash מצטיין. הכדאיות של כל אפשרות תלויה בעומס העבודה שלכם, והדיון בבחירה בין NVMe לבין SATA SSD מנתח זאת כראוי.

אחסון flash מקומי או אחסון המחובר לרשת?

שתי תצורות שונות מאוד נמכרות תחת אותו מונח.

אחסון מקומי פירושו שכונני ה- flash נמצאים בתוך אותו מארח פיזי שבו פועל ה-VPS. הבקשה עוברת דרך PCIe בתוך מחשב אחד וחוזרת מיד, ולכן זמן האחזור נשאר בטווח של עשרות מיקרו-שניות.

אחסון המחובר לרשת פירושו שהדיסק הווירטואלי נמצא באשכול אחסון נפרד, לרוב Ceph או SAN (storage area network), וכל פעולת קריאה וכתיבה עוברת דרך הרשת כדי להגיע אליו. ספקים מכנים זאת בדרך כלל "אחסון בלוקים בענן" או "אמצעי אחסון אלסטיים". ה-flash אמיתי. גם המעבר דרך הרשת אמיתי, והוא נוסף לכל פעולה, ולכן זמן האחזור מגיע למאות מיקרו-שניות גבוהות או למילישניות נמוכות, במקום לעשרות מיקרו-שניות.

אין כאן תשובה שגויה. אחסון ברשת שורד כשל של מארח, משום שהנתונים מעולם לא היו באותו מארח: הספק יכול להפעיל את השרת שלכם על חומרה אחרת, והדיסק עובר איתו. NVMe מקומי מהיר יותר ומקושר למחשב פיזי אחד, ולכן כשל חומרה בו מחייב שחזור מגיבוי. שאלו באיזו תצורה משתמשת התוכנית. כמעט אף אחד לא עושה זאת.

כיצד מרגיש ההבדל בשרת אמיתי

עבודת שרת מורכבת בעיקר מקריאות וכתיבות אקראיות קטנות, ולא מהעברות סדרתיות ארוכות. לכן הנתון MB/s בטקסט השיווקי הוא המספר הכי פחות שימושי בעמוד.

  • ביצועי commit במסד נתונים. מסד נתונים שמבטיח עמידות קורא ל-fsync כאשר עסקה מתבצעת, ולאחר מכן ממתין שהכונן יאשר שהנתונים אכן נשמרו. בכונן קשיח ההמתנה נמשכת אלפיות שנייה, ולכן מסד נתונים קטן מוגבל למאות בודדות של ביצועי commit בשנייה. באחסון Flash אותה המתנה נמשכת שבריר של אלפית שנייה. כאן הפער הגדול ביותר, בין אם אתם משתמשים ב-PostgreSQL, ב-MySQL או ב-SQLite כמסד נתונים בסביבת ייצור.
  • התקנת חבילות. apt install פורס אלפי קבצים קטנים ומסנכרן אותם לדיסק במהלך הפעולה. כמעט אף אחת מהפעולות האלה אינה סדרתית, ולכן הביצועים מוגבלים לפי IOPS.
  • משיכת תמונות של קונטיינרים. docker pull מוריד שכבות דחוסות דרך הרשת ולאחר מכן מחלץ אותן לאלפי קבצים קטנים. ההורדה מוגבלת על ידי הרשת. החילוץ מוגבל על ידי הדיסק, ובאמצעי אחסון איטי החילוץ הוא השלב שבו ממתינים.
  • אתחול והפעלה מחדש. תהליך האתחול קורא ליבה ו-initramfs, ולאחר מכן מאות קובצי יחידות וספריות משותפות הפזורים באמצעי האחסון.

אף אחת מהפעולות האלה אינה קריאה סדרתית גדולה. אמצעי אחסון שמזרים 500 MB/s אך מספק רק 3,000 IOPS עדיין ירגיש איטי במהלך docker compose pull, משום שזמן ההמתנה נספר לכל קובץ, ולא לכל מגה-בייט.

מדוע "SSD cloud hosting" בדף תמחור כמעט אינו אומר דבר

המונח מתאר את אמצעי האחסון, ולא מעבר לכך. הוא אינו אומר דבר על הממשק שבו הכונן משתמש, ואינו אומר אם הכונן נמצא באותו מחשב כמו השרת שלכם. הוא גם אינו אומר מהי התקרה שהחבילה שלכם רשאית להגיע אליה.

התקרה הזו היא החשובה ביותר, ובדרך כלל מפרסמים אותה הכי פחות. ספקים מגבילים את מספר פעולות הקלט/פלט לשנייה ואת קצב התעבורה לכל אמצעי אחסון, משום שמארח אחד משרת לקוחות רבים, ושכן ללא הגבלה עלול למנוע מהאחרים לקבל משאבים. הגבלה של כמה אלפי פעולות קלט/פלט לשנייה בחומרה שמסוגלת להגיע למאות אלפים היא דבר רגיל ושקוף, אך היא אינה מופיעה בתיאור החבילה. שתי חבילות יכולות להציג את הכיתוב "SSD", בעוד שאחת משתמשת באחסון מקומי מסוג NVMe ללא הגבלה לכל אמצעי אחסון, והאחרת משתמשת באמצעי אחסון משותף באשכול, המוגבל ל־3,000 פעולות קלט/פלט לשנייה.

להגבלות יש שתי תצורות. הגבלה רציפה היא תקרה קבועה שאינה משתנה. הגבלת burst מספקת קצב בסיס נמוך בתוספת קרדיטים, המאפשרים לחרוג ממנו לזמן מוגבל; הקרדיטים נטענים מחדש כאשר אמצעי האחסון אינו פעיל. הגבלת burst נראית מצוינת בבדיקה שאורכה חמש דקות, ולאחר מכן יורדת לקצב הבסיס באמצע ייבוא של מסד נתונים או שחזור גדול. אם ספק מציין מספר גדול, שאלו כמה זמן מותר לכם לשמור עליו.

כיצד לבדוק מה ה-VPS שלכם מספק בפועל

מתוך ה-guest ניתן לראות רק את המידע שה-hypervisor מוסר לו.

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

החליפו את vda בשם ההתקן lsblk שהודפס עבור הדיסק שלכם. ROTA והקובץ rotational קוראים 0 כאשר ל-kernel נמסר שההתקן אינו מסתובב, ו-1 כאשר נמסר לו ההפך. דיסק וירטואלי מגדיר את הדגל הזה לפי מה שה-hypervisor מפרסם, ולכן הוא מתאר את ההתקן הווירטואלי ולא את החומרה הפיזית שמתחתיו. MODEL לרוב ריק עבור דיסק virtio כגון vda, או מכיל מחרוזת כללית כגון QEMU HARDDISK בבקר SATA מדומה. ה-guest אינו אמור לראות את מערך האחסון של ה-host, והוא אכן אינו רואה אותו.

לכן התייחסו לדגל כרמז בלבד ומדדו את שאר המדדים. הפעילו בדיקת 4k אקראית באמצעות fio מול קובץ בנפח, בעומק התור שבו היישום שלכם משתמש בפועל, והפעילו אותה זמן מספיק כדי לנצל את כל קרדיט ההתפרצות. השוואת ביצועים נכונה של VPS כוללת את פקודות ה-fio ואת הטעויות הנפוצות שמפיקות תוצאות מחמיאות מדי.

שלוש שאלות שכדאי לשאול ספק לפני הרכישה

  1. האם האחסון מקומי ל-hypervisor, או מחובר דרך הרשת? התשובה קובעת את זמן האחזור המינימלי שלכם, וכן מה יקרה לנתונים במקרה של כשל במארח פיזי. ספק שעונה על כך בבירור הקדיש לנושא מחשבה.
  2. מהי מגבלת ה-IOPS בנפח האחסון שלי? בקשו מספר. "Unlimited" ו-"enterprise grade" אינם מספרים. אם באמת אין מגבלה, שאלו מה מונע משכן באותו מארח לצרוך את כל מערך האחסון במהלך חלון הגיבוי שלו.
  3. האם המגבלה הזו רציפה או מתייחסת ל-burst? אם מדובר ב-burst, שאלו מהו קצב הבסיס ומהו משך ה-burst. קצב הבסיס הוא הנתון שעבודת הלילה שלכם תצטרך להתמודד איתו, ולכן יש לתכנן לפיו.

האם זיכרון Flash נשחק, והאם זו הבעיה שלכם?

לתאי Flash יש מספר מוגבל של מחזורי כתיבה. לכן כוננים מפרסמים דירוג עמידות ב-TBW (טרה-בתים שנכתבו) או ב-DWPD (כתיבות כונן ליום). הכונן מפזר את פעולות הכתיבה באופן אחיד בין התאים. פעולה זו נקראת wear levelling. הכונן גם שומר בלוקים חלופיים לשימוש במקום תאים שנכשלים. ב-VPS השחיקה היא באחריות הספק. הספק עוקב אחר מוני SMART בכוננים שלו ומחליף חומרה לפני שהדירוג מוצה. הבעיה שלכם קדמה ל-Flash. כונן אינו גיבוי. גם יתירות מתחת ל-volume שלכם אינה גיבוי, משום שהיא משכפלת מחיקה באותה נאמנות שבה היא משכפלת נתונים.

הפשרה שאתם באמת מבצעים היא המחיר לכל גיגה-בייט. Flash יקר יותר לכל גיגה-בייט מכוננים מסתובבים. לכן תוכנית SSD בדרך כלל מציעה פחות נפח מתוכנית כונן קשיח באותו מחיר. אם אתם זקוקים לנפח גדול עבור מדיה או ארכיונים, השאירו את ה-volume המהיר קטן והעבירו את הנפח העיקרי למקום זול יותר. זו גם התצורה המתאימה לשמירת גיבויים מחוץ לשרת. כדי להבין כיצד האחסון משתלב בשאר החשבון, מה באמת עולה 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 מקומי?

הוא איטי יותר בכל פעולה, ותקלותיו שונות. זמן הלוך-חזור ברשת מתווסף לכל קריאה ולכל כתיבה, ולכן זמן ההשהיה גבוה יותר, אף שבשני המקרים מדובר בזיכרון הבזק. בתמורה, הנתונים שלכם אינם נמצאים במארח פיזי יחיד, ולכן תקלה במארח אינה משביתה את אמצעי האחסון, ולספק קל יותר לבצע תמונות מצב והעברה חיה. בחרו בזיכרון הבזק מקומי עבור מסד נתונים הרגיש לזמן השהיה. בחרו באחסון ברשת כאשר שרידות אמצעי האחסון חשובה יותר ממיקרו-שניות.

#vps#ssd#nvme#storage#hosting-basics