TASK
Implementation
Implement least-connections load balancing:
- Track active connection count for each server
- When a request starts, increment count for chosen server
- When a request completes, decrement count
- Route new requests to server with fewest connections
This adapts to varying request durations automatically.
Sample Test Cases
Balance by connectionsTimeout: 5000ms
Input
{"src":"c0","dest":"lb","body":{"type":"init","msg_id":1,"node_id":"lb","node_ids":["lb","s1","s2","s3"]}}
{"src":"c1","dest":"lb","body":{"type":"set_connections","msg_id":2,"server":"s1","count":2}}
{"src":"c2","dest":"lb","body":{"type":"set_connections","msg_id":3,"server":"s2","count":5}}
{"src":"c3","dest":"lb","body":{"type":"set_connections","msg_id":4,"server":"s3","count":1}}
{"src":"c4","dest":"lb","body":{"type":"route_request","msg_id":5}}
Expected Output
{"src": "lb", "dest": "c0", "body": {"type": "init_ok", "in_reply_to": 1, "msg_id": 0}}
{"src": "lb", "dest": "c1", "body": {"type": "set_connections_ok", "in_reply_to": 2, "msg_id": 1}}
{"src": "lb", "dest": "c2", "body": {"type": "set_connections_ok", "in_reply_to": 3, "msg_id": 2}}
{"src": "lb", "dest": "c3", "body": {"type": "set_connections_ok", "in_reply_to": 4, "msg_id": 3}}
{"src": "lb", "dest": "c4", "body": {"type": "route_request_ok", "server": "s1", "in_reply_to": 5, "msg_id": 4}}
Hints
Hint 1▾
Track active connections per server
Hint 2▾
Increment on request, decrement on complete
Hint 3▾
Select server with fewest connections
OVERVIEW
Theoretical Hub
Least Connections
Round robin fails when requests have varying durations - slow requests can pile up on one server. Least connections routes to the server with fewest active requests, naturally balancing load.
Weighted Least Connections
Combine weights with connection counts: select server with lowest (connections / weight) ratio. This accounts for both current load and server capacity.
Key Concepts
least connectionsdynamic loadconnection tracking
main.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python3
import sys
import json
import threading
class LeastConnectionsLB:
def __init__(self, servers):
self.servers = servers
self.connections = {s: 0 for s in servers}
self.lock = threading.Lock()
def _select_server(self):
# TODO: Find server with least connections
pass
def acquire(self):
# TODO: Select server, increment connections
pass
def release(self, server):
# TODO: Decrement connection count
pass
def handle_request(self, request):
server = self.acquire()
try:
return server.handle(request)
finally:
self.release(server)
if __name__ == "__main__":
pass