Implement a load balancer for web servers. It provide the following functionality:

  1. Add a new server to the cluster = > add(server_id) .
  2. Remove a bad server from the cluster = > remove(server_id) .
  3. 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)]

results matching ""

    No results matching ""