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 - שאלות עיצוב¶
ענו על השאלות הבאות:
-
אתם מתכננים מערכת שבה משתמשים מחוברים ו-session נשמרת בזיכרון השרת. איזה אלגוריתם load balancing תבחרו ולמה?
-
יש לכם שלושה שרתים: שניים עם 8 cores ואחד עם 2 cores. איזה אלגוריתם יתאים?
-
מה ההבדל בין load balancer מסוג Layer 4 ל-Layer 7? מתי תבחרו כל אחד?