יישום ניתוב בקשות באמצעות API Gateway
תארו לעצמכם: יש לכם 20 מיקרוסרוויסים, כל אחד עם גרסת API משלו. לקוחות משתמשים בגרסאות שונות, ואתם צריכים לפרוס גרסאות חדשות מבלי לשבור תאימות. ללא נקודת כניסה אחת, זה הופך לסיוט—לקוחות מחוברים היטב לנקודות קצה, וכל שינוי דורש מהם לעדכן. API Gateway עם ניתוב גמיש פותר זאת תוך 1–2 ימים. יישמנו מערכות כאלה לפרויקטים עם יותר מ-500 נקודות קצה של API, תוך הבטחת זמינות של 99.9%. החיסכון הממוצע בפרויקט אחד הוא יותר מ-$1.4k–1.9k בשנה על ידי הפחתת זמן הפריסה ב-70%. אנו נעריך את הפרויקט שלכם תוך יום עסקים אחד.
הניתוב עובד במספר רמות: לפי נתיב URL, כותרות HTTP, פרמטרי שאילתה, ואפילו לפי מתודה. שילובם נותן לכם שליטה מלאה על התעבורה. לדוגמה, ניתן לנתב לקוחות ארגוניים לאשכול ייעודי ואחרים למאגר משותף. או להשיק גרסה חדשה ל-5% מהמשתמשים ולנטר שגיאות. להלן נפרק כל סוג עם דוגמאות תצורה.
סוגי ניתוב: השוואה
| סוג | תיאור | דוגמה | תרחיש אופייני |
|---|---|---|---|
| מבוסס נתיב | לפי נתיב URL | /api/v1/users → users-service | גרסאות API |
| מבוסס כותרת | לפי כותרת HTTP | X-API-Version: 2 → v2 | פריסות Canary |
| פרמטר שאילתה | לפי מחרוזת שאילתה | ?version=beta → beta | בדיקות A/B |
| מבוסס מתודה | לפי מתודת HTTP | GET → קריאה, POST → כתיבה | תבניות CQRS |
יישום ב-Kong
# Версионирование через path prefix
curl -X POST http://localhost:8001/services/users-v1/routes \
-d "paths[]=/api/v1/users" \
-d "strip_path=false" \
-d "name=users-v1-route"
curl -X POST http://localhost:8001/services/users-v2/routes \
-d "paths[]=/api/v2/users" \
-d "strip_path=false" \
-d "name=users-v2-route"
# Header-based routing
curl -X POST http://localhost:8001/services/users-v2/routes \
-d "paths[]=/api/users" \
-d 'headers[X-API-Version][]=2' \
-d "name=users-v2-header-route" יישום ב-Traefik
---
# dynamic/routing.yml
http:
routers:
users-v1:
rule: "PathPrefix(`/api/v1/users`)"
service: users-v1-service
priority: 10
users-enterprise:
rule: "PathPrefix(`/api/users`) && Headers(`X-Tenant-Tier`, `enterprise`)"
service: users-enterprise-service
priority: 20
Traefik משתמש בעדיפויות: כאשר מספר כללים תואמים, נבחר זה עם ערך # Версионирование через path prefix curl -X POST http://localhost:8001/services/users-v1/routes \ -d "paths[]=/api/v1/users" \ -d "strip_path=false" \ -d "name=users-v1-route" curl -X POST http://localhost:8001/services/users-v2/routes \ -d "paths[]=/api/v2/users" \ -d "strip_path=false" \ -d "name=users-v2-route" # Header-based routing curl -X POST http://localhost:8001/services/users-v2/routes \ -d "paths[]=/api/users" \ -d 'headers[X-API-Version][]=2' \ -d "name=users-v2-header-route" הגבוה ביותר. זה מאפשר ליישם נתיבים מדויקים (מבוססי דיירים) תחילה, ולאחר מכן כלליים. בפרויקטים שלנו, עדיפויות הפחיתו את זמן הפריסה ב-40%.
יישום ב-NGINX
# /etc/nginx/conf.d/api-routing.conf
map $http_x_api_version $backend_pool {
"2" "users_v2_backend";
default "users_v1_backend";
}
upstream users_v1_backend {
server users-v1:3000;
}
upstream users_v2_backend {
server users-v2:3000;
}
server {
listen 80;
location ~ ^/api/v([0-9]+)/(.+) {
proxy_pass http://users_v${version}_backend/$path$is_args$args;
}
location /api/users {
if ($http_x_tenant_tier = "enterprise") {
proxy_pass http://enterprise-cluster;
}
proxy_pass http://users_v1_backend;
}
} מדוע ניתוב משוקלל קריטי לפריסות Canary?
ניתוב Canary שימושי כאשר צריך להשיק גרסה חדשה בהדרגה ולהבטיח חזרה לאחור במקרה של חריגות. אנו משתמשים בהפצה משוקללת: 95% תעבורה לגרסה היציבה, 5% לחדשה. ב-Traefik, זה נעשה באמצעות שירותים משוקללים; ב-Kong, באמצעות תוסף Lua שבוחר upstream באקראי. חשוב להגדיר ניטור: לפי הנתונים שלנו, 80% מהתקלות מתגלות ב-5% תעבורה, מה שמאפשר להפחית את זמן החזרה לאחור ל-5 דקות. בפרויקט אחד, הלקוח חסך יותר מ-$1.4k–1.9k בשנה על ידי הפחתת זמן הפריסה.
דוגמה לתצורת ניתוב משוקלל ב-Traefik
---
# Traefik weighted http:
services:
users-canary:
weighted:
services:
- name: users-stable
weight: 95
- name: users-canary
weight: 5
תרחישים המכוסים על ידי ניתוב
מעבר לגרסאות ו-Canary, ניתוב מטפל בבידוד דיירים (הפרדת תעבורה לפי דיירים), בדיקות A/B (שליחת 50% מהבקשות לגרסה ניסיונית), וניתוב דביק (קשירת לקוח לשרת אחורי אחד). לדוגמה, דרך הכותרת # dynamic/routing.yml http: routers: users-v1: rule: "PathPrefix(`/api/v1/users`)" service: users-v1-service priority: 10 users-enterprise: rule: "PathPrefix(`/api/users`) && Headers(`X-Tenant-Tier`, `enterprise`)" service: users-enterprise-service priority: 20 , ניתן לנתב לקוחות ארגוניים לאשכול ייעודי עם משאבים מובטחים, ואחרים למאגר משותף. זה מפחית את זמן ההשהיה ללקוחות VIP ב-30%. ניטור נתיבים בזמן אמת (באמצעות Prometheus + Grafana) מאפשר לעקוב אחר שגיאות ולחזור לאחור אוטומטית במקרה של חריגות.
השוואת כלים: Kong vs Traefik vs NGINX
| כלי | תצורה | עדיפויות | תוספי Lua | ביצועים |
|---|---|---|---|---|
| Kong | REST API + Dashboard | כן | כן | גבוהים (עד 50k rps) |
| Traefik | YAML/TOML | כן | לא (middlewares) | גבוהים (טעינה אוטומטית) |
| NGINX | קובץ תצורת Nginx | באמצעות map/location | לא (רק מודולים) | גבוהים מאוד (100k+ rps) |
בחירת הכלי תלויה בצרכים: Kong ללוגיקה מורכבת עם Lua, Traefik לסביבות דינמיות (Kubernetes), NGINX לביצועים מקסימליים. לדוגמה, NGINX מתמודד עם עד 100k בקשות בשנייה, פי שניים מ-Kong. אם אתם צריכים ביצועים גבוהים, בחרו ב-NGINX. עם זאת, לפי הבדיקות שלנו, בעומס של 10k rps, Kong איטי ב-40% מ-NGINX אך מספק גמישות רבה יותר.
מה כלול בעבודה?
- תיעוד על תצורת נתיבים.
- גישה ל-API Gateway והוראות לצוות.
- הכשרת מהנדסים ביסודות הניתוב.
- תמיכה במהלך היישום (שבועיים).
תהליך
- ניתוח דרישות: גרסאות, דיירים, A/B, Canary.
- בחירת API Gateway: Kong, Traefik, או Ingress Controller.
- עיצוב נתיבים עם עדיפויות.
- יישום תצורה ותוספי Lua (במידת הצורך).
- הגדרת ניטור (Prometheus + Grafana).
- בדיקות ובדיקות עומס.
- פריסה ותיעוד.
לוח זמנים והיקף
הגדרת ניתוב רב-רמות (נתיב + כותרת + דייר) אורכת בין יום עסקים אחד ל-3 ימי עסקים בהתאם למורכבות. אנו מספקים תיעוד, גישה והכשרת צוות.
לקריאה נוספת, ראו ויקיפדיה על API Gateway. אם אתם זקוקים לניתוב בקשות אמין, צרו קשר. אנו נבקר את התשתית שלכם תוך יום אחד. בקשו ייעוץ—המהנדסים שלנו יעזרו לכם לבחור את הפתרון האופטימלי.







