views:

201

answers:

4

Hi,

I'm investigating for a free, high available, high performance solution for caching or storing .net session data (for a high traffic website). I don't want to use a db (db is the bottleneck on traffic increase).

There're some key/value stores, but as far as I know they don't support .net objects. And there're some distributed or replicated caching solutions that supports high availability.

But, which is the best way to store session data (better if it runs on mono) ?

EDIT: For high availability, I have to replicate user session data to more than one machines. I can write a serializer if it's needed to achieve the best method. User sessions contains standard objects needed for an e-commerce site.

Regards, Sirmak

A: 

Well, first you need to determine what you are storing in the session. There are some things that just can't be serialised at all. You may, however, implement your own serialisation routines for relevant objects, and store them in a fashion that you make up. For example you may internally to a BinarySerialisation, then write the object as a base64 encoded string into a caching tool (memcached or whatever) and retrieve it.

But also, what sort of scalability are you going for here? Are you swapping users between servers per request? If so, you'll need a central, or at least mirroring, cache system at least.

If you'll be keeping a user on the same server, but may have many, then it doesn't really matter, you can use an external process on the same machine to cache.

I think you'll need to provide a bit more information. I'm not familiar with running things on mono, (so I'd just recommend the asp.net state service) but my guess is a 3rd party caching process, like memcached, may be good.

Noon Silk
+2  A: 

If you are talking free, then MySQL is capable of handling high volume traffic (on the right hardware obviously)

Mitch Wheat
+3  A: 

Well you can use the Session State Server which runs as a windows service, but in order to make that work in a web farm scenario you will need to have one of the web servers run the Session State service and the other web servers will coordinate with that single web server. This of course is a problem if your web server goes down which is running the service.

Another option would be to use memcachd which is a distributed in memory session state server. This is free and there is already a provider for .NET for this framework. It is fairly mature and has been around for a while.

If you have money to spend then Scale Out server might be an option. I have been told however that on really large scale web sites that the scale out technology needs to be recycled from time to time.

Coming around the bend from Microsoft is Velocity, which is the .NET equivilant to memcached. This is not released yet, and is not a mature technology.

You will need to choose the solution that fits your technical and financial requirements.

Michael Mann
A: 

For caching you can use memcacheD.

merin