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/")));