1. מבוא
עדכון אחרון:12.02.2020
זירת הקרבות של המיקרו-שירותים (microservices)
הייתם פעם בקרב כדורי שלג שבו אתם מסתובבים וזורקים כדורי שלג על אחרים? אם לא, נסו זאת מתישהו! אבל עכשיו, במקום להסתכן בפגיעה פיזית, אפשר לפתח שירות קטן ונגיש לרשת (מיקרו-שירות) שישתתף בקרב אדיר נגד מיקרו-שירותים (microservices) אחרים. ומכיוון שאנחנו מארחים את הקרב הראשון הזה עם מיקרו-שירותים באטלנטה שבג'ורג'יה, המיקרו-שירותים שלנו זורקים אפרסקים במקום כדורי שלג.
ייתכן שאתם תוהים... אבל מה קורה אם מיקרו-שירות (microservice) "פועל" או אפרסק במיקרו-שירותים אחרים? מיקרו-שירות (microservice) יכול לקבל בקשות רשת (בדרך כלל באמצעות HTTP) ולהחזיר תגובות. יש 'מנהל אזור' שתשלח למיקרו-שירות (microservice) את המצב הנוכחי של הזירה, ואז המיקרו-שירות (microservice) תגיב באמצעות פקודה שמציינת מה לעשות.
ברור שהמטרה היא לנצח, אבל בהמשך תלמדו על יצירה ופריסה של מיקרו-שירותים (microservices) ב-Google Cloud.
איך זה עובד
נפתח מיקרו-שירות (microservice) בכל טכנולוגיה שרוצים (או לבחור מבין סימני Java, Kotlin או Scala) ולאחר מכן פורסים את המיקרו-שירות (microservice) ב-Google Cloud. לאחר הפריסה, ממלאים טופס כדי להודיע לנו על כתובת ה-URL של המיקרו-שירות (microservice) ואז אנחנו נוסיף אותו לזירה.
הזירה כוללת את כל השחקנים בקרב קרב מסוים. בוועידת DevNexus תהיה זירה אחת לכל יום. כל שחקן מייצג מיקרו-שירות (microservice) שזז ומשליך אפרסקים לשחקנים האחרים.
בערך פעם שנייה, מנהל הזירה שלנו יתקשר למיקרו-שירות (microservice) שלכם וישלח את מצב הזירה הנוכחי (איפה השחקנים נמצאים) והמיקרו-שירות (microservice) יגיב לפקודה 'מה לעשות'. בזירה אפשר להתקדם קדימה, לפנות שמאלה או ימינה או להשליך אפרסק. אפרסק שזרוע זז עד שלושה רווחים בכיוון שאליו השחקן פונה. אם אפרסק "פוגע" שחקן אחר, הזורק מקבל נקודה אחת והשחקן הכה מאבד נקודה. גודל האצטדיון מותאם באופן אוטומטי למספר השחקנים הנוכחי.
כך נראה הזירה עם שלושה שחקנים מומצאים:
דוגמה לאצטדיון Battle Peach
מחלוקות משתנות
בזירה, ייתכן שמספר שחקנים מנסים לבצע פעולות מתנגשות. לדוגמה, שני שחקנים עשויים לנסות לעבור לאותו מרחב. במקרה של התנגשות, המיקרו-שירות (microservice) עם זמן התגובה המהיר ביותר מנצח.
צפייה בקרב
כדאי לראות את הזירה בשידור חי כדי לראות את הביצועים של המיקרו-שירות (microservice) בקרב.
Battle API
כדי לעבוד עם מנהל/ת התחום שלנו, המיקרו-שירות (microservice) שלכם יצטרך להטמיע API ספציפי כדי להשתתף בזירה. מנהל הזירה ישלח את מצב הזירה הנוכחי ב-HTTP POST לכתובת ה-URL שסיפקתם לנו, במבנה הבא של JSON:
{
"_links": {
"self": {
"href": "https://YOUR_SERVICE_URL"
}
},
"arena": {
"dims": [4,3], // width, height
"state": {
"https://A_PLAYERS_URL": {
"x": 0, // zero-based x position, where 0 = left
"y": 0, // zero-based y position, where 0 = top
"direction": "N", // N = North, W = West, S = South, E = East
"wasHit": false,
"score": 0
}
... // also you and the other players
}
}
}
תגובת ה-HTTP חייבת להיות קוד סטטוס 200 (OK) עם גוף תגובה שמכיל את הצעד הבא, מקודדת כתו גדולה אחת של אחד או יותר מהערכים הבאים:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
זה הכול! בואו נראה איך פורסים מיקרו-שירות (microservice) ב-Cloud Run, שירות של Google Cloud להרצת מיקרו-שירותים (microservices) ואפליקציות אחרות.
2. פריסת המיקרו-שירות (microservice)
אתם יכולים לפתח מיקרו-שירות (microservice) בכל טכנולוגיה ולפרוס אותו בכל מקום, כל עוד אפשר לגשת אליו באופן ציבורי ותואם ל-Battle API. כדי להקל על התהליך, אתם יכולים להתחיל עם פרויקט לדוגמה שבוחרים פקודה אקראית.
בחירת טעימה בתור התחלה
אפשר להתחיל מבין שלוש דוגמאות של מיקרו-שירות (microservice):
Java ו- מגף קפיץ | ||
Java ו- קורקוס | ||
קוטלין Micronaut | ||
קוטלין קורקוס | ||
סקאלה ו- מסגרת של Play | ||
Go |
אחרי שמחליטים באיזו דוגמה להתחיל, לוחצים על Deploy on Cloud Run (פריסה ב-Cloud Run) לחצן למעלה. פעולה זו תפעיל את Cloud Shell (מסוף מבוסס-אינטרנט למכונה וירטואלית בענן) שבה יש לשכפל את המקור ואז ליצור חבילה שניתן לפרוס (תמונת קונטיינר של Docer). לאחר מכן תתבצע העלאה אל Google Container Registry ואז נפרס ב-Cloud Run.
כשמופיעה בקשה, מציינים את האזור us-central1
.
בצילום המסך למטה מוצג הפלט של Cloud Shell לפיתוח ולפריסה של מיקרו-שירות (microservice)
מוודאים שהמיקרו-שירות (microservice) פועל
ב-Cloud Shell אתם יכולים לשלוח בקשה למיקרו-שירות (microservice) החדש שנפרס, ולהחליף את הכתובת YOUR_SERVICE_URL
בכתובת ה-URL של השירות (שנמצאת ב-Cloud Shell אחרי השורה 'האפליקציה שלך פעילה כאן'):
curl -d '{ "_links": { "self": { "href": "https://foo.com" } }, "arena": { "dims": [4,3], "state": { "https://foo.com": { "x": 0, "y": 0, "direction": "N", "wasHit": false, "score": 0 } } } }' -H "Content-Type: application/json" -X POST -w "\n" \ https://YOUR_SERVICE_URL
מחרוזת התשובה צריכה להיות F, L, R או T.
שליחת בקשה להכללה בזירה
עליך למלא טופס קצר כדי להיכלל בזירה. החלק הקשה ביותר יהיה הבחירה להשתמש בתמונת הפרופיל. אתם יכולים להשתמש בתמונה שלכם מ-GitHub או בתמונה בלינקדאין, או שאנחנו פשוט נבחר בשבילכם דמות אקראית. אחרי שנבדוק את הבקשה ששלחתם, השחקן יופיע בזירה.
לעשות & פריסת השינויים
כדי שתוכלו לבצע שינויים, עליכם להגדיר פרטים ב-Cloud Shell לגבי הפרויקט ב-GCP והדוגמה שבה השתמשתם. ראשית, יש לרשום את הפרויקטים שלך ב-GCP:
gcloud projects list
סביר להניח שיש לכם רק פרויקט אחד. מעתיקים את PROJECT_ID
מהעמודה הראשונה ומדביקים אותו בפקודה הבאה (מחליפים את YOUR_PROJECT_ID
במזהה הפרויקט בפועל), כדי להגדיר משתנה סביבה שנשתמש בפקודות מאוחרות יותר:
export PROJECT_ID=YOUR_PROJECT_ID
עכשיו מגדירים משתנה סביבה נוסף לטעימה שבה השתמשתם, כדי שנוכל לציין בפקודות מאוחרות יותר את שם הספרייה ואת שם השירות הנכונים:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
עכשיו אתם יכולים לערוך את המקור של המיקרו-שירות (microservice) מתוך Cloud Shell. כדי לפתוח את העורך מבוסס האינטרנט של Cloud Shell, מריצים את הפקודה הבאה:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
לאחר מכן יוצגו הוראות נוספות לביצוע שינויים.
Cloud Shell עם כלי העריכה כשהפרויקט לדוגמה פתוח
אחרי שמירת השינויים, יוצרים את הפרויקט ב-Cloud Shell באמצעות הפקודה pack
. הפקודה הזו משתמשת ב-Buildpacks כדי לזהות את סוג הפרויקט, להדר אותו וליצור את הארטיפקט שניתן לפריסה (קובץ אימג' בקונטיינר של Docker).
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
עכשיו, אחרי שתיצרו את קובץ האימג' בקונטיינר, תוכלו להשתמש בפקודת Docer (ב-Cloud Shell) להעביר את קובץ האימג' בקונטיינר ל-Google Container Registry, כדי ש-Cloud Run יוכל לגשת אליו:
docker push gcr.io/$PROJECT_ID/$SAMPLE
עכשיו פורסים את הגרסה החדשה ב-Cloud Run:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
עכשיו הזירה תשתמש בגרסה החדשה שלך!
3. מזל טוב
כל הכבוד! פיתחתם ופרסתם בהצלחה מיקרו-שירות (microservice) שיכול להילחם במיקרו-שירותים (microservices) אחרים! בהצלחה!
מה השלב הבא?
- הוספת מעקב מבוזר לאפליקציית Spring Boot
- שימוש ב-AI Platform כדי להפוך את המיקרו-שירות (microservice) לחכם במיוחד