ביצועים והרחבה (Performance & Scaling)
עימוד (Pagination)
ברירת מחדל:
SEARCH_PAGE_SIZE(ראו config.py).דפוס איטרטיבי: משיכת דפים עוקבים עד מיצוי, תוך שמירה על זיכרון נמוך.
לממשקי UI: השתמשו ב-
UI_PAGE_SIZEלתצוגות רשימה.
Projection
צמצמו I/O וזיכרון בעזרת
projectionבשאילתות Mongo.העדיפו להחזיר רק את השדות הנדרשים למסך/לשירות קורא.
שמרו על תאימות לאחור: אל תשנו payloads קיימים בלי לעדכן את הצרכנים.
דגשים
בחרו אינדקסים תואמי עימוד (ראו MongoDB Indexing Cookbook).
הימנעו מ-
COLLSCANבדפים מאוחרים; הסלמה ל-cursor/אינדקס משולב.מדדו באמצעות Prometheus/Jaeger כדי לאתר צווארי בקבוק.
כוונון Connection Pooling ו-Timeouts
MongoDB: - התחילו מ-
MONGODB_MAX_POOL_SIZE=100ו-MONGODB_MIN_POOL_SIZE=5. -MONGODB_WAIT_QUEUE_TIMEOUT_MS=5000כדי למנוע המתנות ארוכות. - עקבו אחריconnPoolStatsוטעינת שרת DB.Redis: -
REDIS_MAX_CONNECTIONS=50~200לפי עומס. השאירוhealth_check_interval=30(בקוד). -REDIS_CONNECT_TIMEOUT/REDIS_SOCKET_TIMEOUTשמרניים. ב-SAFE_MODEברירות מחדל נמוכות יותר.HTTP Async (aiohttp): -
AIOHTTP_POOL_LIMIT=50~100ו-AIOHTTP_LIMIT_PER_HOST=25. -AIOHTTP_TIMEOUT_TOTAL=12~15לייצוב תחת עומס.HTTP Sync (requests via http_sync): -
REQUESTS_POOL_CONNECTIONS=20ו-REQUESTS_POOL_MAXSIZE=100. -REQUESTS_RETRIES=2עםREQUESTS_RETRY_BACKOFF=0.2.
לוגי איטיות (מהיר לאיתור צווארי בקבוק)
WebApp Flask: הגדירו
SLOW_MS(למשל500) כדי לרשום בקשות איטיות כ-slow_requestעם path/method/status/ms.HTTP סינכרוני: הגדירו
HTTP_SLOW_MS(למשל400) כדי לרשוםslow_httpעם method/url/status/ms.MongoDB: הגדירו
DB_SLOW_MS(למשל20) כדי לרשוםslow_mongoדרך CommandListener.
טיפים: - התחילו בספים שמרניים בפרוד והורידו/העלו בהתאם לרעש/תועלת. - רגישו מידע: הלוגים אינם כוללים כותרות/סודות; מומלץ לא לכלול query params רגישים ב-URLים.
בדיקות מהירות אחרי שינוי ENV
בדקו לוגים ומדדים לאחר עדכון ערכי Pool/Timeout:
MongoDB: עלייה ב-
waitQueueTimeout,serverSelectionTimeout→ הגדילוMAX_POOL_SIZEאו בדקו אינדקסים.Redis:
connected_clients,latency. אם יש Timeouts – הקטינו עומס או הגדילו Pool.HTTP: יחס 5xx/429 ו-Latency. ודאו שימוש ב-Session משותף (aiohttp/requests) לשימור Keep‑Alive.
הנחיות לפי סביבה
Dev: ערכים נמוכים לשמירת משאבים מקומיים.
Staging: קרוב לפרוד עם Monitoring מודגש.
Production: התאם לערכי עומס אמיתי; הגדל בהדרגה וצפה במדדים.