Queues, Containers ו-Blobs ב Windows Azure
Windows Azure, עליו כתבתי בכלליות בפוסט הקודם, מציע לנו תשתית מעניינת (שכמובן, ניתנת להרצה לוקאלית גם לצרכי דיבאג ופיתוח) לשמירת מידע של ה cloud service שלנו ולהעברת מידע בין חלקין שונים של ה service (נניח, בין Web Role ל Worker Role) או בין services שונים.
לצורך כך, יש שלוש סוגים של שמירת מידע ואכסון מידע שעליהם אדבר בפוסט זה. בפוסט זה, אני אציג את המושגים ואכיר לכם את הכלים. הסברים בפועל איך עובדים מולם, יהיו בפוסט הבא.
Queues
תורות, זאת הדרך שלנו לשמור מידע ולהעביר מידע לטיפול. נניח, לצורך העניין, שיש לנו service עם web role ו worker role. ה worker role, כפי שכתבתי בפוסט הקודם, מתפקד כלולאה אין סופית, כאשר הוא ממתין לאיזשהו מידע שיגיע שאותו הוא יעבד ועליו הוא יבצע את תפקידו (זה ה scenario הנפוץ ביותר). המידע הזה, מגיע מתור. כאשר, מנגנון התורות המשמש הוא המנגנון של Windows Azure. דרך ה web role אפשר להעביר את ההוראה על הפעולה, כאשר ההוראה תיכנס לתור ו worker role יבצע אותה (כאשר, יכולים להיות כמה מופעים של אותו worker role שיוציאו במקביל מהתור, ו Windows Azure ערוך להתמודד עם זה).
בד"כ, מה שיעבור ב Queue אלה למעשה הפניות לפריטים שאותם צריך לעבד. למשל, איזשהו ID של קובץ שעליו צריך לעשות עיבוד, איזשהו חשבון שצריך ליצור וכו'.
Containers ו- Blobs
צורך נוסף שקיים, הוא לאכסן קבצים ומידע בינארי על סוגיו השונים. לצורך זה
, קיימים ה Blobs וה Containers. ב Windows Azure, ניתן ליצור חשבון מסוג Storage Account שהוא זה שמכיל למעשה את ה containers (יכול להכיל מספר רב שלהם) וכל container מכיל blob (קובץ, לצורך העניין).
כאשר עובדים מול סביבת ה production הסופית, נגדיר את ה Endpoints לאותם ה endpoints שיופיעו במסך שלאחר יצירת ה storage project. כאשר נפתח לוקאלית נצטרך להריץ את ה Development Storage (התמונה התחתונה) ששם יופיעו לנו מה ה endpoints שנשתמש
בהם בפיתוח הלוקאלי. שימו לב, שה development storage מדמה storage project אחד ב Windows Azure.
איך בפועל עובדים מול הכלים הללו?
לכלים הללו, כמו לכל הכלים ב Windows Azure יש ממשק REST API.
אל תדאגו, אתם לא באמת צריכים לעבוד עם ה REST API הזה. אחד מה samples projects שמגיעים עם ה SDK נקרא Storage Client. הפרוייקט החמוד הזה, מכיל למעשה אובייקטים שמאפשרים לעבוד בצורה נורמלית ונוחה, מונחית אובייקטים מול הכלים שהזכרתי בפוסט זה.
על איך עובדים בפועל, אני אכתוב בפוסט הבא. בינתיים, אם אתם רוצים לראות איך הכל משתלב בצורה יפה, יש פרוייקט בשם Thumbnails ב SDK, שמדגים פרוייקט עם שני roles - הראשון web role שמאפשר להעלות תמונות שמאוכסנות כ blob ב container ומכניס את הID של התמונה ל queue. ה worker role מוציא את ה ID של התמונה מה queue, יוצר ממנה צלמית ושומר גם אותה כ blob ב container אחר.
בפוסט הבא, אני אדגים איך עובדים עם כל הכלים הללו, באמצעות המחלקות שנמצאות בפרוייקט הדוגמא StorageClient.