בדף הזה מופיע מידע כללי על שילוב של תוספים עם מאזני עומסים של אפליקציות ב-Cloud Load Balancing ועם Media CDN.
התכונה הזו נמצאת בגרסת טרום-השקה ב-Media CDN.
תוספים נוצרים באמצעות פורמט WebAssembly (Wasm) ומשתמשים בממשקי Proxy-Wasm API.
Wasm הוא פורמט פתוח וסטנדרטי של הוראות בינאריות שמאפשר למארח לטעון ולהפעיל מודולים של Wasm עם קוד שסופק על ידי הלקוח. ל-Wasm יש מספר יתרונות בהרצת קוד של לקוחות, כולל ארגז חול לאבטחה, תמיכה במספר שפות, ניידות, תמיכה רחבה וגדלה בתעשייה וביצועים משופרים בהשוואה לאפשרויות אחרות שמבוססות על מכונה וירטואלית, כמו JavaScript.
Proxy-Wasm הוא פרויקט קוד פתוח שהתחיל ב-Google. הוא מגדיר ממשקי API שמאפשרים להתאים אישית את ההתנהגות של שרתי proxy ברשת על ידי הטמעה של קריאות חוזרות (callback) שיבוצעו במהלך עיבוד של בקשות ותגובות HTTP.
איך תוספים פועלים
אפשר להשתמש ב-Service Extensions עם מאזני עומסים של אפליקציות (ALB) ועם Media CDN באופן הבא:
מכינים את קוד הפלאגין באופן הבא:
יוצרים פלאגין שמכיל את קוד הפלאגין שהועלה.
מגדירים את הפלאגין בתוספים של Cloud Load Balancing או בתוספים של Media CDN.
משאבי פלאגין
בעזרת Service Extensions, תוכלו ליצור את משאבי המפתח הבאים שיעזרו לכם להוסיף קוד מותאם אישית בנתיב העיבוד:
Plugins (תוספים), שמכילים את הקוד המותאם אישית שרוצים לפרוס.
גרסאות של תוספים, שהן גרסאות של מודול ה-Wasm. אתם יכולים לציין איזו גרסה של מודול ה-Wasm שלכם תהיה הגרסה הראשית (הפעילה) שבה התוסף ישתמש.
גישה למאפיינים בתוספים
תוספי Wasm יכולים לגשת למאפיינים שהועברו באמצעות קריאת ה-ABI proxy_get_property, שהיא חלק מ-Proxy-Wasm ABI. שם הנכס שאפשר לאחזר תואם לשם המאפיין.
אפשר לגשת למאפיינים כייצוג של נתיב של שם המאפיין. לדוגמה, כדי לאחזר את request.host, אפשר להשתמש בייצוג נתיב כמו {"request", "host"}.
בדוגמה הבאה של Rust אפשר לראות איך ניגשים למאפיינים שהועברו בהטמעה של HttpContext:
use proxy_wasm::traits::{HttpContext, RootContext}; use proxy_wasm::types::Action; // ... inside your HttpContext implementation ... fn on_request_headers(&mut self, _num_headers: usize, _end_of_stream: bool) -> Action { if let Some(host) = self.get_property(vec!["request", "host"]) { // host is a Vec, convert to string let host_str = String::from_utf8(host).unwrap_or_default(); log::info!("Request host: {}", host_str); } if let Some(region) = self.get_property(vec!["source", "client_region"]) { let region_str = String::from_utf8(region).unwrap_or_default(); log::info!("Client region: {}", region_str); } Action::Continue }
מגבלות
בקטע הזה מפורטות כמה מגבלות שקשורות לתוספים.
הגבלות על משאבים
יש הגבלות חמורות על מספר המשאבים שתוספים יכולים להשתמש בהם:
כל פלאגין יכול להשתמש בעד מילישנייה אחת של vCPU מנורמל לכל הפעלה. מילישניית מעבד תלויה בפלטפורמה, אבל הפלטפורמה הנורמלית שווה בערך למעבד עם מהירות שעון של 4 GHz. קריאה לפונקציה היא שלב ביצוע שמתבצע בחיוב נפרד, ויכולה להיות כותרות של בקשה, גוף של בקשה, כותרות של תגובה או גוף של תגובה.
תוסף יכול להשתמש בעד 16 MiB של זיכרון לכל מופע של מכונה וירטואלית. מופע צריך להיות מסוגל לטפל בעד 1,000 בקשות בו-זמניות, כלומר תוסף יכול להשתמש בעד 16 KiB של זיכרון לכל סטרימינג. חשוב לזכור ששימוש הזיכרון הכולל כולל הקצאות של מצב גלובלי וערימה.
אפשר להשתמש בכלי לבדיקת פלאגינים כדי להשוות בין פלאגינים לפי מאפייני המעבד והזיכרון שלהם.
מגבלות על ממשקי API
תוספים יכולים להשתמש בקבוצת משנה של Proxy-Wasm ABI. תוספים לא תומכים בטיימרים, במדדים מותאמים אישית, בנתונים משותפים, בתורים משותפים או בשיחות יוצאות ברשת.
אין תמיכה באירועים של טריילרים ב-HTTP.
מגבלות על שינוי כותרות
הגודל המקסימלי של כל מוטציה (חלקים של כותרות או גוף) הוא 128 KiB.
תוספים לא יכולים לשנות את מצב העיבוד של הזרם
ext_proc.אין תמיכה במניפולציה של כותרות באמצעות תוספים עבור חלק מהכותרות. המעבד מתעלם מכל שינוי בכותרות האלה וממשיך לעבד את הבקשה.
אין תמיכה בפלאגינים של Media CDN בדברים הבאים:
- כותרות:
CDN-Loop,connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,te,trailers,transfer-encoding,upgradeאוX-user-IP. - כותרות שמתחילות ב:
x-forwarded,x-goog-,x-google,x-gfeאוx-amz-.
בתוספים של Cloud Load Balancing אין תמיכה באפשרויות הבאות:
כותרות:
connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,sec-user-ip,te,trailer,transfer-encoding,upgrade,x-dont-count-ads,x-dont-show-ads,x-gr,x-proxyuser-ipאוx-user-ip.בנוסף, עבור
LbTrafficExtension, הכותרות האלה לא נתמכות:method,authority,schemeאו כותרות של מארחים.כותרות שמתחילות ב:
sec-gfe-,sec-google-,x-amz-,x-forwarded-,x-gfe-,x-goog-,x-google-אוx-gproxy-.
- כותרות:
מגבלות בלקוחות ובשרתי קצה של HTTP/1.1
כשמגדירים את REQUEST_BODY או RESPONSE_BODY לתוסף, אם מאזן העומסים מקבל בקשה תואמת, הוא מסיר את הכותרת Content-Length מהתגובה ועובר לקידוד גוף מחולק למקטעים.