What Powers SmartJabber
22 Apr 2008
I've had some inquiries to what powers SmartJabber, so I decided to write up a quick outline of the technology that is being used to power the new service.
In case you hadn't heard yet, I recently launched a new company called SmartJabber. The general idea behind the service is to offer an automated support agent via a "live chat" window. It's a cheap alternative to hiring someone to do basic live chat support.
The tool can be used to convert visitors into customers, save sales or offer a basic level of customer service (say on an FAQ page or something). There is a lot of work that goes on the back end that makes this service fast and reliable. In this geeky post, I will go over some of the technology that I used to create this tool.
Python was used for the programming on the back end. This includes the web site and back end processing. I went with Python because I love the language for a number of reasons and I have a lot of experience writing web applications using it.
Django is the ultimate web framework, written in pure Python. I began learning Django over a year ago and have worked on numerous projects using the framework since. I've created web apps using a variety of different languages and none of them can compare to the Django framework (at least in my opinion).
PostgreSQL is the most powerful and feature packed open source database system available. PostgreSQL is used to store all the records and statistics that are part of the SmartJabber service. Each chat instance is logged, with full records and tracking of user action. Because of the amount of data we store, track and process every day the database needs to be powerful enough to handle the service load. PostgreSQL should handle this just fine.
Memcached is an ultra light caching daemon that stores it's entire cache table in the server RAM. Because of this, and the access method, the results are stored, fetched and removed at a lightning fast speed. Memcached is used to store the results of some of the heavy processing that occurs often. To keep server load down, we store the results of various computations for an extended period of time.
Amazon AWS S3 is a "storage in the cloud" solution that provides super cheap data storage. The service cost is related to your direct usage. In other words, you only pay for what you actually use. Because of this policy, a lot of startups (and big companies too) use this service. We use S3 for the serving of all static media.
The actual chat window was created using Javascript combined with basic CSS usage. In other words, it's AJAX. Being that I am a Javascript weenie I hired out this aspect of the project, which was definitely a smart decision.
The entire service is run from 4 servers that handle an array of functions. While everything is designed to be highly scalable from the ground up, a lot of performance gains come from the user of S3 and Memcached. We also made sure to tune Django as much as possible to squeeze out every last drop of performance. Because Django is already pretty fast, and because of our layout, the service is very fast and if the cluster becomes a little loaded we can simply throw servers at the problem.
That's roughly the gist of it. Feel free to ask any specific questions you may have.