Implement a load balancer for web servers. It provide the following functionality:
- Add a new server to the cluster =
>
add(server_id)
. - Remove a bad server from the cluster =
>
remove(server_id)
. - Pick a server in the cluster randomly with equal probability =
>
pick()
.
Have you met this question in a real interview?
Yes
Example
At beginning, the cluster is empty =>{}
.
add(1)
add(2)
add(3)
pick()
>
>
1 // the return value is random, it can be either 1, 2, or 3.
pick()
>
>
2
pick()
>
>
1
pick()
>
>
3
remove(1)
pick()
>
>
2
pick()
>
>
3
pick()
>
>
3
import random
class LoadBalancer:
def __init__(self):
# do intialization if necessary
self.servers = []
self.ser_index = {}
"""
@param: server_id: add a new server to the cluster
@return: nothing
"""
def add(self, server_id):
# write your code here
self.servers.append(server_id)
self.ser_index[server_id] = len(self.servers) - 1
"""
@param: server_id: server_id remove a bad server from the cluster
@return: nothing
"""
def remove(self, server_id):
# write your code here
swap_ser = self.servers[-1]
rem_ser_index = self.ser_index[server_id]
self.servers[rem_ser_index] = self.servers[-1]
self.servers.pop()
self.ser_index[swap_ser] = rem_ser_index
del self.ser_index[server_id]
"""
@return: pick a server in the cluster randomly with equal probability
"""
def pick(self):
# write your code here
return self.servers[random.randint(0, len(self.servers) - 1)]