מגבלות של gRPC בלי שרת Proxy

במאמר הזה מתוארות ההגבלות שחלות על Cloud Service Mesh עם אפליקציות gRPC ללא proxy. מידע על מגבלות זמין במאמר מכסות ומגבלות.

ההגבלות על כללי העברה, מיפויי כתובות URL ופרוקסי יעד חלות רק על Cloud Service Mesh עם ממשקי ה-API של איזון העומסים של Google Cloud .

מגבלות כלליות

ההגבלות של Cloud Service Mesh עם אפליקציות gRPC ללא שרת proxy כוללות את ההגבלות הבאות:

  • אי אפשר להגדיר שירותי קצה עורפי ומיפוי של כללי ניתוב באמצעות פרוטוקול gRPC במסוף Google Cloud . במשאבים האלה,Google Cloud המסוף הוא לקריאה בלבד.

  • פרוטוקול gRPC ללא proxy תומך בגילוי נקודות קצה, בניתוב, באיזון עומסים, בדיווח על עומסים ובהרבה תכונות מתקדמות לניהול תנועה.

    • למידע על גרסת gRPC המינימלית שנדרשת לתמיכה בחלק מהתכונות של ניהול תנועה מתקדם, אפשר לעיין במאמר גרסאות ושפות נתמכות של gRPC.

    • אם אתם משתמשים באפליקציות gRPC שזקוקות לתכונות מתקדמות לניהול תנועה שלא נתמכות, אתם יכולים להשתמש ב-DNS name resolver במקום ב-xDS resolver ולבצע פריסה באמצעות sidecar proxies שנתמכים ב-Cloud Service Mesh. בשרת ה-proxy של gRPC שמוגדר כיעד, מגדירים את השדה validateForProxyless לערך FALSE כדי שאפשר יהיה להגדיר תכונות שעדיין לא נתמכות על ידי gRPC, אבל זמינות ב-Cloud Service Mesh באמצעות שרתי proxy מסוג sidecar.

  • ב-gRPC ללא proxy יש תמיכה רק במדיניות של איזון עומסים מסוג round-robin ו-ring hash. אין תמיכה במדיניות אחרת של איזון עומסים.

    • ‫Cloud Service Mesh מספק ללקוח gRPC רשימה משוקללת של אזורים מקומיים – קבוצת מופעים אחת או קבוצת נקודות קצה ברשת (NEG) – לפי סדר עדיפות. ‫Cloud Service Mesh מחשב את הרשימה הזו על סמך האזור הזמין הקרוב ביותר, הקיבולת שלו ומצב האיזון של שירות לקצה העורפי.
    • עבור בקשה מסוימת, לקוח gRPC בוחר אזור אחד או יותר על סמך העדיפות והמשקל, ומבצע איזון עומסים מסוג round-robin או ring hash לשרתי הקצה באזורים האלה.
  • המעבר האוטומטי מאזור אחד (לוקאל) לאזור אחר מתחיל כשהקיבולת של האזור הנוכחי יורדת מתחת ל-50%. אי אפשר לשנות את הסף הזה.

  • במקרים מסוימים, פקודות ההגדרה שקשורות לשרת proxy של gRPC ליעד ולכלל העברה שמפנה לשרת proxy של gRPC ליעד עשויות להימשך עד דקה.

  • אין תמיכה בNEGs של קישוריות היברידית (NON_GCP_PRIVATE_IP_PORT NEGs) עם לקוחות gRPC ללא proxy.

מגבלות של מפת URL

התכונות הבאות לניהול תנועה של מפת URL נתמכות בשירותי gRPC ללא proxy.

תכונות שנתמכות ב-pathMatcher של hostRules:

pathMatcher
  name
  description
  defaultService
  defaultRouteAction
     weightedBackendServices
       backendService
       weight
    retryPolicy
       retryConditions
       numRetries
    faultInjectionPolicy
    maxStreamDuration
  pathRules
    service
    routeAction
      weightedBackendServices
         backendService
         weight
      retryPolicy
         retryConditions
         numRetries
      faultInjectionPolicy
      maxStreamDuration
    paths
  routeRules
    priority
    description
    matchRules
        prefixMatch
        fullPathMatch
        headerMatches
        metadataFilters
    service
    routeAction
      weightedBackendServices
         backendService
         weight
      retryPolicy
         retryConditions
         numRetries
      faultInjectionPolicy
      maxStreamDuration

ההגבלות הבאות בנוגע למפת URL חלות כשמשתמשים בשירותי gRPC בלי שרת Proxy:

  • אין תמיכה בתווים כלליים לחיפוש בכללי המארח ובכללי ברירת המחדל של מפת URL, כולל כלל המארח * שנוצר באופן מרומז במפת URL. המערכת מדלגת על רשומות כאלה כשמתבצעת התאמה למארח.

  • התכונות הבאות לא נתמכות:

    • queryParameterMatches ב-routeRules
    • headerAction,‏ urlRewrite,‏ requestMirrorPolicy,‏ corsPolicy ו-urlRedirect פעולות ניתוב
    • פעולת ניתוב timeout; במקום זאת, צריך להשתמש ב-maxStreamDuration במקום ב-timeout
    • perTryTimeout ב-retryPolicy
    • retryConditions ב-retryPolicy, אלא אם מתקיים תנאי אחד או יותר מתוך cancelled, ‏ deadline-exceeded, ‏ internal,‏ resource-exhausted ו-unavailable
    • שירותי gRPC ללא proxy לא משתמשים ב-defaultService,‏ defaultRouteAction,‏ defaultUrlRedirect ו-headerAction של מיפוי כתובות ה-URL. אם לא נמצא כלל מארח תואם כשלקוח gRPC בלי שרת Proxy מחפש שם שירות, Cloud Service Mesh מחזיר שגיאה בחיפוש השם במקום להשתמש בשירות ברירת המחדל או בפעולה של מפת URL.
    • headerAction ב-weightedBackendServices
  • בכללי התאמה של כותרות במיפוי כתובות URL, יש תמיכה רק במטא-נתונים מותאמים אישית שאינם בינאריים שצוינו על ידי המשתמש ובכותרת content-type. אי אפשר להשתמש בכותרות הבאות ברמת התעבורה בכללים להתאמת כותרות: :authority,‏ :method,‏ :path,‏ :scheme,‏ user-agent,‏ accept-encoding,‏ content-encoding,‏ grpc-accept-encoding,‏ grpc-encoding,‏ grpc-previous-rpc-attempts,‏ grpc-tags-bin,‏ grpc-timeout ו-grpc-trace-bin.

  • כשמעדכנים כלל מארח של מפת URL כדי לעבור משירות לקצה העורפי אחד לשירות לקצה העורפי אחר, יכול להיות שחלק מהתעבורה תאבד באופן זמני בזמן שההגדרה החדשה מועברת ללקוחות. כדי לעקוף את המגבלה הזו, צריך להגדיר פיצול תנועה עם שירותי קצה עורפיים משוקללים. אחרי שמגדירים פיצול תעבורה, מעבירים לאט את התעבורה משירות לקצה העורפי הישן לשירות לקצה העורפי החדש.

מגבלות על שרתי proxy של gRPC ביעד

כששרת proxy של gRPC ליעד מפנה למפת URL, אי אפשר להגדיר את התכונות הבאות של מפת URL. זה נכון גם אם משתמשים ב-proxy מסוג sidecar או בשירות gRPC בלי שרת Proxy, כי התכונות האלה שספציפיות לפרוטוקול HTTP לא חלות על פרוטוקול gRPC:

  • queryParameterMatches כלל התאמה
  • פעולה אחת (urlRewrite) במסלול
  • פעולה אחת (urlRedirect) במסלול
  • פעולה אחת (corsPolicy)

מגבלות של שירות לקצה העורפי

התכונות הבאות של שירותי קצה עורפי לא נתמכות בשירותי gRPC בלי שרת Proxy עם קובץ עזר חיצוני:

  • localityLbPolicy except LEAST_REQUEST (עם לקוחות Java בלבד),‏ ROUND_ROBIN ו-RING_HASH
  • sessionAffinity למעט HEADER_FIELD ו-NONE
  • consistentHash חוץ מהשדות httpHeaderName ו-minimumRingSize
  • affinityCookieTtlSec
  • timeoutSec; במקום זאת אפשר להשתמש ב-maxStreamDuration
  • circuitBreakers למעט השדה maxRequests

שימו לב: לקוח gRPC יחזיר NACK להגדרה מ-Cloud Service Mesh אם מוגדרים ערכים לא נתמכים. הדבר יגרום לדחיית ההגדרה של כל שירותי הקצה העורפי על ידי הלקוח, כי פרוטוקול xDS מחייב דחייה של כל המשאבים בתגובה נתונה, ולא מאפשר דחייה של משאב בודד בלבד מתוך התגובה. הפעולה הזו תגרום לכך שהערוץ של הלקוח יעבור למצב של שגיאה זמנית עד שההגדרה תתוקן. בגלל המגבלה הזו, לפני שמגדירים תכונה לשירות, צריך לוודא שכל הלקוחות תומכים בערך הנדרש. לדוגמה, אם משנים את המדיניות ROUND_ROBIN ל-RING_HASH, צריך לוודא שכל הלקוחות משודרגים לגרסה שתומכת ב-RING_HASH.

מגבלות של ניהול מתקדם של תעבורת נתונים

אי אפשר להגדיר חלק מהתכונות המתקדמות לניהול תעבורה בשירותי gRPC בלי שרת Proxy באמצעות Cloud Service Mesh. למידע על התכונות הנתמכות, תוכלו לקרוא את המאמרים הבאים:

מגבלות ב-Service Directory

  • ‫Service Directory ו-Cloud Service Mesh לא מבטיחים נגישות לרשת עבור לקוחות.
  • שירות לקצה עורפי יכול להפנות רק לאחד מהבאים:

    • קבוצת מופעי מכונה מנוהלים או קבוצת מופעי מכונה לא מנוהלים
    • קבוצת נקודות קצה ברשת
    • כבילות שירות
  • אפשר להשתמש בשירותים של Service Directory רק עם שירותי קצה עורפיים גלובליים עם load-balancing-scheme=INTERNAL_SELF_MANAGED.

  • אפשר למחוק שירות בספריית השירותים שאליו מתבצעת הפניה על ידי קישור שירות. אם שירות Service Directory הבסיסי שאליו מצורף שירות לקצה העורפי נמחק, אפליקציות שמשתמשות ב-Cloud Service Mesh לא יכולות לשלוח תעבורה לשירות הזה, ולכן הבקשות נכשלות. במאמר בנושא יכולת צפייה וניפוי באגים מפורטות שיטות מומלצות.

  • כשמקשרים שירות של Service Directory לשירות קצה עורפי, אי אפשר להגדיר בדיקת תקינות בשירות הקצה העורפי הזה.

המאמרים הבאים