📜  通过负载均衡器路由请求

📅  最后修改于: 2021-04-16 05:58:43             🧑  作者: Mango

什么是负载均衡器?

如果存在多个服务器,则进入系统的传入请求需要定向到多个服务器之一。我们应该确保每个服务器都收到相等数量的请求。请求必须以统一的方式分布在所有服务器上。负责在服务器之间均匀分配这些传入请求的组件称为负载均衡器。负载平衡器充当来自用户的传入请求与系统中存在的多个服务器之间的一层。

通过负载平衡器路由请求

我们应该避免以下情况:单个服务器获取大多数请求,而其余请求则处于空闲状态。有各种负载平衡算法可确保在服务器之间均匀分配请求。

负载平衡器过程

散列方法以直接来自负载均衡器的请求

我们将讨论哈希方法,以将请求均匀地定向到多个服务器。

假设我们使用server_count作为系统中存在的服务器总数,并使用load_balancer在这些服务器之间分配请求。标识为request_id的请求进入系统。在到达目标服务器之前,它被定向到load_balancer,再从那里进一步定向到其目标服务器。

当请求到达负载均衡器时,散列方法将向我们提供将请求定向到的目标服务器。

讨论方法:

  • request_id :即将提供的请求ID
  • hash_func :均匀分布的哈希函数
  • hashed_id :哈希请求ID
  • server_count :服务器数
class GFG {
    public static int hash_func(int request_id)
    {
        // Computing the hash request id
        int hashed_id = 112;
        return hashed_id;
    }
  
    public static void route_request_to_server(int dest_server)
    {
        System.out.println("Routing request to the Server ID : " + dest_server);
    }
  
    public static int request_id = 23; // Incoming Request ID
    public static int server_count = 10; // Total Number of Servers
  
    public static void main(String args[])
    {
        int hashed_id = hash_func(request_id); // Hashing the incoming request id
        int dest_server = hashed_id % server_count; // Computing the destination server id
  
        route_request_to_server(dest_server);
    }
}

计算目标服务器地址:

如果server_count的值为10,即我们有十个服务器,它们的服务器ID为server_id_0,server_id_1,…………,server_id_9

假设request_id的值为23

当此请求到达负载均衡器时,哈希函数hash_func哈希输入请求ID的值。

  • hash_func(request_d) = hash_func(23)

假设在散列后,request_id被随机散列为特定值。

  • hashed_id = 112

为了使哈希ID在服务器数量的范围内,我们可以对哈希ID与服务器数量进行模运算。

  • dest_server = hashed_idserver_count
  • dest_server = 112%10
  • dest_server = 2

因此,我们可以将此请求路由到服务器server_id_2

这样,我们可以将所有到达负载均衡器的请求平均分配给所有服务器。但这是一种最佳方法吗?是的,它平均分配请求,但是如果我们需要增加服务器数量该怎么办。增加服务器将更改所有传入请求的目标服务器。如果我们将与该请求相关的缓存存储在其目标服务器中怎么办?现在,由于该请求不再路由到较早的服务器,因此我们的整个缓存可能会进入垃圾箱。思考 !