What I suggest is use nginx + uwsgi or nginx + scgi or nginx + fcgi. You will notice big reduction in resource consuption compared to Apache. Apache can be taken away. By the way you can use any of the above protocols to do balancing over a pool of machines running web2py and in front you can put nginx as balancer.
About caching, what is important is using as much as possible the *static* dir and have the files underneath served by nginx directly. You must check that expiration times on static objects are correctly set. Also use sprites as much as you can. You will enjoy a big improvement because after downloading the objects the first time a client browser will make only requests for the dynamically generated contents. Other objects will be taken by the ondisk cache of the browser. If the object is expired in browser cache, but the content not changed on the server, the request will result only in a 304 answer so little data is exchanged and little computation is required. mic Il 17 aprile 2012 19:10, Bruce Wade <[email protected]> ha scritto: > Currently I just had 1 server running apache mod_wsgi using the same > configuration as pyramid. However I just got approved for a few grand a > month to spend on server resources, so I am looking at load balancers. And I > will put nginx in front of apache, and also start using a lot more caching. > > > On Tue, Apr 17, 2012 at 5:15 AM, Michele Comitini > <[email protected]> wrote: >> >> One more thing make css and js packed + server side gzipped (nginx and >> cherokee can do also gzip caching) >> >> mic >> >> Il 17 aprile 2012 14:12, Michele Comitini <[email protected]> >> ha scritto: >> > If you are on postgreSQL use a process per request setup, you will >> > have a great benefit. Use cherokee or nginx (with keepalive working) >> > you will scale smoothly. >> > >> > Check that you do as much as possible of a page in a single http >> > request (i.e. limit ajax load). Use only one cacheable css and limit >> > the number of scripts or aggregate them in a cacheable file. >> > Check that everything that is cacheable gets cached indeed (use >> > firebug or chrome dev tools to find out). >> > >> > mic >> > >> > >> > Il 17 aprile 2012 14:07, Michele Comitini <[email protected]> >> > ha scritto: >> >> What is your architecture? What do you use as frontend http server? >> >> What protocol: SCGI, UWSGI, FCGI...? >> >> Are you in a thread per request or process per request setup? >> >> >> >> mic >> >> >> >> >> >> Il 17 aprile 2012 08:36, Bruce Wade <[email protected]> ha scritto: >> >>> Yes you are correct plus there was 10,000+ requests a second just >> >>> hitting >> >>> the site I think I really need a load balanced. We are getting on >> >>> average >> >>> 500-1000 new members a day. >> >>> >> >>> On Apr 16, 2012 10:59 PM, "pbreit" <[email protected]> wrote: >> >>>> >> >>>> Don't forget you probably spent quite a bit if time tuning your >> >>>> Pyramid >> >>>> app. >> >>>> >> >>>> The best ways to scale are: >> >>>> 1) Cache >> >>>> 2) Cache >> >>>> 3) Cache >> >>>> >> >>>> Web2py makes caching queries super easy. >> >>>> >> >>>> If you are serving a lot of static assets, check out Cloudflare for >> >>>> free >> >>>> CDN. > > > > > -- > -- > Regards, > Bruce Wade > http://ca.linkedin.com/in/brucelwade > http://www.wadecybertech.com > http://www.fittraineronline.com - Fitness Personal Trainers Online > http://www.warplydesigned.com >

