מיקרו-שירותים דורשים תקשורת סינכרונית של בקשה/תגובה ותקשורת אסינכרונית מונחית אירועים.
→השתמש ב-gRPC או HTTP עבור קריאות סינכרוניות. השתמש ב-Pub/Sub עבור טיפול באירועים אסינכרוניים ו-fan-out.
למה: Pub/Sub מפריד לחלוטין שירותים לאמינות וסקלאביליות עצמאית. קריאות ישירות מספקות תגובות סינכרוניות בעלות זמן אחזור נמוך.
מקור↗
שירות חישוב חסר מצב (Cloud Run, Cloud Functions) צריך לעבד קבצים זמניים.
→השתמש ב-Cloud Storage עבור כל פעולות הקלט/פלט של קבצים זמניים.
למה: מערכת הקבצים המקומית של פלטפורמות serverless היא ארעית, בזיכרון, ולא משותפת. Cloud Storage מספק אחסון עמיד וניתן להרחבה הנגיש לכל המופעים.
נהל תצורות וסודות ספציפיים לסביבה עבור עומסי עבודה של GKE בהתאם לעקרונות 12-factor.
→השתמש ב-K8s ConfigMaps עבור תצורה לא רגישה. השתמש ב-Secret Manager עבור ערכים רגישים, הנגישים באופן מאובטח באמצעות Workload Identity.
למה: Secret Manager הוא פתרון מאובטח יותר, מנוהל וניתן לביקורת מאשר K8s Secrets. Workload Identity מונע ניהול והפצת מפתחות חשבון שירות.
מקור↗
ליישום יש שיאי תעבורה קיצוניים אך תקופות סרק ארוכות שבהן יש למזער עלויות.
→השתמש ב-Cloud Run עם `min-instances` מוגדר ל-0.
למה: Cloud Run יכול להתרחב לאפס, מה שמבטל את כל עלויות החישוב בתקופות סרק. GKE ו-Compute Engine דורשים מינימום nodes/instances פועלים.
יישם ניסיונות חוזרים, מפסקי זרם (circuit breakers) ו-mTLS באופן עקבי על פני מיקרו-שירותים ללא שינויים בקוד היישום.
→פרוס service mesh (Anthos Service Mesh) על GKE.
למה: service mesh מחדיר חוסן, אבטחה ויכולת תצפית ברמת הפלטפורמה, שומר על קוד יישום נקי ומבטיח התנהגות עקבית.
חשוף שירותי backend לשותפים חיצוניים או אפליקציות מובייל עם הגבלת קצב, מפתחות API וניתוח שימוש.
→השתמש ב-API Gateway לפני שירותי ה-backend (לדוגמה, Cloud Run, GKE).
למה: API Gateway מספק פתרון מנוהל במלואו לדאגות מחזור חיי ה-API (אבטחה, ניטור, ניהול גרסאות), ומפנה אותן משירות ה-backend.
מקור↗
בחר אחסון עמיד, ניתן להרחבה ועקבי חזק עבור יומן אירועים מסוג "הוסף בלבד" (append-only).
→השתמש ב-Cloud Spanner עבור אחסון האירועים.
למה: Spanner מספק סקלאביליות אופקית עם עקביות גלובלית חזקה, שהיא קריטית לשמירה על שלמות יומן אירועים בקנה מידה גדול.
API עבור משימה ארוכת טווח חייב להגיב באופן מיידי בזמן שהעיבוד ממשיך ברקע.
→נקודת קצה של API מכניסה משימה לתור ב-Pub/Sub או Cloud Tasks ומחזירה 202 Accepted עם ID של משימה. worker נפרד (Cloud Run, Cloud Function) מעבד את המשימה.
למה: זה מפריד את זמן התגובה הנראה למשתמש מזמן העיבוד ב-backend, משפר את חווית המשתמש ואת אמינות המערכת. השתמש ב-Cloud Storage לעדכוני סטטוס.
שמור על עקביות נתונים על פני מספר מיקרו-שירותים ללא מסד נתונים משותף.
→יישם את תבנית Saga באמצעות orchestrator (Cloud Workflows) או choreography (אירועי Pub/Sub) עם compensating transactions.
למה: נמנע מ-two-phase commits מורכבים ומועדים לנעילות, ומעדיף עקביות בסופו של דבר (eventual consistency) שמתאימה יותר למערכות מבוזרות.
היישום קורא ל-API צד שלישי המוגבל בקצב, שבו הנתונים משתנים לעיתים רחוקות.
→השתמש ב-Memorystore for Redis כ-cache מבוזר. הטמע את תבנית cache-aside עם TTL. השתמש במנעול מבוזר (לדוגמה, Redis SETNX) כדי למנוע cache stampedes.
למה: cache מבוזר משתף נתונים על פני כל מופעי היישום, מפחית באופן דרסטי קריאות ל-API החיצוני, משפר את זמן האחזור ומכבד את מגבלות הקצב.
צוות פיתוח זקוק לסביבות פיתוח עקביות, מוגדרות מראש ומאובטחות עם גישה למשאבי VPC פרטיים.
→השתמש ב-Cloud Workstations.
למה: Cloud Workstations מספק סביבות פיתוח מנוהלות, מבוססות מכולות, עם אבטחה משולבת וגישה ל-VPC, ופותר את בעיית "זה עובד במחשב שלי".
מקור↗
יישום SaaS דורש שלדיירים יהיו נתונים, מפתחות הצפנה ומגבלות מיקום נתונים מבודדים לחלוטין.
→השתמש במודל של project-per-tenant. נהל הקצאה ותצורה באופן מרכזי באמצעות IaC (Terraform).
למה: מספק את רמת הבידוד הגבוהה ביותר עבור IAM, חיוב, מכסות, רשת ומיקום נתונים, לעיתים קרובות נדרש על ידי לקוחות ארגוניים או מוסדרים.