On Jul 25, 2007, at 9:30 AM, Mike Wynholds wrote: > well, I did come up with a solution, however it is Resin-specific > and requires some client-side code at all login points (ie: there > is a customer login implemented in Flex as well as an > administrative login implemented in HTML). > > I set up apache for the web-tier and resin as the app-tier, > connected by mod_caucho. I have an idea of the overall systems > architecture, but for this discussion we just assume that there is > some farm of apache servers that are available under a single URL. > > Resin offers a way to specify a preferred app-tier server in the > cluster by accessing the web-tier and passing in a pre-fab > jsessionid, utilizing the Resin-specific algorithm of starting it > with an "a", "b", "c", etc. for example, if I wanted the second > server listed in the cluster in resin.conf, I request the following: > > http://www.myserver.com;jsessionid=b
I'm finally getting a chance to look at this. Does the project selection occur before you have a session? In other words, would something like the following work? request.setAttribute("caucho.session-server", "b"); session = request.getSession(true); If the session is new, then it will be assigned an ownership of server "b", even if that's a totally different machine than the current server. The next request will be directed to server "b", which will be the same as the pinned data. -- Scott > > now, if there is no current session, mod_caucho will do its best to > point the web-tier to the second server in the app-tier cluster. > it will still, however, fall back to the other clustered servers if > B is down. this is exactly what I want. > > the downside to this solution is that my client code has to do some > work to make this happen. as a user logs in, the client must a) > clear the session, and b) figure out the appropriate URL (ie: > jsessionid prefix) to use and switcheroo it in as the user logs in, > based on the project number entered in to the login form. > > I actually have a server-side servlet that does the logic, so I > just need a way to call it easily. basically, in Flex I just use > the standard Flash mx:HTTPService, which is easy, and in HTML I > just use AJAX. so it's not too bad, but it would be nice if it was > even more "behind the scenes". it can't be 100% behind the scenes, > tho. I would at least need a convention of putting the project > number in the session or in the login URL under a specific name, or > something like that, even if I could do custom load balancing login > on a hardware load-balancer. > > anyway, so far so good. > > any suggestions for improvements would be definitely appreciated! > > ..mike.. > > ..... > Michael Wynholds > President > Carbon Five, Inc. > 310 821 7125 x13 > [EMAIL PROTECTED] > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:resin-interest- > [EMAIL PROTECTED] On Behalf Of Jay Ballinger > Sent: Wednesday, July 25, 2007 8:43 AM > To: General Discussion for the Resin application server > Subject: Re: [Resin-interest] Resin / Apache load balancing with > customResin server weighting (for data segmentation purposes) > > Mike, > > This sounds like a perfect use for a hardware load-balancer. A > hardware load-balancer can create the affinity for a particular server > much like you describe - except for the choosing of a server based on > your algorithm, that is. > > Most hardware solutions implement some sort of persistence feature > where, once a load-balancing decision has been made by the device, it > will try to persist that same 'user' to that same server for a > configurable amount of time. We use this to keep a user's access and > application log on one server versus having to hunt around all the > servers to piece their session together. > > If you are trying to create logic that says, "All project 'A' users go > on server 'X'," I see that as a big challenge for the chicken-egg > scenario you describe - the user already has an affinity to a server > before you know the user or the project. However, there are some > pretty slick hardware load-balancers out there that can use > cookie-driven values. Check out the lineup from F5 - specifically > their Big-IP Local Traffic Managers. > > Of course, you could have a farm of login servers that simply takes > the login info and then redirects the user to a different farm of > servers based on the project info. > > Good luck, and let us know what you come up with. > > + jay > > On 7/11/07, Mike Wynholds <[EMAIL PROTECTED]> wrote: >> >> >> >> >> I have a somewhat complex load balancing scenario that I wish to >> accomplish. >> From my investigation it seems that it's *probably* possible but >> I haven't >> gotten it to work yet. Here is the scenario: >> >> >> >> I have a web app running on Resin 3.1.1 with Apache 2.2 in front >> of it. I >> want to have multiple Resin servers in a cluster. I may have >> multiple >> Apache servers as well, but I don't think that's important. If I >> do I will >> have a hardware load-balancer in front of that. >> >> >> >> I want to achieve both failover and server scalability with my >> systems >> architecture. I think I can utilize a clustering solution to >> handle this. >> I will need to cluster both Resin sessions as well as a number of >> memory/disk caches using the distributed mode of EhCache (or possible >> JBossCache). So far the Resin session clustering is working >> fine. However, >> for efficiency I really also want to segment my data between >> users, in order >> to reduce either a) the amount of cache replication (if I use cache >> replication) or b) the amount of cache misses (if I use cache >> invalidation) >> in EhCache. >> >> >> >> When people come to the site, they are given a login page >> immediately. >> There are two entry points: one is HTML-based and one is Flash/ >> Flex-based. >> Either way the user is prompted to log in with a username, >> password and a >> project number. I want to pin all users logged in to a particular >> project >> to the same backend server so that the EhCache can be used as >> efficiently as >> possible. >> >> >> >> But while I say I want to "pin" specific users to specific backend >> servers, >> I really also want the failover capability built in to load- >> balancers. So >> what I *really* want is a way to suggest to the load balancer >> which server >> to prefer, but allow it to fall back in the case of a server being >> down. My >> algorithm for choosing a server to suggest is simple: I just hash the >> project number, mod by the amount of servers, and choose that >> one. Not >> smart, but for now that's fine. >> >> >> >> I feel like I will want to use the Resin load balancing features >> (although I >> am open to other suggestions). From the docs it seems like there >> may be a >> way to do it. I have spent a few hours on this and am not seeing >> a very >> clear solution. My main theoretical issue is that when the user >> hits the >> login page a session is created. There is no way to know which >> project >> number the user will then enter, and therefore which server to try >> to pin >> him too. But then if he enters a project number, Resin already >> has him >> pinned to a server by the jssesionid. >> >> >> >> Is there a way to tell Resin to keep the session but now house it >> on a >> different server? >> >> >> >> I think the logic of project number à server needs to be in the app >> somewhere (ideally the server side, not the Flash side). Can I >> set a cookie >> or something that can be sniffed by Resin's load balancing >> capabilities that >> will determine the suggested server to pin to? >> >> >> >> I can kind of see the light at the end of the tunnel but haven't >> been able >> to come up with even a best theoretical approach to this problem. >> There is >> just too much about Resin load balancing, mod_caucho, hardware load >> balancers and the such that I am not intimately familiar with, and >> I don't >> want to reinvent anything that already exists and works well. >> >> >> >> Thanks for any suggestions. >> >> ..mike.. >> >> >> >> ..... >> >> Michael Wynholds >> >> President >> >> Carbon Five, Inc. >> >> 310 821 7125 x13 >> >> [EMAIL PROTECTED] >> >> >> _______________________________________________ >> resin-interest mailing list >> resin-interest@caucho.com >> http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest