20,000,000+ page views per day. 1,000,000+ active user accounts. As exciting as those numbers are for the executive team, they are absolutely terrifying for the IT department.
While the CEO is slapping high-fives with the marketing department and watching the bottom line grow, the tech staff are working all night to keep the servers from melting down. Now there's one more tool in the scalability kit for Microsoft shops.For sites like LiveJournal, Wikipedia and Slashdot, the solution has been a distributed caching mechanism, known as memcached
. This wonder thing was dreamed-up by uber-hacker Brad Fitzpatrick (recently of Six Apart
) as part of the original Live Journal effort.
For the computer scientists out there, memcached provides a global hash table of serialized objects that can be spread across multiple machines, and used to store information that needs to be retrieved quickly -- i.e., generally a helluva lot faster than a database lookup. As the table fills up, old data is pushed out using a Least Recently Used (LRU) algorithm.
Unfortunately for .NET based sites and apps, memcached was not an option -- until recently. The current version of .NET uses an in-process cache which makes distributed caching across a web server farm impossible. There are third party solutions available, but who wants to pay an exorbitant price when you can implement a known good option which is free.
It was exactly that attitude that led Germán Mendéz Bravo (Kronuz) to take code originally created by Gregory Block and create memcached for Win32
-- a port of the aforementioned super-utility for the Win32 platform.
Unfortunately, making memcached for Win32 part of your software architecture only solves one side of the problem. In order for the solution to be complete, there must be a client to communicate with the memcached processes running in the server cluster.
Enter a C# .NET memcached client library, appropriately named memcacheddotnet
. This handy lib enables .NET projects to access memcached servers, and can be used within .NET applications to create a distributed caching provider class. Further, according to the memcached wiki
, the Win32 port is to be integrated into the main distribution.
Is this the missing piece to your production environment? If so, head over to the Code Project and check out Fahad Azeem's Memcached ASP.Net Provider solution
For an in-depth article on how memcached was designed and works, check out the deeper discussion
over at Linux Journal.