A developers toolbox?
Yesterday I posted about DIBI, a web conference I attended recently. One speaker, Gareth Rushgrove, spoke about how a modern web developer has many tools available to them to do their job. The title "web developer" should actually be replaced with just "developer" as we now have to deal with much more than just the web.
So what tools are there that could make your web apps run faster and more reliably? Just a few mentioned during the talk were: -
-
Nginx - nginx.org
A very lightweight, FAST web server. An interesting quote mentioned during the talk was by Chris Lea,
“Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and does five of them 50 times faster than Apache”.
-
Memcached - memcached.org
A high performance distributed caching system intended to increase speed of dynamic web apps by relieving database load. It is also useful in that it scales as your server resource grows.
-
Apache Solr - lucene.apache.org/solr
How many of us are guilty of building a website, then dropping on a search box right at the end and not spending any time thinking about how we are actually going to obtain the results. Running direct database queries is not only slow, but very expensive! Plus, as your site grows, the search will come back and bite you and eventually, take your server(s) down.
Enter Solr, a fast, open source search platform from the Apache Lucerne project. Features include full-text search; hit highlighting and even handles rich document formats like Word and PDF.
Written in Java, it runs as a standalone full-text search server on something like Tomcat. It has REST HTTP/XML and JSON APIs that means it can be accessed from more or less any programming langauge without any need for Java coding.
-
RabbitMQ - rabbitmq.com
Traditionally the web has always done everything synchronously. A request is sent to a server, data is processed and finally the result is sent back. This is fine if the request is minor, but what if the server elected to process the request takes 15 seconds? Is the user expected to wait, or can they go on and send further requests? By queueing messages it takes load off servers, which can just pop a message off the queue when it has spare capacity, and also means users aren’t sat waiting for a result to be returned.
-
Data storage with CouchDB - couchdb.apache.org
Sometimes a full relational database is overkill when you just want to store a large amount of data. CouchDB is schema-free meaning that as your data evolves, it will evolve with you. Normally with relational databases like MySQL you would have to migrate existing data to fit into a new schema. With couchDB this isn’t the case, as no schema is enforced, new data can be safely added alongside the old.
-
Hadoop - hadoop.apache.org
Hadoop is useful tool for distributing tasks across many nodes in completely different geographical locations. Whatever you would use hadoop for, you would need Hadoop common, plus one or more of its subprojects such as HDFS (Hadoop Distributed File System); HBase a scalable distributed database for storing large tables of data or MapReduce, a framework for distributing processing of large data sets across multiple nodes.
-
Cucumber - cukes.info
A Behaviour Driven Development tool, Cucumber allows ‘tests’ to be written in the form of plain text feature descriptions with scenarios. These scenarios can then signed off by project stakeholders, business analyists and collegues. Production code can then be written to make the ‘stories’ pass. Cucumber is written in Ruby, but can be used to test many other languages such as Java, C#, Python and PHP.
-
Puppet - puppetlabs.com
More and more developers these days need to also be some kind of sysadmin. Whether its being a full on linux geek or not, setting up a server for production use is now a required skill. This is where Puppet comes into play. No matter how many times you do it, installing and configuring a server is a pain. By using puppet, you can declare multiple setups depending you what you will be using the node for. Do you need a bare bones install with SSH running? What about extending this node declaration and adding on Nginx? With puppet this is as simple as extending a class in PHP!
Comments [0]
