<div dir="ltr"><div><div>Murano has several applications which support scaling via load-balancing, this applications (Internet Information Services Web Farm, <a href="http://ASP.NET" target="_blank">ASP.NET</a> Application Web Farm) currently are based on <a href="http://launchpad.net/heat" target="_blank">Heat</a>, particularly on resource called <a href="http://docs.openstack.org/developer/heat/template_guide/cfn.html#AWS::ElasticLoadBalancing::LoadBalancer" target="_blank">AWS::ElasticLoadBalancing::LoadBalancer</a>, that currently <a href="http://docs.openstack.org/developer/heat/template_guide/cfn.html#AWS::ElasticLoadBalancing::LoadBalancer-props" target="_blank">does not support</a> specification of any network related parameters.</div>


<div><br></div><div>Inability to specify network related params leads to incorrect behavior during deployment in tenants with advanced Quantum deployment configuration, like Per-tenant Routers with Private Networks and this makes deployment of our <i>* Web Farm</i> applications to fail.</div>


</div><div><br></div><div>We need to resolve issues with our <i>* Web Farm</i>, and make this applications to be reference implementation for elastic applications in Murano. <br></div><div><br></div><div>This issue may be resolved in three ways: via extending configuration capabilities of <a href="http://docs.openstack.org/developer/heat/template_guide/cfn.html#AWS::ElasticLoadBalancing::LoadBalancer" target="_blank">AWS::ElasticLoadBalancing::LoadBalancer</a>, using another implementation of load balancing in Heat - <a href="http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::LoadBalancer" target="_blank">OS::Neutron::LoadBalancer</a> or via implementing own load balancing application (that going to balance other apllications), for example based on <a href="http://haproxy.1wt.eu/" target="_blank">HAProxy</a> (as all previous ones). </div>


<div><span style="color:rgb(51,51,51);font-family:arial,sans-serif;font-size:13px;line-height:20px"><br></span></div><div><span style="color:rgb(51,51,51);font-family:arial,sans-serif;font-size:13px;line-height:20px">Please, respond with your thoughts on the question: "<i>Which implementation we should use to resolve issue with our Web Farm applications and why?</i>". Below you can find more details about each of the options.</span></div>


<div><br></div><div><b>AWS::ElasticLoadBalancing::LoadBalancer</b></div><div><br></div><div>AWS::ElasticLoadBalancing::LoadBalancer is Amazon Cloud Formation compatible resource that implements load balancer via <a href="https://github.com/openstack/heat/blob/master/heat/engine/resources/loadbalancer.py#L24" target="_blank">hard-coded nested stack</a> that deploys and configures HAProxy. This resource requires specific image with <a href="https://github.com/openstack/heat-cfntools" target="_blank">CFN Tools</a> and specific name <i>F17-x86_64-cfntools</i> available in Glance. It's look like we miss implementation of only one property in this resource - Subnets.<br>


</div><div><br></div><div><b>OS::Neutron::LoadBalancer</b><br></div><div><br></div><div><div><a href="http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::LoadBalancer" target="_blank">OS::Neutron::LoadBalancer</a> is another Heat resource that implements load balancer. This resource is based on Load Balancer as a Service feature in <a href="https://wiki.openstack.org/wiki/Neutron/LBaaS" target="_blank">Neutron</a>. OS::Neutron::LoadBalancer is much more configurable and sophisticated but underlying implementation makes usage of this resource quite complex.</div>


<div>LBaaS is a set of services installed and configured as a part of Neutron. Fuel does not support LBaaS; Devstack has support for LBaaS, but LBaaS not installed by default with Neutron. </div></div><div><br></div><div>


<b>Own, Based on HAProxy</b><br></div><div><br></div><div><div>We may implement load-balancer as a regular application in Murano using <a href="http://haproxy.1wt.eu/" target="_blank">HAProxy</a>. This service may look like our Active Directory application with almost same user-expirience. User may create load-balancer inside of the environment and join any web-application (with any number of instances) directly to load-balancer.</div>


<div>Load-balancer may be also implemented on Conductor workflows level, this implementation strategy not going to change user-experience (in fact we changing only underlying implementation details for our * Web Farm applications, without introducing new ones).</div>


</div><div><br></div>-- <br><div dir="ltr"><div>Serg Melikyan, Senior Software Engineer at Mirantis, Inc.<br></div><div><a href="http://mirantis.com/" target="_blank">http://mirantis.com</a> | <a href="mailto:smelikyan@mirantis.com" target="_blank">smelikyan@mirantis.com</a><br>


<div></div></div></div>
</div>