Skip to main content

Memcache and Nginx

So, in my eternal search for sub 100ms TTFB for all sites we work on, have been working on further improvements to our NGINX based load balancer/accelerator.

We front all of our web sites and applications and sites with NGINX, and it has served us very well so far. With  a great deal of our sites powered by node.js, which tends to suck at file serving we have been looking beyond just caching, looking to further steps the eliminate even more calls to the web servers (not only for node, but for PHP sites as well.)

Getting nginx to pull files from memached is pretty straight forward, (more on that later), but the problem is how to get those assets into memcached in the first place.

The obvious solution is to modify the application's code to put their html output into memcache themselves... but this has not always been practical.

An elegant hack?

So to get the ball rolling without touching the app code, I put together a python app which pulls files down, and puts them into memcache itself. This is a rather quick solution for sites getting a large peak in traffic, and in general keeping static file access from impacting the application servers.

It still under construction but here it is at github.


Whats next...

  1. Integrate minificcation for js and css files (maybe html as well?)
  2. Build a flask web app, which can be used as the fall back, which would fill memcache as well as returning the file directly to the client, to enable self priming memcache.
Will post nginx config as well....

Comments

Popular posts from this blog

A more sane approach to elastix call recordings

We put together this solution a while ago (thanks Brother Miles!), but never documented it, thought it would a good idea to put it here for anyone else who might need this (and anyone who uses Elastix for high call volume, probably does. The challenge. Elastix/Freepbx has good call recording abilities, but very strangely just dumps everything into a single directory. This can get REALLY bad if you have tens of thousands of calls per day, I have run accross a few scripts to convert and mode call recordings after they are saved, but that is a waste of resources, and makes it hard to integrate call recording UI's. So we figured out the 2 places that need to be changed so that all recorded calls are saved in a Year/Month/day file structure. Just 2 files For regular calls, we need to alter the included and symlinked extensions.conf, this is found at /etc/asterisk/extensions.conf we just need to add the macro-dialout-trunk-predial-hook, which already exists as a secti...

Cloud Enterprise Project/Program Management Tools

In our ongoing quest for an integrated, cloud/Open Source hybrid Business Operating System, we need to pick and implement a tool for project/Program management. Environment Our organization has 8 separate companies, which we need to track project progress across all 8.  For some companies, end users (project resources) will enter information themselves. For other companies and projects, a project co-ordinator will track progress manually from resource input. Task tracking can be on many levels, some projects will be quite detailed, other will be tracked at the milestone level only. Basic Requirements In order for this component to be successfull, it needs to satisfy the following requirements. Integrate with GApps for authentication. Integrate with GApps for document associations Support a fairly large number of project contributers/users (about 100). Handle multiple projects. Enable reporting on multiple levels, from detailed to executive overview. ...

Installing dependancies for Sun Ray on Centos 5.8

Ooo the beauty of Linux based proprietary thin clients... One of the best parts is that operating systems get updated, and SRSS doesn't. So re-installing/updating SRSS can be a bit of a moving target. So here are notes from my latest install. Dependencies and prerequisites yum install glib dhcp openldap-clients openldap tftp-server libXp openmotif22 openssl compat-libstdc++-33 libusb-devel compat-openldap gdbm.i386 openldap-devel pdksh libXfont yum groupinstall "Development Tools" wget http://pkgs.repoforge.org/htop/htop-1.0.1-1.el5.rf.x86_64.rpm yum install htop-1.0.1-1.el5.rf.x86_64.rpm (ok, not really required, but helpful on gauging load easily) wget ftp://mirror.switch.ch/pool/3/mirror/centos/5.8/os/i386/CentOS/glib-1.2.10-20.el5.i386.rpm yum install  glib-1.2.10-20.el5.i386.rpm --nogpgcheck -y cd /usr/lib ln -sf libldap-2.3.so.0.2.31 libldap.so.199 ln -sf libgdbm.so.2.0.0 libgdbm.so.3 ln -sf liblber-2.3.so.0.2.31 liblber.so.199 extract the include...