לדלג לתוכן

4.2 איזון עומס תרגול

תרגיל 1 - אלגוריתמי Load Balancing

מימשו SmartLoadBalancer שתומך בכמה אלגוריתמים וניתן לעבור ביניהם:

class SmartLoadBalancer:
    def __init__(self, servers: list[str], algorithm: str = "round_robin"):
        ...

    def set_algorithm(self, algorithm: str):
        # תומך ב: "round_robin", "least_connections", "random"
        ...

    def get_server(self) -> str:
        ...

    def report_connection_start(self, server: str):
        ...

    def report_connection_end(self, server: str):
        ...

בדיקה:

lb = SmartLoadBalancer(["s1", "s2", "s3"])

# Round Robin
lb.set_algorithm("round_robin")
for _ in range(6):
    print(lb.get_server())
# צפוי: s1, s2, s3, s1, s2, s3

# Least Connections
lb.set_algorithm("least_connections")
lb.report_connection_start("s1")
lb.report_connection_start("s1")
lb.report_connection_start("s2")
print(lb.get_server())  # צפוי: s3 (0 חיבורים)

תרגיל 2 - Health Check Simulator

כתבו LoadBalancerWithHealthChecks שמבצע health checks כל 5 שניות:

  • מחזיק רשימת שרתים "בריאים" ו"חולים"
  • מתחיל background thread שבודק כל שרת
  • שרת "בריא" אם מחזיר {"status": "ok"} (מדמו עם dictionary שניתן לשנות)
  • שרת שנפל מוסר מהpull, שרת שחזר מתווסף חזרה
server_health = {
    "s1": True,
    "s2": True,
    "s3": False  # שרת זה "נפל"
}

# ה-LB צריך לזהות ששרת s3 לא בריא ולא לשלוח אליו בקשות

תרגיל 3 - שאלות עיצוב

ענו על השאלות הבאות:

  1. אתם מתכננים מערכת שבה משתמשים מחוברים ו-session נשמרת בזיכרון השרת. איזה אלגוריתם load balancing תבחרו ולמה?

  2. יש לכם שלושה שרתים: שניים עם 8 cores ואחד עם 2 cores. איזה אלגוריתם יתאים?

  3. מה ההבדל בין load balancer מסוג Layer 4 ל-Layer 7? מתי תבחרו כל אחד?