מגבלות של 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_PORTNEGs) עם לקוחות 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ב-routeRulesheaderAction,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 עם קובץ עזר חיצוני:
-
localityLbPolicyexceptLEAST_REQUEST(עם לקוחות Java בלבד),ROUND_ROBINו-RING_HASH sessionAffinityלמעטHEADER_FIELDו-NONEconsistentHashחוץ מהשדותhttpHeaderNameו-minimumRingSizeaffinityCookieTtlSec-
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 לשירות קצה עורפי, אי אפשר להגדיר בדיקת תקינות בשירות הקצה העורפי הזה.
המאמרים הבאים
- כדי לקרוא על המגבלות שחלות על Cloud Service Mesh, כולל מגבלות מתקדמות של ניהול תנועה, אפשר לעיין במאמר בנושא מגבלות של Cloud Service Mesh.
- כדי למצוא תרחישי שימוש ודפוסי ארכיטקטורה לשירותי gRPC בלי שרת Proxy, אפשר לעיין בסקירה הכללית על שירותי gRPC בלי שרת Proxy.