ביצועים והרחבה (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: התאם לערכי עומס אמיתי; הגדל בהדרגה וצפה במדדים.