You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stratos.apache.org by Swapnil Patil <sw...@gmail.com> on 2015/04/20 18:27:02 UTC

Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Hi,

I have proposed a solution for the project on $subject where I am using an
HA Proxy between incoming request and Google Compute Engine (GCE) load
balancing components.

I have been advised to provide more description regarding why I am using HA
Proxy in my proposed solution.

Please find below the reason for the same.

Stratos needs to route traffic based on the hostname field of the incoming
request. I have proposed to use Network Load Balancing of Google Compute
Engine (GCE) which does not provide any central component that makes
routing decisions based on the hostname field of the request.

GCE network load balancing has following concepts
1. Target pool - a set of instances. In Stratos, a cluster can be treated
as target pool.
2. Forwarding rule - A forwarding rule has an external IP, a port range, a
target pool. Whenever a request is made to this external IP with port
numbers specified in the port range, the request is routed to the specified
target pool.

As GCE network load balancing does not have any mechanism to route traffic
based on hostname, I proposed to use HA Proxy between incoming requests and
GCE load balancing components.

If we use HA Proxy, we can add a rule saying which forwarding rule should
be used for a particular combination of hostname, protocol and port. So
forwarding rules of GCE load balancing will act as backend instances of HA
Proxy.

So overall flow would be as follows
1. HA Proxy decides which backend (forwarding rule) to use based on the
incoming request.
2. Request is delegated to the GCE forwarding rule associated with that
backend.
3. Forwarding rule of GCE routes the incoming request to the target pool
which is specified in the rule.
4. Target pool routes the incoming request to a particular instance in the
pool i.e. an instance in the cluster.

This is what I thought would be an appropriate solution. I would appreciate
if anybody has any thoughts on this.

Thanks and Regards,
Swapnil Patil
IIIT Hyderabad

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Swapnil Patil <sw...@gmail.com>.
Hi Imesh,

Thank you!

But it seems I still don't have edit rights. Could you please check it once?

Thanks and Regards,
Swapnil

On Wed, Apr 22, 2015 at 11:44 PM, Imesh Gunaratne <im...@apache.org> wrote:

> Hi Swapnil,
>
> I have given you post edit rights to the proposal, you could try to edit
> it in Melange.
>
> Thanks
>
> On Wed, Apr 22, 2015 at 6:47 PM, Swapnil Patil <sw...@gmail.com>
> wrote:
>
>> Hi Gayan,
>>
>> OK. I will put a comment.
>>
>> Thank you for your time.
>>
>> Regards,
>> Swapnil
>>
>> On Wed, Apr 22, 2015 at 6:28 PM, Gayan Gunarathne <ga...@wso2.com>
>> wrote:
>>
>>> Hi Swapnil,
>>>
>>> I guess now you can't update the proposal in the GSoC site. But you can
>>> put this approach as a comment in that proposal.
>>>
>>> Thanks,
>>> Gayan
>>>
>>> On Wed, Apr 22, 2015 at 6:15 PM, Swapnil Patil <sw...@gmail.com>
>>> wrote:
>>>
>>>> Hi Gayan,
>>>>
>>>> Thank you for your opinion.
>>>>
>>>> Could you please tell me what should be my next step? Do I need to
>>>> update my proposal on GSoC site?
>>>>
>>>> Thanks and Regards,
>>>> Swapnil
>>>>
>>>> On Wed, Apr 22, 2015 at 5:04 PM, Gayan Gunarathne <ga...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi Swapnil,
>>>>>
>>>>> +1 for the approach.Yeah you can create a forwarding rule with the
>>>>> external IP and associate with the target pool.
>>>>>
>>>>> Thanks,
>>>>> Gayan
>>>>>
>>>>> On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <swapnil.rp15@gmail.com
>>>>> > wrote:
>>>>>
>>>>>> Hi Gayan,
>>>>>>
>>>>>> Thank you for your thoughts.
>>>>>>
>>>>>> Okay. So if no HA Proxy to be used, my approach would be as follows.
>>>>>>
>>>>>> Whenever topology change event is received this new load balancer
>>>>>> extension will do following things.
>>>>>>
>>>>>> for each service
>>>>>> for each cluster of the service
>>>>>> if a target pool is not created for this cluster
>>>>>> then
>>>>>> create a target pool
>>>>>> add all members of the cluster to target pool
>>>>>> add ID of target pool to the map say 'clusterTargetPool'
>>>>>> else
>>>>>> get ID of the target pool using map 'clusterTargetPool'
>>>>>> add/remove instances from target pool as necessary to match with
>>>>>> cluster members
>>>>>>
>>>>>> create a forwarding rule with an external IP and associate the above
>>>>>> target pool to this forwarding rule
>>>>>>
>>>>>> for each hostname in this cluster
>>>>>> add DNS entry or /etc/hosts entry to use the exterrnal IP of
>>>>>> forwarding rule for this hostname
>>>>>> done
>>>>>>
>>>>>> add this forwarding rule to a map say 'clusterForwardingRules'
>>>>>> done
>>>>>> done
>>>>>>
>>>>>> Remove unnecessary target pools and forwarding rules.
>>>>>>
>>>>>> Could you please provide feedback on this approach?
>>>>>>
>>>>>> Thanks and Regards,
>>>>>> Swapnil
>>>>>>
>>>>>> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Swapnil,
>>>>>>>
>>>>>>> IMO also we don't need HAProxy to do the port switching. As we are
>>>>>>> using target pool for each cluster and you can assign the IP address to a
>>>>>>> forwarding rule which is associate with the thread pool. Whenever you
>>>>>>> access the service attach with the IP, it will forward the traffic into one
>>>>>>> of these instances.
>>>>>>> But you can refer the extension API of the HAProxy load balancer
>>>>>>> [1].That would help you to fetch the topology information in real time and
>>>>>>> update the configuration accordingly.
>>>>>>>
>>>>>>> As Imesh mention additionally we can map external IP address to a
>>>>>>> hostname by using the /etc/host or DNS entry.
>>>>>>>
>>>>>>> [1]
>>>>>>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Gayan
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <
>>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Imesh,
>>>>>>>>
>>>>>>>> Thank you for your input.
>>>>>>>>
>>>>>>>> Yes, I agree that we should create a target pool for each cluster.
>>>>>>>> But as far as I know, we can't assign IP address to a target pool. We can
>>>>>>>> assign IP address to a forwarding rule and a target pool will be associated
>>>>>>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>>>>>>> the port number.
>>>>>>>>
>>>>>>>> Yes, we could map external IP of forwarding rule to a hostname by
>>>>>>>> using DNS entry or by using /etc/hosts.
>>>>>>>>
>>>>>>>> But I have one doubt, each service has a port and proxy port. Now I
>>>>>>>> assume that 'proxy port' is used while contacting a load balancer and load
>>>>>>>> balancer will send the request on port value 'port' of an instance. Please
>>>>>>>> correct me if I am wrong here.
>>>>>>>>
>>>>>>>> If this port-proxy port scenario I have assumed is correct, then I
>>>>>>>> am not sure which component will do this switching of port value of
>>>>>>>> requests if we don't use HA Proxy.
>>>>>>>>
>>>>>>>> Could you please let me know if I have misinterpreted anything or
>>>>>>>> this port switching can be done even if we don't use HA Proxy?
>>>>>>>>
>>>>>>>> Thanks and Regards,
>>>>>>>> Swapnil Patil
>>>>>>>> IIIT Hyderabad
>>>>>>>>
>>>>>>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <imesh@apache.org
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Hi Swapnil,
>>>>>>>>>
>>>>>>>>> Thanks for your response on this. IMO we could achieve this
>>>>>>>>> functionality without having to use a haproxy instance.
>>>>>>>>>
>>>>>>>>> The concept we have here is to group all the members of a cluster
>>>>>>>>> and use a hostname to load balance incoming requests among them. With GCE
>>>>>>>>> what we can do is to create a target pool for each cluster and either have
>>>>>>>>> a dedicated external IP address for each target pool or use different ports
>>>>>>>>> on the same external IP address to access them.
>>>>>>>>>
>>>>>>>>> As an additional step we could map the external IP address to a
>>>>>>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>>
>>>>>>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <
>>>>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I have proposed a solution for the project on $subject where I am
>>>>>>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>>>>>>> load balancing components.
>>>>>>>>>>
>>>>>>>>>> I have been advised to provide more description regarding why I
>>>>>>>>>> am using HA Proxy in my proposed solution.
>>>>>>>>>>
>>>>>>>>>> Please find below the reason for the same.
>>>>>>>>>>
>>>>>>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>>>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>>>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>>>>>>> makes routing decisions based on the hostname field of the request.
>>>>>>>>>>
>>>>>>>>>> GCE network load balancing has following concepts
>>>>>>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>>>>>>> treated as target pool.
>>>>>>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>>>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>>>>>>> port numbers specified in the port range, the request is routed to the
>>>>>>>>>> specified target pool.
>>>>>>>>>>
>>>>>>>>>> As GCE network load balancing does not have any mechanism to
>>>>>>>>>> route traffic based on hostname, I proposed to use HA Proxy between
>>>>>>>>>> incoming requests and GCE load balancing components.
>>>>>>>>>>
>>>>>>>>>> If we use HA Proxy, we can add a rule saying which forwarding
>>>>>>>>>> rule should be used for a particular combination of hostname, protocol and
>>>>>>>>>> port. So forwarding rules of GCE load balancing will act as backend
>>>>>>>>>> instances of HA Proxy.
>>>>>>>>>>
>>>>>>>>>> So overall flow would be as follows
>>>>>>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based
>>>>>>>>>> on the incoming request.
>>>>>>>>>> 2. Request is delegated to the GCE forwarding rule associated
>>>>>>>>>> with that backend.
>>>>>>>>>> 3. Forwarding rule of GCE routes the incoming request to the
>>>>>>>>>> target pool which is specified in the rule.
>>>>>>>>>> 4. Target pool routes the incoming request to a particular
>>>>>>>>>> instance in the pool i.e. an instance in the cluster.
>>>>>>>>>>
>>>>>>>>>> This is what I thought would be an appropriate solution. I would
>>>>>>>>>> appreciate if anybody has any thoughts on this.
>>>>>>>>>>
>>>>>>>>>> Thanks and Regards,
>>>>>>>>>> Swapnil Patil
>>>>>>>>>> IIIT Hyderabad
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Imesh Gunaratne
>>>>>>>>>
>>>>>>>>> Technical Lead, WSO2
>>>>>>>>> Committer & PMC Member, Apache Stratos
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> Gayan Gunarathne
>>>>>>> Technical Lead
>>>>>>> WSO2 Inc. (http://wso2.com)
>>>>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Gayan Gunarathne
>>>>> Technical Lead
>>>>> WSO2 Inc. (http://wso2.com)
>>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> Gayan Gunarathne
>>> Technical Lead
>>> WSO2 Inc. (http://wso2.com)
>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>
>>>
>>
>>
>
>
> --
> Imesh Gunaratne
>
> Technical Lead, WSO2
> Committer & PMC Member, Apache Stratos
>

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Imesh Gunaratne <im...@apache.org>.
Hi Swapnil,

I have given you post edit rights to the proposal, you could try to edit it
in Melange.

Thanks

On Wed, Apr 22, 2015 at 6:47 PM, Swapnil Patil <sw...@gmail.com>
wrote:

> Hi Gayan,
>
> OK. I will put a comment.
>
> Thank you for your time.
>
> Regards,
> Swapnil
>
> On Wed, Apr 22, 2015 at 6:28 PM, Gayan Gunarathne <ga...@wso2.com> wrote:
>
>> Hi Swapnil,
>>
>> I guess now you can't update the proposal in the GSoC site. But you can
>> put this approach as a comment in that proposal.
>>
>> Thanks,
>> Gayan
>>
>> On Wed, Apr 22, 2015 at 6:15 PM, Swapnil Patil <sw...@gmail.com>
>> wrote:
>>
>>> Hi Gayan,
>>>
>>> Thank you for your opinion.
>>>
>>> Could you please tell me what should be my next step? Do I need to
>>> update my proposal on GSoC site?
>>>
>>> Thanks and Regards,
>>> Swapnil
>>>
>>> On Wed, Apr 22, 2015 at 5:04 PM, Gayan Gunarathne <ga...@wso2.com>
>>> wrote:
>>>
>>>> Hi Swapnil,
>>>>
>>>> +1 for the approach.Yeah you can create a forwarding rule with the
>>>> external IP and associate with the target pool.
>>>>
>>>> Thanks,
>>>> Gayan
>>>>
>>>> On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <sw...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Gayan,
>>>>>
>>>>> Thank you for your thoughts.
>>>>>
>>>>> Okay. So if no HA Proxy to be used, my approach would be as follows.
>>>>>
>>>>> Whenever topology change event is received this new load balancer
>>>>> extension will do following things.
>>>>>
>>>>> for each service
>>>>> for each cluster of the service
>>>>> if a target pool is not created for this cluster
>>>>> then
>>>>> create a target pool
>>>>> add all members of the cluster to target pool
>>>>> add ID of target pool to the map say 'clusterTargetPool'
>>>>> else
>>>>> get ID of the target pool using map 'clusterTargetPool'
>>>>> add/remove instances from target pool as necessary to match with
>>>>> cluster members
>>>>>
>>>>> create a forwarding rule with an external IP and associate the above
>>>>> target pool to this forwarding rule
>>>>>
>>>>> for each hostname in this cluster
>>>>> add DNS entry or /etc/hosts entry to use the exterrnal IP of
>>>>> forwarding rule for this hostname
>>>>> done
>>>>>
>>>>> add this forwarding rule to a map say 'clusterForwardingRules'
>>>>> done
>>>>> done
>>>>>
>>>>> Remove unnecessary target pools and forwarding rules.
>>>>>
>>>>> Could you please provide feedback on this approach?
>>>>>
>>>>> Thanks and Regards,
>>>>> Swapnil
>>>>>
>>>>> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Swapnil,
>>>>>>
>>>>>> IMO also we don't need HAProxy to do the port switching. As we are
>>>>>> using target pool for each cluster and you can assign the IP address to a
>>>>>> forwarding rule which is associate with the thread pool. Whenever you
>>>>>> access the service attach with the IP, it will forward the traffic into one
>>>>>> of these instances.
>>>>>> But you can refer the extension API of the HAProxy load balancer
>>>>>> [1].That would help you to fetch the topology information in real time and
>>>>>> update the configuration accordingly.
>>>>>>
>>>>>> As Imesh mention additionally we can map external IP address to a
>>>>>> hostname by using the /etc/host or DNS entry.
>>>>>>
>>>>>> [1]
>>>>>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>>>>>
>>>>>> Thanks,
>>>>>> Gayan
>>>>>>
>>>>>>
>>>>>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <
>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>
>>>>>>> Hi Imesh,
>>>>>>>
>>>>>>> Thank you for your input.
>>>>>>>
>>>>>>> Yes, I agree that we should create a target pool for each cluster.
>>>>>>> But as far as I know, we can't assign IP address to a target pool. We can
>>>>>>> assign IP address to a forwarding rule and a target pool will be associated
>>>>>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>>>>>> the port number.
>>>>>>>
>>>>>>> Yes, we could map external IP of forwarding rule to a hostname by
>>>>>>> using DNS entry or by using /etc/hosts.
>>>>>>>
>>>>>>> But I have one doubt, each service has a port and proxy port. Now I
>>>>>>> assume that 'proxy port' is used while contacting a load balancer and load
>>>>>>> balancer will send the request on port value 'port' of an instance. Please
>>>>>>> correct me if I am wrong here.
>>>>>>>
>>>>>>> If this port-proxy port scenario I have assumed is correct, then I
>>>>>>> am not sure which component will do this switching of port value of
>>>>>>> requests if we don't use HA Proxy.
>>>>>>>
>>>>>>> Could you please let me know if I have misinterpreted anything or
>>>>>>> this port switching can be done even if we don't use HA Proxy?
>>>>>>>
>>>>>>> Thanks and Regards,
>>>>>>> Swapnil Patil
>>>>>>> IIIT Hyderabad
>>>>>>>
>>>>>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Swapnil,
>>>>>>>>
>>>>>>>> Thanks for your response on this. IMO we could achieve this
>>>>>>>> functionality without having to use a haproxy instance.
>>>>>>>>
>>>>>>>> The concept we have here is to group all the members of a cluster
>>>>>>>> and use a hostname to load balance incoming requests among them. With GCE
>>>>>>>> what we can do is to create a target pool for each cluster and either have
>>>>>>>> a dedicated external IP address for each target pool or use different ports
>>>>>>>> on the same external IP address to access them.
>>>>>>>>
>>>>>>>> As an additional step we could map the external IP address to a
>>>>>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <
>>>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I have proposed a solution for the project on $subject where I am
>>>>>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>>>>>> load balancing components.
>>>>>>>>>
>>>>>>>>> I have been advised to provide more description regarding why I am
>>>>>>>>> using HA Proxy in my proposed solution.
>>>>>>>>>
>>>>>>>>> Please find below the reason for the same.
>>>>>>>>>
>>>>>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>>>>>> makes routing decisions based on the hostname field of the request.
>>>>>>>>>
>>>>>>>>> GCE network load balancing has following concepts
>>>>>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>>>>>> treated as target pool.
>>>>>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>>>>>> port numbers specified in the port range, the request is routed to the
>>>>>>>>> specified target pool.
>>>>>>>>>
>>>>>>>>> As GCE network load balancing does not have any mechanism to route
>>>>>>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>>>>>>> requests and GCE load balancing components.
>>>>>>>>>
>>>>>>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>>>>>>> should be used for a particular combination of hostname, protocol and port.
>>>>>>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>>>>>>> HA Proxy.
>>>>>>>>>
>>>>>>>>> So overall flow would be as follows
>>>>>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based
>>>>>>>>> on the incoming request.
>>>>>>>>> 2. Request is delegated to the GCE forwarding rule associated with
>>>>>>>>> that backend.
>>>>>>>>> 3. Forwarding rule of GCE routes the incoming request to the
>>>>>>>>> target pool which is specified in the rule.
>>>>>>>>> 4. Target pool routes the incoming request to a particular
>>>>>>>>> instance in the pool i.e. an instance in the cluster.
>>>>>>>>>
>>>>>>>>> This is what I thought would be an appropriate solution. I would
>>>>>>>>> appreciate if anybody has any thoughts on this.
>>>>>>>>>
>>>>>>>>> Thanks and Regards,
>>>>>>>>> Swapnil Patil
>>>>>>>>> IIIT Hyderabad
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Imesh Gunaratne
>>>>>>>>
>>>>>>>> Technical Lead, WSO2
>>>>>>>> Committer & PMC Member, Apache Stratos
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Gayan Gunarathne
>>>>>> Technical Lead
>>>>>> WSO2 Inc. (http://wso2.com)
>>>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Gayan Gunarathne
>>>> Technical Lead
>>>> WSO2 Inc. (http://wso2.com)
>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>>
>> Gayan Gunarathne
>> Technical Lead
>> WSO2 Inc. (http://wso2.com)
>> email  : gayang@wso2.com  | mobile : +94 766819985
>>
>>
>
>


-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PMC Member, Apache Stratos

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Swapnil Patil <sw...@gmail.com>.
Hi Gayan,

OK. I will put a comment.

Thank you for your time.

Regards,
Swapnil

On Wed, Apr 22, 2015 at 6:28 PM, Gayan Gunarathne <ga...@wso2.com> wrote:

> Hi Swapnil,
>
> I guess now you can't update the proposal in the GSoC site. But you can
> put this approach as a comment in that proposal.
>
> Thanks,
> Gayan
>
> On Wed, Apr 22, 2015 at 6:15 PM, Swapnil Patil <sw...@gmail.com>
> wrote:
>
>> Hi Gayan,
>>
>> Thank you for your opinion.
>>
>> Could you please tell me what should be my next step? Do I need to update
>> my proposal on GSoC site?
>>
>> Thanks and Regards,
>> Swapnil
>>
>> On Wed, Apr 22, 2015 at 5:04 PM, Gayan Gunarathne <ga...@wso2.com>
>> wrote:
>>
>>> Hi Swapnil,
>>>
>>> +1 for the approach.Yeah you can create a forwarding rule with the
>>> external IP and associate with the target pool.
>>>
>>> Thanks,
>>> Gayan
>>>
>>> On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <sw...@gmail.com>
>>> wrote:
>>>
>>>> Hi Gayan,
>>>>
>>>> Thank you for your thoughts.
>>>>
>>>> Okay. So if no HA Proxy to be used, my approach would be as follows.
>>>>
>>>> Whenever topology change event is received this new load balancer
>>>> extension will do following things.
>>>>
>>>> for each service
>>>> for each cluster of the service
>>>> if a target pool is not created for this cluster
>>>> then
>>>> create a target pool
>>>> add all members of the cluster to target pool
>>>> add ID of target pool to the map say 'clusterTargetPool'
>>>> else
>>>> get ID of the target pool using map 'clusterTargetPool'
>>>> add/remove instances from target pool as necessary to match with
>>>> cluster members
>>>>
>>>> create a forwarding rule with an external IP and associate the above
>>>> target pool to this forwarding rule
>>>>
>>>> for each hostname in this cluster
>>>> add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding
>>>> rule for this hostname
>>>> done
>>>>
>>>> add this forwarding rule to a map say 'clusterForwardingRules'
>>>> done
>>>> done
>>>>
>>>> Remove unnecessary target pools and forwarding rules.
>>>>
>>>> Could you please provide feedback on this approach?
>>>>
>>>> Thanks and Regards,
>>>> Swapnil
>>>>
>>>> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi Swapnil,
>>>>>
>>>>> IMO also we don't need HAProxy to do the port switching. As we are
>>>>> using target pool for each cluster and you can assign the IP address to a
>>>>> forwarding rule which is associate with the thread pool. Whenever you
>>>>> access the service attach with the IP, it will forward the traffic into one
>>>>> of these instances.
>>>>> But you can refer the extension API of the HAProxy load balancer
>>>>> [1].That would help you to fetch the topology information in real time and
>>>>> update the configuration accordingly.
>>>>>
>>>>> As Imesh mention additionally we can map external IP address to a
>>>>> hostname by using the /etc/host or DNS entry.
>>>>>
>>>>> [1]
>>>>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>>>>
>>>>> Thanks,
>>>>> Gayan
>>>>>
>>>>>
>>>>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <
>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>
>>>>>> Hi Imesh,
>>>>>>
>>>>>> Thank you for your input.
>>>>>>
>>>>>> Yes, I agree that we should create a target pool for each cluster.
>>>>>> But as far as I know, we can't assign IP address to a target pool. We can
>>>>>> assign IP address to a forwarding rule and a target pool will be associated
>>>>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>>>>> the port number.
>>>>>>
>>>>>> Yes, we could map external IP of forwarding rule to a hostname by
>>>>>> using DNS entry or by using /etc/hosts.
>>>>>>
>>>>>> But I have one doubt, each service has a port and proxy port. Now I
>>>>>> assume that 'proxy port' is used while contacting a load balancer and load
>>>>>> balancer will send the request on port value 'port' of an instance. Please
>>>>>> correct me if I am wrong here.
>>>>>>
>>>>>> If this port-proxy port scenario I have assumed is correct, then I am
>>>>>> not sure which component will do this switching of port value of requests
>>>>>> if we don't use HA Proxy.
>>>>>>
>>>>>> Could you please let me know if I have misinterpreted anything or
>>>>>> this port switching can be done even if we don't use HA Proxy?
>>>>>>
>>>>>> Thanks and Regards,
>>>>>> Swapnil Patil
>>>>>> IIIT Hyderabad
>>>>>>
>>>>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Swapnil,
>>>>>>>
>>>>>>> Thanks for your response on this. IMO we could achieve this
>>>>>>> functionality without having to use a haproxy instance.
>>>>>>>
>>>>>>> The concept we have here is to group all the members of a cluster
>>>>>>> and use a hostname to load balance incoming requests among them. With GCE
>>>>>>> what we can do is to create a target pool for each cluster and either have
>>>>>>> a dedicated external IP address for each target pool or use different ports
>>>>>>> on the same external IP address to access them.
>>>>>>>
>>>>>>> As an additional step we could map the external IP address to a
>>>>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <
>>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I have proposed a solution for the project on $subject where I am
>>>>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>>>>> load balancing components.
>>>>>>>>
>>>>>>>> I have been advised to provide more description regarding why I am
>>>>>>>> using HA Proxy in my proposed solution.
>>>>>>>>
>>>>>>>> Please find below the reason for the same.
>>>>>>>>
>>>>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>>>>> makes routing decisions based on the hostname field of the request.
>>>>>>>>
>>>>>>>> GCE network load balancing has following concepts
>>>>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>>>>> treated as target pool.
>>>>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>>>>> port numbers specified in the port range, the request is routed to the
>>>>>>>> specified target pool.
>>>>>>>>
>>>>>>>> As GCE network load balancing does not have any mechanism to route
>>>>>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>>>>>> requests and GCE load balancing components.
>>>>>>>>
>>>>>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>>>>>> should be used for a particular combination of hostname, protocol and port.
>>>>>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>>>>>> HA Proxy.
>>>>>>>>
>>>>>>>> So overall flow would be as follows
>>>>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on
>>>>>>>> the incoming request.
>>>>>>>> 2. Request is delegated to the GCE forwarding rule associated with
>>>>>>>> that backend.
>>>>>>>> 3. Forwarding rule of GCE routes the incoming request to the target
>>>>>>>> pool which is specified in the rule.
>>>>>>>> 4. Target pool routes the incoming request to a particular instance
>>>>>>>> in the pool i.e. an instance in the cluster.
>>>>>>>>
>>>>>>>> This is what I thought would be an appropriate solution. I would
>>>>>>>> appreciate if anybody has any thoughts on this.
>>>>>>>>
>>>>>>>> Thanks and Regards,
>>>>>>>> Swapnil Patil
>>>>>>>> IIIT Hyderabad
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Imesh Gunaratne
>>>>>>>
>>>>>>> Technical Lead, WSO2
>>>>>>> Committer & PMC Member, Apache Stratos
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Gayan Gunarathne
>>>>> Technical Lead
>>>>> WSO2 Inc. (http://wso2.com)
>>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> Gayan Gunarathne
>>> Technical Lead
>>> WSO2 Inc. (http://wso2.com)
>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>
>>>
>>
>>
>
>
> --
>
> Gayan Gunarathne
> Technical Lead
> WSO2 Inc. (http://wso2.com)
> email  : gayang@wso2.com  | mobile : +94 766819985
>
>

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Gayan Gunarathne <ga...@wso2.com>.
Hi Swapnil,

I guess now you can't update the proposal in the GSoC site. But you can put
this approach as a comment in that proposal.

Thanks,
Gayan

On Wed, Apr 22, 2015 at 6:15 PM, Swapnil Patil <sw...@gmail.com>
wrote:

> Hi Gayan,
>
> Thank you for your opinion.
>
> Could you please tell me what should be my next step? Do I need to update
> my proposal on GSoC site?
>
> Thanks and Regards,
> Swapnil
>
> On Wed, Apr 22, 2015 at 5:04 PM, Gayan Gunarathne <ga...@wso2.com> wrote:
>
>> Hi Swapnil,
>>
>> +1 for the approach.Yeah you can create a forwarding rule with the
>> external IP and associate with the target pool.
>>
>> Thanks,
>> Gayan
>>
>> On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <sw...@gmail.com>
>> wrote:
>>
>>> Hi Gayan,
>>>
>>> Thank you for your thoughts.
>>>
>>> Okay. So if no HA Proxy to be used, my approach would be as follows.
>>>
>>> Whenever topology change event is received this new load balancer
>>> extension will do following things.
>>>
>>> for each service
>>> for each cluster of the service
>>> if a target pool is not created for this cluster
>>> then
>>> create a target pool
>>> add all members of the cluster to target pool
>>> add ID of target pool to the map say 'clusterTargetPool'
>>> else
>>> get ID of the target pool using map 'clusterTargetPool'
>>> add/remove instances from target pool as necessary to match with cluster
>>> members
>>>
>>> create a forwarding rule with an external IP and associate the above
>>> target pool to this forwarding rule
>>>
>>> for each hostname in this cluster
>>> add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding
>>> rule for this hostname
>>> done
>>>
>>> add this forwarding rule to a map say 'clusterForwardingRules'
>>> done
>>> done
>>>
>>> Remove unnecessary target pools and forwarding rules.
>>>
>>> Could you please provide feedback on this approach?
>>>
>>> Thanks and Regards,
>>> Swapnil
>>>
>>> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com>
>>> wrote:
>>>
>>>> Hi Swapnil,
>>>>
>>>> IMO also we don't need HAProxy to do the port switching. As we are
>>>> using target pool for each cluster and you can assign the IP address to a
>>>> forwarding rule which is associate with the thread pool. Whenever you
>>>> access the service attach with the IP, it will forward the traffic into one
>>>> of these instances.
>>>> But you can refer the extension API of the HAProxy load balancer
>>>> [1].That would help you to fetch the topology information in real time and
>>>> update the configuration accordingly.
>>>>
>>>> As Imesh mention additionally we can map external IP address to a
>>>> hostname by using the /etc/host or DNS entry.
>>>>
>>>> [1]
>>>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>>>
>>>> Thanks,
>>>> Gayan
>>>>
>>>>
>>>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <swapnil.rp15@gmail.com
>>>> > wrote:
>>>>
>>>>> Hi Imesh,
>>>>>
>>>>> Thank you for your input.
>>>>>
>>>>> Yes, I agree that we should create a target pool for each cluster. But
>>>>> as far as I know, we can't assign IP address to a target pool. We can
>>>>> assign IP address to a forwarding rule and a target pool will be associated
>>>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>>>> the port number.
>>>>>
>>>>> Yes, we could map external IP of forwarding rule to a hostname by
>>>>> using DNS entry or by using /etc/hosts.
>>>>>
>>>>> But I have one doubt, each service has a port and proxy port. Now I
>>>>> assume that 'proxy port' is used while contacting a load balancer and load
>>>>> balancer will send the request on port value 'port' of an instance. Please
>>>>> correct me if I am wrong here.
>>>>>
>>>>> If this port-proxy port scenario I have assumed is correct, then I am
>>>>> not sure which component will do this switching of port value of requests
>>>>> if we don't use HA Proxy.
>>>>>
>>>>> Could you please let me know if I have misinterpreted anything or this
>>>>> port switching can be done even if we don't use HA Proxy?
>>>>>
>>>>> Thanks and Regards,
>>>>> Swapnil Patil
>>>>> IIIT Hyderabad
>>>>>
>>>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>>>>> wrote:
>>>>>
>>>>>> Hi Swapnil,
>>>>>>
>>>>>> Thanks for your response on this. IMO we could achieve this
>>>>>> functionality without having to use a haproxy instance.
>>>>>>
>>>>>> The concept we have here is to group all the members of a cluster and
>>>>>> use a hostname to load balance incoming requests among them. With GCE what
>>>>>> we can do is to create a target pool for each cluster and either have a
>>>>>> dedicated external IP address for each target pool or use different ports
>>>>>> on the same external IP address to access them.
>>>>>>
>>>>>> As an additional step we could map the external IP address to a
>>>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <
>>>>>> swapnil.rp15@gmail.com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have proposed a solution for the project on $subject where I am
>>>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>>>> load balancing components.
>>>>>>>
>>>>>>> I have been advised to provide more description regarding why I am
>>>>>>> using HA Proxy in my proposed solution.
>>>>>>>
>>>>>>> Please find below the reason for the same.
>>>>>>>
>>>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>>>> makes routing decisions based on the hostname field of the request.
>>>>>>>
>>>>>>> GCE network load balancing has following concepts
>>>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>>>> treated as target pool.
>>>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>>>> port numbers specified in the port range, the request is routed to the
>>>>>>> specified target pool.
>>>>>>>
>>>>>>> As GCE network load balancing does not have any mechanism to route
>>>>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>>>>> requests and GCE load balancing components.
>>>>>>>
>>>>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>>>>> should be used for a particular combination of hostname, protocol and port.
>>>>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>>>>> HA Proxy.
>>>>>>>
>>>>>>> So overall flow would be as follows
>>>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on
>>>>>>> the incoming request.
>>>>>>> 2. Request is delegated to the GCE forwarding rule associated with
>>>>>>> that backend.
>>>>>>> 3. Forwarding rule of GCE routes the incoming request to the target
>>>>>>> pool which is specified in the rule.
>>>>>>> 4. Target pool routes the incoming request to a particular instance
>>>>>>> in the pool i.e. an instance in the cluster.
>>>>>>>
>>>>>>> This is what I thought would be an appropriate solution. I would
>>>>>>> appreciate if anybody has any thoughts on this.
>>>>>>>
>>>>>>> Thanks and Regards,
>>>>>>> Swapnil Patil
>>>>>>> IIIT Hyderabad
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Imesh Gunaratne
>>>>>>
>>>>>> Technical Lead, WSO2
>>>>>> Committer & PMC Member, Apache Stratos
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Gayan Gunarathne
>>>> Technical Lead
>>>> WSO2 Inc. (http://wso2.com)
>>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>>
>> Gayan Gunarathne
>> Technical Lead
>> WSO2 Inc. (http://wso2.com)
>> email  : gayang@wso2.com  | mobile : +94 766819985
>>
>>
>
>


-- 

Gayan Gunarathne
Technical Lead
WSO2 Inc. (http://wso2.com)
email  : gayang@wso2.com  | mobile : +94 766819985

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Swapnil Patil <sw...@gmail.com>.
Hi Gayan,

Thank you for your opinion.

Could you please tell me what should be my next step? Do I need to update
my proposal on GSoC site?

Thanks and Regards,
Swapnil

On Wed, Apr 22, 2015 at 5:04 PM, Gayan Gunarathne <ga...@wso2.com> wrote:

> Hi Swapnil,
>
> +1 for the approach.Yeah you can create a forwarding rule with the
> external IP and associate with the target pool.
>
> Thanks,
> Gayan
>
> On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <sw...@gmail.com>
> wrote:
>
>> Hi Gayan,
>>
>> Thank you for your thoughts.
>>
>> Okay. So if no HA Proxy to be used, my approach would be as follows.
>>
>> Whenever topology change event is received this new load balancer
>> extension will do following things.
>>
>> for each service
>> for each cluster of the service
>> if a target pool is not created for this cluster
>> then
>> create a target pool
>> add all members of the cluster to target pool
>> add ID of target pool to the map say 'clusterTargetPool'
>> else
>> get ID of the target pool using map 'clusterTargetPool'
>> add/remove instances from target pool as necessary to match with cluster
>> members
>>
>> create a forwarding rule with an external IP and associate the above
>> target pool to this forwarding rule
>>
>> for each hostname in this cluster
>> add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding
>> rule for this hostname
>> done
>>
>> add this forwarding rule to a map say 'clusterForwardingRules'
>> done
>> done
>>
>> Remove unnecessary target pools and forwarding rules.
>>
>> Could you please provide feedback on this approach?
>>
>> Thanks and Regards,
>> Swapnil
>>
>> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com>
>> wrote:
>>
>>> Hi Swapnil,
>>>
>>> IMO also we don't need HAProxy to do the port switching. As we are using
>>> target pool for each cluster and you can assign the IP address to a
>>> forwarding rule which is associate with the thread pool. Whenever you
>>> access the service attach with the IP, it will forward the traffic into one
>>> of these instances.
>>> But you can refer the extension API of the HAProxy load balancer
>>> [1].That would help you to fetch the topology information in real time and
>>> update the configuration accordingly.
>>>
>>> As Imesh mention additionally we can map external IP address to a
>>> hostname by using the /etc/host or DNS entry.
>>>
>>> [1]
>>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>>
>>> Thanks,
>>> Gayan
>>>
>>>
>>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <sw...@gmail.com>
>>> wrote:
>>>
>>>> Hi Imesh,
>>>>
>>>> Thank you for your input.
>>>>
>>>> Yes, I agree that we should create a target pool for each cluster. But
>>>> as far as I know, we can't assign IP address to a target pool. We can
>>>> assign IP address to a forwarding rule and a target pool will be associated
>>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>>> the port number.
>>>>
>>>> Yes, we could map external IP of forwarding rule to a hostname by using
>>>> DNS entry or by using /etc/hosts.
>>>>
>>>> But I have one doubt, each service has a port and proxy port. Now I
>>>> assume that 'proxy port' is used while contacting a load balancer and load
>>>> balancer will send the request on port value 'port' of an instance. Please
>>>> correct me if I am wrong here.
>>>>
>>>> If this port-proxy port scenario I have assumed is correct, then I am
>>>> not sure which component will do this switching of port value of requests
>>>> if we don't use HA Proxy.
>>>>
>>>> Could you please let me know if I have misinterpreted anything or this
>>>> port switching can be done even if we don't use HA Proxy?
>>>>
>>>> Thanks and Regards,
>>>> Swapnil Patil
>>>> IIIT Hyderabad
>>>>
>>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>>>> wrote:
>>>>
>>>>> Hi Swapnil,
>>>>>
>>>>> Thanks for your response on this. IMO we could achieve this
>>>>> functionality without having to use a haproxy instance.
>>>>>
>>>>> The concept we have here is to group all the members of a cluster and
>>>>> use a hostname to load balance incoming requests among them. With GCE what
>>>>> we can do is to create a target pool for each cluster and either have a
>>>>> dedicated external IP address for each target pool or use different ports
>>>>> on the same external IP address to access them.
>>>>>
>>>>> As an additional step we could map the external IP address to a
>>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>>
>>>>> Thanks
>>>>>
>>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <swapnil.rp15@gmail.com
>>>>> > wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have proposed a solution for the project on $subject where I am
>>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>>> load balancing components.
>>>>>>
>>>>>> I have been advised to provide more description regarding why I am
>>>>>> using HA Proxy in my proposed solution.
>>>>>>
>>>>>> Please find below the reason for the same.
>>>>>>
>>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>>> makes routing decisions based on the hostname field of the request.
>>>>>>
>>>>>> GCE network load balancing has following concepts
>>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>>> treated as target pool.
>>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>>> port numbers specified in the port range, the request is routed to the
>>>>>> specified target pool.
>>>>>>
>>>>>> As GCE network load balancing does not have any mechanism to route
>>>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>>>> requests and GCE load balancing components.
>>>>>>
>>>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>>>> should be used for a particular combination of hostname, protocol and port.
>>>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>>>> HA Proxy.
>>>>>>
>>>>>> So overall flow would be as follows
>>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on
>>>>>> the incoming request.
>>>>>> 2. Request is delegated to the GCE forwarding rule associated with
>>>>>> that backend.
>>>>>> 3. Forwarding rule of GCE routes the incoming request to the target
>>>>>> pool which is specified in the rule.
>>>>>> 4. Target pool routes the incoming request to a particular instance
>>>>>> in the pool i.e. an instance in the cluster.
>>>>>>
>>>>>> This is what I thought would be an appropriate solution. I would
>>>>>> appreciate if anybody has any thoughts on this.
>>>>>>
>>>>>> Thanks and Regards,
>>>>>> Swapnil Patil
>>>>>> IIIT Hyderabad
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Imesh Gunaratne
>>>>>
>>>>> Technical Lead, WSO2
>>>>> Committer & PMC Member, Apache Stratos
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> Gayan Gunarathne
>>> Technical Lead
>>> WSO2 Inc. (http://wso2.com)
>>> email  : gayang@wso2.com  | mobile : +94 766819985
>>>
>>>
>>
>>
>
>
> --
>
> Gayan Gunarathne
> Technical Lead
> WSO2 Inc. (http://wso2.com)
> email  : gayang@wso2.com  | mobile : +94 766819985
>
>

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Gayan Gunarathne <ga...@wso2.com>.
Hi Swapnil,

+1 for the approach.Yeah you can create a forwarding rule with the external
IP and associate with the target pool.

Thanks,
Gayan

On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <sw...@gmail.com>
wrote:

> Hi Gayan,
>
> Thank you for your thoughts.
>
> Okay. So if no HA Proxy to be used, my approach would be as follows.
>
> Whenever topology change event is received this new load balancer
> extension will do following things.
>
> for each service
> for each cluster of the service
> if a target pool is not created for this cluster
> then
> create a target pool
> add all members of the cluster to target pool
> add ID of target pool to the map say 'clusterTargetPool'
> else
> get ID of the target pool using map 'clusterTargetPool'
> add/remove instances from target pool as necessary to match with cluster
> members
>
> create a forwarding rule with an external IP and associate the above
> target pool to this forwarding rule
>
> for each hostname in this cluster
> add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding
> rule for this hostname
> done
>
> add this forwarding rule to a map say 'clusterForwardingRules'
> done
> done
>
> Remove unnecessary target pools and forwarding rules.
>
> Could you please provide feedback on this approach?
>
> Thanks and Regards,
> Swapnil
>
> On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com> wrote:
>
>> Hi Swapnil,
>>
>> IMO also we don't need HAProxy to do the port switching. As we are using
>> target pool for each cluster and you can assign the IP address to a
>> forwarding rule which is associate with the thread pool. Whenever you
>> access the service attach with the IP, it will forward the traffic into one
>> of these instances.
>> But you can refer the extension API of the HAProxy load balancer [1].That
>> would help you to fetch the topology information in real time and update
>> the configuration accordingly.
>>
>> As Imesh mention additionally we can map external IP address to a
>> hostname by using the /etc/host or DNS entry.
>>
>> [1]
>> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>>
>> Thanks,
>> Gayan
>>
>>
>> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <sw...@gmail.com>
>> wrote:
>>
>>> Hi Imesh,
>>>
>>> Thank you for your input.
>>>
>>> Yes, I agree that we should create a target pool for each cluster. But
>>> as far as I know, we can't assign IP address to a target pool. We can
>>> assign IP address to a forwarding rule and a target pool will be associated
>>> with a forwarding rule. Also forwarding rule can filter requests based on
>>> the port number.
>>>
>>> Yes, we could map external IP of forwarding rule to a hostname by using
>>> DNS entry or by using /etc/hosts.
>>>
>>> But I have one doubt, each service has a port and proxy port. Now I
>>> assume that 'proxy port' is used while contacting a load balancer and load
>>> balancer will send the request on port value 'port' of an instance. Please
>>> correct me if I am wrong here.
>>>
>>> If this port-proxy port scenario I have assumed is correct, then I am
>>> not sure which component will do this switching of port value of requests
>>> if we don't use HA Proxy.
>>>
>>> Could you please let me know if I have misinterpreted anything or this
>>> port switching can be done even if we don't use HA Proxy?
>>>
>>> Thanks and Regards,
>>> Swapnil Patil
>>> IIIT Hyderabad
>>>
>>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>>> wrote:
>>>
>>>> Hi Swapnil,
>>>>
>>>> Thanks for your response on this. IMO we could achieve this
>>>> functionality without having to use a haproxy instance.
>>>>
>>>> The concept we have here is to group all the members of a cluster and
>>>> use a hostname to load balance incoming requests among them. With GCE what
>>>> we can do is to create a target pool for each cluster and either have a
>>>> dedicated external IP address for each target pool or use different ports
>>>> on the same external IP address to access them.
>>>>
>>>> As an additional step we could map the external IP address to a
>>>> hostname by using a DNS entry or by using /etc/hosts.
>>>>
>>>> Thanks
>>>>
>>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <sw...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I have proposed a solution for the project on $subject where I am
>>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE)
>>>>> load balancing components.
>>>>>
>>>>> I have been advised to provide more description regarding why I am
>>>>> using HA Proxy in my proposed solution.
>>>>>
>>>>> Please find below the reason for the same.
>>>>>
>>>>> Stratos needs to route traffic based on the hostname field of the
>>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>>> Compute Engine (GCE) which does not provide any central component that
>>>>> makes routing decisions based on the hostname field of the request.
>>>>>
>>>>> GCE network load balancing has following concepts
>>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>>> treated as target pool.
>>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>>> range, a target pool. Whenever a request is made to this external IP with
>>>>> port numbers specified in the port range, the request is routed to the
>>>>> specified target pool.
>>>>>
>>>>> As GCE network load balancing does not have any mechanism to route
>>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>>> requests and GCE load balancing components.
>>>>>
>>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>>> should be used for a particular combination of hostname, protocol and port.
>>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>>> HA Proxy.
>>>>>
>>>>> So overall flow would be as follows
>>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on
>>>>> the incoming request.
>>>>> 2. Request is delegated to the GCE forwarding rule associated with
>>>>> that backend.
>>>>> 3. Forwarding rule of GCE routes the incoming request to the target
>>>>> pool which is specified in the rule.
>>>>> 4. Target pool routes the incoming request to a particular instance in
>>>>> the pool i.e. an instance in the cluster.
>>>>>
>>>>> This is what I thought would be an appropriate solution. I would
>>>>> appreciate if anybody has any thoughts on this.
>>>>>
>>>>> Thanks and Regards,
>>>>> Swapnil Patil
>>>>> IIIT Hyderabad
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Imesh Gunaratne
>>>>
>>>> Technical Lead, WSO2
>>>> Committer & PMC Member, Apache Stratos
>>>>
>>>
>>>
>>
>>
>> --
>>
>> Gayan Gunarathne
>> Technical Lead
>> WSO2 Inc. (http://wso2.com)
>> email  : gayang@wso2.com  | mobile : +94 766819985
>>
>>
>
>


-- 

Gayan Gunarathne
Technical Lead
WSO2 Inc. (http://wso2.com)
email  : gayang@wso2.com  | mobile : +94 766819985

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Swapnil Patil <sw...@gmail.com>.
Hi Gayan,

Thank you for your thoughts.

Okay. So if no HA Proxy to be used, my approach would be as follows.

Whenever topology change event is received this new load balancer extension
will do following things.

for each service
for each cluster of the service
if a target pool is not created for this cluster
then
create a target pool
add all members of the cluster to target pool
add ID of target pool to the map say 'clusterTargetPool'
else
get ID of the target pool using map 'clusterTargetPool'
add/remove instances from target pool as necessary to match with cluster
members

create a forwarding rule with an external IP and associate the above target
pool to this forwarding rule

for each hostname in this cluster
add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding
rule for this hostname
done

add this forwarding rule to a map say 'clusterForwardingRules'
done
done

Remove unnecessary target pools and forwarding rules.

Could you please provide feedback on this approach?

Thanks and Regards,
Swapnil

On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <ga...@wso2.com> wrote:

> Hi Swapnil,
>
> IMO also we don't need HAProxy to do the port switching. As we are using
> target pool for each cluster and you can assign the IP address to a
> forwarding rule which is associate with the thread pool. Whenever you
> access the service attach with the IP, it will forward the traffic into one
> of these instances.
> But you can refer the extension API of the HAProxy load balancer [1].That
> would help you to fetch the topology information in real time and update
> the configuration accordingly.
>
> As Imesh mention additionally we can map external IP address to a hostname
> by using the /etc/host or DNS entry.
>
> [1]
> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension
>
> Thanks,
> Gayan
>
>
> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <sw...@gmail.com>
> wrote:
>
>> Hi Imesh,
>>
>> Thank you for your input.
>>
>> Yes, I agree that we should create a target pool for each cluster. But as
>> far as I know, we can't assign IP address to a target pool. We can assign
>> IP address to a forwarding rule and a target pool will be associated with a
>> forwarding rule. Also forwarding rule can filter requests based on the port
>> number.
>>
>> Yes, we could map external IP of forwarding rule to a hostname by using
>> DNS entry or by using /etc/hosts.
>>
>> But I have one doubt, each service has a port and proxy port. Now I
>> assume that 'proxy port' is used while contacting a load balancer and load
>> balancer will send the request on port value 'port' of an instance. Please
>> correct me if I am wrong here.
>>
>> If this port-proxy port scenario I have assumed is correct, then I am not
>> sure which component will do this switching of port value of requests if we
>> don't use HA Proxy.
>>
>> Could you please let me know if I have misinterpreted anything or this
>> port switching can be done even if we don't use HA Proxy?
>>
>> Thanks and Regards,
>> Swapnil Patil
>> IIIT Hyderabad
>>
>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
>> wrote:
>>
>>> Hi Swapnil,
>>>
>>> Thanks for your response on this. IMO we could achieve this
>>> functionality without having to use a haproxy instance.
>>>
>>> The concept we have here is to group all the members of a cluster and
>>> use a hostname to load balance incoming requests among them. With GCE what
>>> we can do is to create a target pool for each cluster and either have a
>>> dedicated external IP address for each target pool or use different ports
>>> on the same external IP address to access them.
>>>
>>> As an additional step we could map the external IP address to a hostname
>>> by using a DNS entry or by using /etc/hosts.
>>>
>>> Thanks
>>>
>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <sw...@gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have proposed a solution for the project on $subject where I am using
>>>> an HA Proxy between incoming request and Google Compute Engine (GCE) load
>>>> balancing components.
>>>>
>>>> I have been advised to provide more description regarding why I am
>>>> using HA Proxy in my proposed solution.
>>>>
>>>> Please find below the reason for the same.
>>>>
>>>> Stratos needs to route traffic based on the hostname field of the
>>>> incoming request. I have proposed to use Network Load Balancing of Google
>>>> Compute Engine (GCE) which does not provide any central component that
>>>> makes routing decisions based on the hostname field of the request.
>>>>
>>>> GCE network load balancing has following concepts
>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>>> treated as target pool.
>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port
>>>> range, a target pool. Whenever a request is made to this external IP with
>>>> port numbers specified in the port range, the request is routed to the
>>>> specified target pool.
>>>>
>>>> As GCE network load balancing does not have any mechanism to route
>>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>>> requests and GCE load balancing components.
>>>>
>>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>>> should be used for a particular combination of hostname, protocol and port.
>>>> So forwarding rules of GCE load balancing will act as backend instances of
>>>> HA Proxy.
>>>>
>>>> So overall flow would be as follows
>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on the
>>>> incoming request.
>>>> 2. Request is delegated to the GCE forwarding rule associated with that
>>>> backend.
>>>> 3. Forwarding rule of GCE routes the incoming request to the target
>>>> pool which is specified in the rule.
>>>> 4. Target pool routes the incoming request to a particular instance in
>>>> the pool i.e. an instance in the cluster.
>>>>
>>>> This is what I thought would be an appropriate solution. I would
>>>> appreciate if anybody has any thoughts on this.
>>>>
>>>> Thanks and Regards,
>>>> Swapnil Patil
>>>> IIIT Hyderabad
>>>>
>>>
>>>
>>>
>>> --
>>> Imesh Gunaratne
>>>
>>> Technical Lead, WSO2
>>> Committer & PMC Member, Apache Stratos
>>>
>>
>>
>
>
> --
>
> Gayan Gunarathne
> Technical Lead
> WSO2 Inc. (http://wso2.com)
> email  : gayang@wso2.com  | mobile : +94 766819985
>
>

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Gayan Gunarathne <ga...@wso2.com>.
Hi Swapnil,

IMO also we don't need HAProxy to do the port switching. As we are using
target pool for each cluster and you can assign the IP address to a
forwarding rule which is associate with the thread pool. Whenever you
access the service attach with the IP, it will forward the traffic into one
of these instances.
But you can refer the extension API of the HAProxy load balancer [1].That
would help you to fetch the topology information in real time and update
the configuration accordingly.

As Imesh mention additionally we can map external IP address to a hostname
by using the /etc/host or DNS entry.

[1]
https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension

Thanks,
Gayan


On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <sw...@gmail.com>
wrote:

> Hi Imesh,
>
> Thank you for your input.
>
> Yes, I agree that we should create a target pool for each cluster. But as
> far as I know, we can't assign IP address to a target pool. We can assign
> IP address to a forwarding rule and a target pool will be associated with a
> forwarding rule. Also forwarding rule can filter requests based on the port
> number.
>
> Yes, we could map external IP of forwarding rule to a hostname by using
> DNS entry or by using /etc/hosts.
>
> But I have one doubt, each service has a port and proxy port. Now I assume
> that 'proxy port' is used while contacting a load balancer and load
> balancer will send the request on port value 'port' of an instance. Please
> correct me if I am wrong here.
>
> If this port-proxy port scenario I have assumed is correct, then I am not
> sure which component will do this switching of port value of requests if we
> don't use HA Proxy.
>
> Could you please let me know if I have misinterpreted anything or this
> port switching can be done even if we don't use HA Proxy?
>
> Thanks and Regards,
> Swapnil Patil
> IIIT Hyderabad
>
> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org>
> wrote:
>
>> Hi Swapnil,
>>
>> Thanks for your response on this. IMO we could achieve this functionality
>> without having to use a haproxy instance.
>>
>> The concept we have here is to group all the members of a cluster and use
>> a hostname to load balance incoming requests among them. With GCE what we
>> can do is to create a target pool for each cluster and either have a
>> dedicated external IP address for each target pool or use different ports
>> on the same external IP address to access them.
>>
>> As an additional step we could map the external IP address to a hostname
>> by using a DNS entry or by using /etc/hosts.
>>
>> Thanks
>>
>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <sw...@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I have proposed a solution for the project on $subject where I am using
>>> an HA Proxy between incoming request and Google Compute Engine (GCE) load
>>> balancing components.
>>>
>>> I have been advised to provide more description regarding why I am using
>>> HA Proxy in my proposed solution.
>>>
>>> Please find below the reason for the same.
>>>
>>> Stratos needs to route traffic based on the hostname field of the
>>> incoming request. I have proposed to use Network Load Balancing of Google
>>> Compute Engine (GCE) which does not provide any central component that
>>> makes routing decisions based on the hostname field of the request.
>>>
>>> GCE network load balancing has following concepts
>>> 1. Target pool - a set of instances. In Stratos, a cluster can be
>>> treated as target pool.
>>> 2. Forwarding rule - A forwarding rule has an external IP, a port range,
>>> a target pool. Whenever a request is made to this external IP with port
>>> numbers specified in the port range, the request is routed to the specified
>>> target pool.
>>>
>>> As GCE network load balancing does not have any mechanism to route
>>> traffic based on hostname, I proposed to use HA Proxy between incoming
>>> requests and GCE load balancing components.
>>>
>>> If we use HA Proxy, we can add a rule saying which forwarding rule
>>> should be used for a particular combination of hostname, protocol and port.
>>> So forwarding rules of GCE load balancing will act as backend instances of
>>> HA Proxy.
>>>
>>> So overall flow would be as follows
>>> 1. HA Proxy decides which backend (forwarding rule) to use based on the
>>> incoming request.
>>> 2. Request is delegated to the GCE forwarding rule associated with that
>>> backend.
>>> 3. Forwarding rule of GCE routes the incoming request to the target pool
>>> which is specified in the rule.
>>> 4. Target pool routes the incoming request to a particular instance in
>>> the pool i.e. an instance in the cluster.
>>>
>>> This is what I thought would be an appropriate solution. I would
>>> appreciate if anybody has any thoughts on this.
>>>
>>> Thanks and Regards,
>>> Swapnil Patil
>>> IIIT Hyderabad
>>>
>>
>>
>>
>> --
>> Imesh Gunaratne
>>
>> Technical Lead, WSO2
>> Committer & PMC Member, Apache Stratos
>>
>
>


-- 

Gayan Gunarathne
Technical Lead
WSO2 Inc. (http://wso2.com)
email  : gayang@wso2.com  | mobile : +94 766819985

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Swapnil Patil <sw...@gmail.com>.
Hi Imesh,

Thank you for your input.

Yes, I agree that we should create a target pool for each cluster. But as
far as I know, we can't assign IP address to a target pool. We can assign
IP address to a forwarding rule and a target pool will be associated with a
forwarding rule. Also forwarding rule can filter requests based on the port
number.

Yes, we could map external IP of forwarding rule to a hostname by using DNS
entry or by using /etc/hosts.

But I have one doubt, each service has a port and proxy port. Now I assume
that 'proxy port' is used while contacting a load balancer and load
balancer will send the request on port value 'port' of an instance. Please
correct me if I am wrong here.

If this port-proxy port scenario I have assumed is correct, then I am not
sure which component will do this switching of port value of requests if we
don't use HA Proxy.

Could you please let me know if I have misinterpreted anything or this port
switching can be done even if we don't use HA Proxy?

Thanks and Regards,
Swapnil Patil
IIIT Hyderabad

On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <im...@apache.org> wrote:

> Hi Swapnil,
>
> Thanks for your response on this. IMO we could achieve this functionality
> without having to use a haproxy instance.
>
> The concept we have here is to group all the members of a cluster and use
> a hostname to load balance incoming requests among them. With GCE what we
> can do is to create a target pool for each cluster and either have a
> dedicated external IP address for each target pool or use different ports
> on the same external IP address to access them.
>
> As an additional step we could map the external IP address to a hostname
> by using a DNS entry or by using /etc/hosts.
>
> Thanks
>
> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <sw...@gmail.com>
> wrote:
>
>> Hi,
>>
>> I have proposed a solution for the project on $subject where I am using
>> an HA Proxy between incoming request and Google Compute Engine (GCE) load
>> balancing components.
>>
>> I have been advised to provide more description regarding why I am using
>> HA Proxy in my proposed solution.
>>
>> Please find below the reason for the same.
>>
>> Stratos needs to route traffic based on the hostname field of the
>> incoming request. I have proposed to use Network Load Balancing of Google
>> Compute Engine (GCE) which does not provide any central component that
>> makes routing decisions based on the hostname field of the request.
>>
>> GCE network load balancing has following concepts
>> 1. Target pool - a set of instances. In Stratos, a cluster can be treated
>> as target pool.
>> 2. Forwarding rule - A forwarding rule has an external IP, a port range,
>> a target pool. Whenever a request is made to this external IP with port
>> numbers specified in the port range, the request is routed to the specified
>> target pool.
>>
>> As GCE network load balancing does not have any mechanism to route
>> traffic based on hostname, I proposed to use HA Proxy between incoming
>> requests and GCE load balancing components.
>>
>> If we use HA Proxy, we can add a rule saying which forwarding rule should
>> be used for a particular combination of hostname, protocol and port. So
>> forwarding rules of GCE load balancing will act as backend instances of HA
>> Proxy.
>>
>> So overall flow would be as follows
>> 1. HA Proxy decides which backend (forwarding rule) to use based on the
>> incoming request.
>> 2. Request is delegated to the GCE forwarding rule associated with that
>> backend.
>> 3. Forwarding rule of GCE routes the incoming request to the target pool
>> which is specified in the rule.
>> 4. Target pool routes the incoming request to a particular instance in
>> the pool i.e. an instance in the cluster.
>>
>> This is what I thought would be an appropriate solution. I would
>> appreciate if anybody has any thoughts on this.
>>
>> Thanks and Regards,
>> Swapnil Patil
>> IIIT Hyderabad
>>
>
>
>
> --
> Imesh Gunaratne
>
> Technical Lead, WSO2
> Committer & PMC Member, Apache Stratos
>

Re: Google Compute Engine Load Balancing Support for Stratos - GSoC 2015

Posted by Imesh Gunaratne <im...@apache.org>.
Hi Swapnil,

Thanks for your response on this. IMO we could achieve this functionality
without having to use a haproxy instance.

The concept we have here is to group all the members of a cluster and use a
hostname to load balance incoming requests among them. With GCE what we can
do is to create a target pool for each cluster and either have a dedicated
external IP address for each target pool or use different ports on the same
external IP address to access them.

As an additional step we could map the external IP address to a hostname by
using a DNS entry or by using /etc/hosts.

Thanks

On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <sw...@gmail.com>
wrote:

> Hi,
>
> I have proposed a solution for the project on $subject where I am using an
> HA Proxy between incoming request and Google Compute Engine (GCE) load
> balancing components.
>
> I have been advised to provide more description regarding why I am using
> HA Proxy in my proposed solution.
>
> Please find below the reason for the same.
>
> Stratos needs to route traffic based on the hostname field of the incoming
> request. I have proposed to use Network Load Balancing of Google Compute
> Engine (GCE) which does not provide any central component that makes
> routing decisions based on the hostname field of the request.
>
> GCE network load balancing has following concepts
> 1. Target pool - a set of instances. In Stratos, a cluster can be treated
> as target pool.
> 2. Forwarding rule - A forwarding rule has an external IP, a port range, a
> target pool. Whenever a request is made to this external IP with port
> numbers specified in the port range, the request is routed to the specified
> target pool.
>
> As GCE network load balancing does not have any mechanism to route traffic
> based on hostname, I proposed to use HA Proxy between incoming requests and
> GCE load balancing components.
>
> If we use HA Proxy, we can add a rule saying which forwarding rule should
> be used for a particular combination of hostname, protocol and port. So
> forwarding rules of GCE load balancing will act as backend instances of HA
> Proxy.
>
> So overall flow would be as follows
> 1. HA Proxy decides which backend (forwarding rule) to use based on the
> incoming request.
> 2. Request is delegated to the GCE forwarding rule associated with that
> backend.
> 3. Forwarding rule of GCE routes the incoming request to the target pool
> which is specified in the rule.
> 4. Target pool routes the incoming request to a particular instance in the
> pool i.e. an instance in the cluster.
>
> This is what I thought would be an appropriate solution. I would
> appreciate if anybody has any thoughts on this.
>
> Thanks and Regards,
> Swapnil Patil
> IIIT Hyderabad
>



-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PMC Member, Apache Stratos