load-balancing recommendations ? (configuration and hardware)
Hi Folks, I've often heard about the infinite-scalability that will be created by something like ZEO and I've always wondered about one thing : how is the load-balancing being done ? Just say we have 3 front-line servers (ZSERVER_1, ZSERVER_2 and ZSERVER_3 in the diagram below), each running Zope with identical application logic replicated by ZEO (or simply copied across manually); the front-line servers all use the same database (DB) for storing sessions. Our load-balancer distributes incoming requests between the 3 servers : +---[ZSERVER_1]----+ | | REQUEST-->[LOADBALANCER]----+---[ZSERVER_2]----+------[DB] | | +---[ZSERVER_3]----+ What are people using for the load-balancer (and I'm looking for real load-balancing, not DNS round-robbin) so that the multiple front-line servers appear as one big server... ie. so that they are transparent to the outside world. In particular, so that cookies set by any one of the front line servers will be shared by the others. (ie. they can not have different fully-qualified domain names or else cookies set by one will not be shared by another). Does anybody with experience have any recommendations for the load-balancer ? Thank you very much, chas ps. In the past I've got around this by ensuring that if the very first request from a given browser is dealt with by, say, server silo8.domain.com, then all subsequent requests from that browser are also dealt with by by that server. But that (a) introduces head-aches with application logic and (b) is not good if silo8.domain.com suddenly goes down.
The problem is not load balancing, the problem with web applications is load balancing with server affinity. Arrowpoint has a good hardware product for providing this, because it sees session cookies passed back that encode the server that this session belongs to. If you need to hide the structure of web server environment. The Apache Jserv project also uses this technique. Server affinity is important so that state can be maintained between pages. Without it, you have to figure out what the state was by find the other system that served up the previous page. This is expensive in time and bandwidth. However, a method that works as well and is a lot cheaper is to use the Linux Virtual Server (http://www.LinuxVirtualServer.org) project code to provide load balancing to a group of servers. You can decide what parameters you want to use to determine what system to use next: Least Connected is the preferred method. If you are willing to let the world see the balancing you can then use names like www1, www2, etc. www | +------------+------------+ | | | www1 www2 www3 Once handed off, all transactions between user browser and handled by each system respectively. However, you can also configure this so all requests continue to go through www and are then passed to the appropriate backing system, which returns its data directly to the client browser without passing back through the load balancing system. S. On Sun, 11 Jun 2000, chas wrote:
Hi Folks,
I've often heard about the infinite-scalability that will be created by something like ZEO and I've always wondered about one thing : how is the load-balancing being done ?
Just say we have 3 front-line servers (ZSERVER_1, ZSERVER_2 and ZSERVER_3 in the diagram below), each running Zope with identical application logic replicated by ZEO (or simply copied across manually); the front-line servers all use the same database (DB) for storing sessions. Our load-balancer distributes incoming requests between the 3 servers :
+---[ZSERVER_1]----+ | | REQUEST-->[LOADBALANCER]----+---[ZSERVER_2]----+------[DB] | | +---[ZSERVER_3]----+
What are people using for the load-balancer (and I'm looking for real load-balancing, not DNS round-robbin) so that the multiple front-line servers appear as one big server... ie. so that they are transparent to the outside world.
In particular, so that cookies set by any one of the front line servers will be shared by the others. (ie. they can not have different fully-qualified domain names or else cookies set by one will not be shared by another).
Does anybody with experience have any recommendations for the load-balancer ?
Thank you very much,
chas
ps. In the past I've got around this by ensuring that if the very first request from a given browser is dealt with by, say, server silo8.domain.com, then all subsequent requests from that browser are also dealt with by by that server. But that (a) introduces head-aches with application logic and (b) is not good if silo8.domain.com suddenly goes down.
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
+----[ chas ]--------------------------------------------- | | | ps. In the past I've got around this by ensuring that if the | very first request from a given browser is dealt with by, say, | server silo8.domain.com, then all subsequent requests from that | browser are also dealt with by by that server. But that | (a) introduces head-aches with application logic and (b) is | not good if silo8.domain.com suddenly goes down. pps. If you use sessions that are not distributed (i.e. in memory), this is the setup you need. It is a royal pain (thinking IIS + ASP here more than anything) -- Totally Holistic Enterprises Internet| P:+61 7 3870 0066 | Andrew Milton The Internet (Aust) Pty Ltd | F:+61 7 3870 4477 | ACN: 082 081 472 | M:+61 416 022 411 | Carpe Daemon PO Box 837 Indooroopilly QLD 4068 |akm@theinternet.com.au|
participants (3)
-
Andrew Kenneth Milton -
chas -
Scott Boyd