DC/OS Apps with High-Performance Edge Load-Balancing | D2iQ

Nov 16, 2017

Seth Mason


4 min read


When properly implemented, container technology, distributed computing, and microservices architectures promise improved scalability and resiliency over monolithic applications. Yet, it's difficult to expose dynamic services built using these technologies to the outside world. Securely exposing dynamic applications is difficult because their location is always changing due to activities such as being updated or scaling up or down. Understanding where applications reside, controlling access to them, and isolating them and their associated traffic from each other so that that they can be exposed non-stop to the outside world is no small feat.

In DC/OS Enterprise v1.10, Mesosphere introduced a new load-balancer, Edge-LB, that addresses the challenges of exposing containerized applications to the outside world. This Layer 4/7 load-balancer has easy-to-use yet powerful CLI and API interfaces that provide deep configuration options to expose applications for high performance and high availability environments.

Prior to the introduction of Edge-LB, DC/OS customers would leverage the widely-implemented Marathon-based load-balancer, Marathon-LB. While Marathon-LB, is a solid choice for microservices applications running on Marathon, the rise in popularity of Mesos Frameworks meant that a similarly architected load balancer that was also Mesos scheduler-aware was needed.  

Edge-LB enables DC/OS operators and users to build applications and frameworks that make full use of the DC/OS platform. Customers are now able to expose their own 12 factor applications that include their own custom frameworks using the customizable Edge-LB.

Edge-LB is a huge leap forward, so let's take a look at the improvements to scalability, resiliency, high-availability, performance, and ease of use.

Improved Scalability and Resiliency

Dynamic applications can be built and orchestrated using containers to be highly scalable and resilient. Edge-LB's templates make it possible to update, scale and automatically recover applications without disrupting traffic to and from the outside world.  

Edge-LB templates also contribute to high availability by automatically configuring the load balancer as applications scale up and down using DC/OS application-aware scheduling.  When an application scales to consume more resources, such as expanding to additional tasks and nodes, Edge-LB can automatically react and automatically include the new application tasks into the backend of the load balancer pool. The combination of application-aware scheduling and Edge-LB accomplishes this without user intervention, allowing DC/OS to provide a high availability elastically scaling platform for applications.

High-Availability: Preventing the 2am Page

One of the primary drivers of the adoption of container technology is the promise of high availability, yet simply adopting containers does little to guarantee achieving high availability. There are many factors in building and maintaining high availability applications, ranging from building hot standbys to writing bug-free code to preventing crashes caused by user-initiated impacts like misconfiguration. With a multi-user system like DC/OS, user-created resource conflicts could be devastating, yet we can prevent them completely using Edge-LB.

For example, Marathon-LB's reliance on app labels made it possible for two different users to specify the same labels, but for different applications. As a result, you could have two completely different applications using the same labels and therefore leveraging the same Marathon-LB configuration, resulting in unintended configuration collision.

Edge-LB removes this potential for misconfiguration. Task names are used instead of labels as the primary mechanism for determining what to load balance. The user is required to define the tasks that they intend to load-balance. This explicit definition ensures uniqueness, since Marathon and other frameworks enforce unique task names.

Edge-LB further reduces the chances of misconfiguration by validating the configuration prior to each deployment, compared to Marathon LB's validation at installation. This configuration validation is built upon Edge-LB's ability to perform configuration reloads without any disruption.

If an instance within an Edge-LB pool does have an issue, for example, the server it is on has a hardware fault, Edge-LB can automatically spin up another Edge-LB instance, healing the pool and continuing to satisfy requests, all without user intervention.

High-Performance: Isolation and Integration

One of the strengths of DC/OS is the tight integration between various components, which allows them to coordinate with each other in order to provide the best end-user experience possible.  Edge-LB continues this trend with deep integration into the DC/OS platform. When an application is in production, we often have to scale it up and down as demand dictates.  The DevOps team is already monitoring the usage of the application itself and DC/OS's Mesos core is tracking the resource allocation.  

By deploying dedicated Edge-LB pools per application or framework, you can not only ensure that failure domains remain restricted to a single load-balancer instance/application, but that performance is preserved because applications that require increasing resources remain independent from other applications.

But Wait, There's More

Edge-LB is built as a DC/OS framework, which can leverage the same DC/OS SDK that all of your production data services are using. This means that you get the same rock solid reliability and platform integration that your mission critical databases and analytics applications are using. With the DC/OS SDK as its foundation, Edge-LB can seamlessly incorporate new features as DC/OS expands.

Leveraging DC/OS's support for CNI (Container Network Interface), Edge-LB builds upon this industry standard model to enable the load balancer instances to reside on CNI-based networks and be further decoupled from the transport layer underneath.

With the introduction of Edge-LB, we've provided an integrated load balancing solution for your stateful and stateless workloads. Its platform awareness, configurability and scalability will simplify your development and allow you to sleep better at night. Download and try it out today.

Ready to get started?