כמה מילים על אחסון גיבוי בענן (חלק 2/2)

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

מהו אותו S3 של אמזון? S3 הם ראשי תיבות של 3 S (כלומר: Simple Storage Solution). אמזון עצמה לא מרחיבה בפירוט איך זה בנוי, אך מתחרים שהצליחו לעשות Reverse Engineering לטכנולוגיה, מדברים על כך שמדובר במערכת אחסון שמשתמשת מצד אחד בדיסקים זולים, אך מצד שני, הגיבוי עצמו נמצא במספר ארונות שונים בצורה משוכפלת מספר פעמים. השרידות של S3 היא מדהימה – 99.999999999% עם זמינות של 99.99%, כך שהסיכוי שהתוכן שתעלה יעלם עקב תקלת דיסק/בקר – הוא אפסי.

באחוסן רגיל כשאתה מבקש שיוסיפו לך אחסון, בד"כ מוסיפים לך דיסק קשיח וירטואלי שבנוי על איזו מערכת SAN כלשהי או מערכת אחרת שאותו ספק אחסון משתמש בה (הספקים הגדולים משתמשים בדברים שהם in house – ולאו דווקא פתרונות כמו Netapp, EMC וכו') וגם אחסון זה משוכפל עם שרידות של 99.999%. החסרון שלו לעומת זאת הוא המחיר – 10 סנט לג'יגה בייט אם זה מאוחסן על SSD או 5 סנט אם זה מאוחסן על דיסק מכני. אחסון זה אינו גודל אוטומטית ויש צורך לבצע תהליך מיגרציה כשעוברים בין דיסקים (אפשר כמובן לעקוף ופשוט לבצע Linking ברמת File system אבל זה לא פתרון מומלץ כל כך …)

S3 לעומת זאת – זו חיה אחרת לגמרי.

מערכת S3 היא מערכת שמורכבת בראש משמות של "דליים" (Buckets) כאשר בתוך כל דלי אתה יכול "לשפוך" כמות בלתי מוגבלת של קבצים, החל מקובץ קטן של 1 בייט (אם כי הוא יתפוס בעצם 3 קילובייט כי 2 קילובייט נוספים הולכים על Meta Data), ועד לקבצים בגודל 5 טרהבייט פר קובץ.

מבחינת אבטחה – לכל אובייקט אתה יכול להגדיר ACL (כלומר Access Control List), ואותו ACL יכול להשפיע על הקובץ או על קבצים אחרים או על כל הדלי. אם אתה משתמש במספר חשבונות ב-AWS של אמזון (או Cloud Platform של גוגל) עם IAM, תוכל להגדיר את המשתמשים המתחברים לפלטפורמה כקבוצות ולהחיל הרשאות לקבצים ב-S3 שהם יכולים לגשת ו/או לדלי שהם יכולים לגשת.

אחד הדברים המעניינים ב-S3 זו העובדה שאין מערכת קבצים ב-S3. הכלים של ה-S3 יכולים "להבין" שהכנסת קבצים, אבל הרשאות ברמת File System או דברים כמו תיקיות, Links – פשוט לא קיימים ובשביל שהם יהיו קיימים, יש צורך לבחור במימוש שאתה מעוניין על ה-S3.

מימוש כזה כמובן יכול להתבצע ע"י המפתחים בחברה שלך שיכולים להחליט שסוג X יהיה בעצם Directory וכו' אבל זהו ממש קנייני משלכם.

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

שימו לב: ישנם מימושים שונים למשהו כמו File System על S3 ופתרונות מתחרים מגוגל ומיקרוסופט. במקרה של ה-gsutil של גוגל לדוגמא, אין לי צורך ליצור מחיצות עם פקודה, מספיק שאכניס לוכסן קדמי (/) והוא ידע שמדובר בתיקיה, כך שאם אני מעלה קובץ בשם my-docs/cv.doc, הוא יצור "תיקיה" בשם my-docs ובתוכה ישים את הקובץ cv.doc אבל שימוש במימוש אחר יראה את my-docs כקובץ ולא כתיקיה, כך שלא אוכל להיכנס לתוך my-docs ולכן חשוב מאוד לבחור מערכת מימוש מתאימה.

להלן מספר צורות מימוש:

  • מערכת gsutil – היא אינה מאפשרת לעשות mount ל-bucket אך היא מתאימה להורדה ולהעלאה של קבצים מתוך כל סקריפט שתכתוב ללא צורך בהרשאות root
  • מערכת s3fs – מערכת זו מאפשרת ליצור משהו קרוב ל-file system לינוקסי אך אין לינקים, ואין משתמשים. אפשר להגדיר את s3fs לאפשר לאחרים לקרוא/לכתוב/למחוק/לשנות עם אופציית allow_others, אך לא ברמה של משתמשים בודדים/קבוצות שונות.
  • מערכת s3ql – זו המערכת שנותנת לך תוצאות הכי קרובות לדיסק פיזי מבחינת הרשאות כתיבה ו-file system רגיל עם כל האפשרויות. יחד עם זאת, אם מתנתק הקשר בין השרת שלך ל-S3, תצטרך לבצע fsck ל"דלי" בדיוק כמו שמתנתק דיסק פיזי מהמכונה. הוא גם מהיר מאוד מבחינת ביצועים.

מי משתמש ב-S3? חברות רבות ופרוייקטים רבים, החל מ-Apache Hadoop וחברות כמו Dropbox, Tumblr, Pinterest, wikihow ועוד רבים אחרים.

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

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

לסיכום: S3 של אמזון (או Cloud Storage של גוגל או Azure Blob Storage של מיקרוסופט) מציעים את אותו דבר: אחסון בלתי מוגבל כשהתשלום בפועל הוא על האחסון שאתה משתמש בו (פר ג'יגהבייט – 0.26 סנט בגוגל, 0.3 באמזון) + עלות תעבורת הורדה (תעבורת Upload היא בחינם). מכיוון שהתקשורת בארץ אל חו"ל היא יקרה ואיטית, מומלץ להעלות הקבצים בלילה או אם מדובר בג'יגהבייטים – בסופ"ש. מכיוון שמדובר עם אחסון בעל שרידות יוצאת דופן, אפשר להיות רגועים מהחשש שהחומר גיבוי ימחק. מבחינת השימוש עצמו ב-S3 – כל סקריפט פשוט יכול להעלות את הגיבוי וכלי גיבוי ל-Enterprise כמו Netbackup כבר כוללים תמיכה ל-S3. למען השקט ניתן כמובן להצפין את הקבצים טרם שליחתם.