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 <[email protected]> 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 <[email protected]>
> 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 <[email protected]>
>> 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 <[email protected]>
>>> 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 <[email protected]>
>>>> 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 <[email protected]
>>>>> > 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  : [email protected]  | mobile : +94 766819985
>>>
>>>
>>
>>
>
>
> --
>
> Gayan Gunarathne
> Technical Lead
> WSO2 Inc. (http://wso2.com)
> email  : [email protected]  | mobile : +94 766819985
>
>

Reply via email to