Load Balancer

Allows to distribute incoming requests to multiple nodes, either by using a reverse proxy or by redirecting the client.

var workers = LoadBalancer.Create()
                          .Proxy("http://worker-1")
                          .Proxy("http://worker-2");

var cdn = LoadBalancer.Create()
                      .Redirect("https://cdn1.domain.com")
                      .Redirect("https://cdn2.domain.com");

var app = Layout.Create()
                .Add("api", workers)
                .Add("content", cdn);

If needed, the incoming request can get analyzed to determine the nodes with the highest priority that should handle the request (e.g. to prefer nodes near to the requesting client).

LoadBalancer.Create().Proxy(..., (r) => Priority.High);

Additionally, the builder accepts any IHandler instance as a node, allowing to extend the functionality where needed. For example, the following snippet would distribute the load to two different, local drives.

LoadBalancer.Create()
            .Add(Resources.From(ResourceTree.FromDirectory("/mnt/storage1/files/")))
            .Add(Resources.From(ResourceTree.FromDirectory("/mnt/storage2/files/")));

Share