The single biggest challenge in scaling an Internet service is the database. In my experience, the ways things generally work is like this: you put up an Internet service using a single instance of a basic database, like MySQL or BerkeleyDB. Everything is run off that single database. As you grow, the database becomes overloaded, and then you begin an endless cycle of scaling work. First, you split the single database into multiple, unrelated databases. You also need to worry about reliability, and so start looking at things like hot backups. Then you look at adding read-only copies of your databases, and with those you have to worry about keeping things in sync and other related hassles. And of course you start implementing in-memory caches using something like memcached, which are great, but have their own issues as well (cold caches on restarts being the biggest I can think of off hand). All of this takes a lot of work, a lot of expertise, and a lot of maintenance.
Two items relating to databases caught my eye this week. The first was the
benchmarking of a RAID consisting of Solid State Drives, or SSDs. An SSD is basically a chunk of non-volatile RAM in a package with a disk-drive interface. They're designed to replace standard hard drives with something with the performance of RAM. While SSDs have been in development for a few years, I think they're really starting to become interesting