פיתוח אפליקציות

קבל הצעת מחיר➘

שירותי הענן של Amazon שאתם חייבים להכיר ודרכי השימוש בהם

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

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

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

1. כוח מחשוב

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

בכדי שכוח המחשוב שלנו יהיה סקיילבילי, עלינו לתכנן ארכיטקטורה שתאפשר הוספת Instances כרצוננו. לשם כך נשתמש ברכיב נוסף מ EC2 הנקרא Load Balancer. ה LB הנו נתב אשר מנתר את העומס אל ה Instances השונים המחוברים אליו באמצעות בדיקות מוגדרות וחוזרות על עצמן (Health Check). ה LB  מאפשר להגדיר כיצד יש לפעול כאשר Instance  לא עובר בדיקת תקינות, בדר״כ ע״י הקמה של מכונות חדשות שהגדרנו ב Launch configuration. כמו כן, ה LB מאפשר העלאה של מפתח SSL, והגדרה של Security Groups ייעודיים אליו, כך שהוא גם מקל אלינו בתהליך ההקמה של שרתים חדשים, ומייתר את הצורך ביצירת WildCard SSL Keys והטמעה שלהם בכל שרת ושרת (יותר מזה – אמזון מאפשר יצירה חינמית של מפתח SSL והעלאתו ישירות ל LB).

דבר חשוב שיש לקחת בחשבון ביצירת ה- Launch configuration הוא מאגר המידע. למרות שכל Instance מאפשר לשמור מידע לוקלית (בין אם בקבצים סטטיים ובין אם באינסטנס לוקלי של ה DB), הדבר עלול לפגוע בשלמות המידע במערכת.

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

2. אחסון

אחד השירותים המוכרים והוותיקים של AWS הוא ה S3 או בשמו המוכר ה Bucket. ה S3 מאפשר אחסון קבצים סטטיים בקלות ללא הגבלה, וגישה אליהם מכל מקום (ישירות, וכן באמצעות API נוח להפליא). בנוסף, להיותו כלי נוח ולא מוגבל במקום, מאפשרת אמזון לחבר אותו בקלות רבה לרשת הפצת תוכן – CDN, ובכך לשפר את מהירות הגישה של משתמשי המערכת לקבצים בה.

אם נמשיך את הדוגמא שלנו,  לאחר יצירת Auto Scaling Group לתמיכה בכוח המחשוב, ניצור S3 Bucket, ונפנה את כל אחסון הקבצים הרלוונטיים (מדיה ותמונות, ואפילו קבצי קוד סטטיים דוגמת Html, Css ו JS ) אליו. כמו כן, ניצור CDN באמצעות השירות CloudFront של אמזון, ונחבר אותו ל S3 bucket. במצב זה כל התמונות ישמרו חיצונית וכן instance יוכל לגשת עליה בכל רגע.

** שימו לב לעדכן במקומות הרלוונטיים בקוד את הקישור לקבצים המתאימים ב CDN, אחרת ההפניה תהיה לשרת המקורי, והעבודה תהיה לחינם**

3. מאגר המידע

השירות המתאים לשימוש כמאגר מידע תלוי מאוד בסוג המאגר הנבחר. אמזון תומכים ב SQL וב SQL-Server בשירות ה RDS שלהם המאפשר פריסה של מאגר מידע חיצוני ל Instances עליהן רץ הקוד. במידע ומאגר המידע הוא לא אחד מהשניים (דבר ההופך נפוץ יותר מיום ליום), עומדות בפנינו מספר אפשרויות:

  1. הקמת שרת ייעודי ל DB שהמערכת משתמשת בו
  2. שימוש בשירותים חיצוניים כגון Atlas עבור Mongodb לניהול ארכיטקטורת השרתים

**שימו לב שמכיוון שניהול ארכיטקטורת שרתים הנו תהליך לא טריוויאלי כלל (יש לקחת בחשבון את שרידות המידע, אבטחה, גודל המאגר, גיבוי המידע ועוד). אפשרות 2 היא המומלצת ביותר.**

בסיום התהליך ארכיטקטורת השרתים הסופית שלנו תראה בערך כך:

 

capture

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

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

למי שמתעניין מעבר, להלן הרשימה המלאה של שירותי הענן של אמזון .

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