Chris, Pid & all,

I do see the argument for managing session-related data outside of the HttpSession, but for me this is an application development life-cycle issue. The applications that I manage has evolved over 8 years and has thousands of references to data stored in the HttpSession. The requirements for the applications have also evolved over the years. The traffic volumes for this off-the-shelf application is for some of our customers in the millions per day. I also need improved availability, resilience, failover and fault tolerance. I cannot simply replace all session data management (currently using HttpSession) across my entire applications, as the time/resources required to do this is massive. I need to be able to replace the foundation for my applications, while retaining as much of the applications as-is. Nor can I rely on the existing session managers in Tomcat, as these do not scale to meet the traffic volumes that my customers see in their environments.

I would imagine that there are several architects out there that are experiencing similar problems, hence I want to share my work.

The way caching is currently implemented is quick and dirty, and I agree that this should be done in a manner that does not require changes -to the existing web application (ref my development life-cycle requirements above). A request-scope write-back cache is not 100% reliable with multiple concurrent requests. A request-scope write-through cache is better (yet not 100% reliable as you can have stale data in the cache), but performance is not ideal. I will come up with a better solution for this, and I'll revert back to this list.

Thanks to all,
Morten


On 05/04/2012 01:02, Christopher Schultz wrote:
Pid,

On 4/4/12 6:46 AM, Pid wrote:
On 03/04/2012 22:18, Morten Jorgensen wrote:
Thanks to all for your feedback. I am providing some additional
information as requested:
That's interesting.  Can you share some details about how it works?
Sure. It is quite simple. Cassandra is effectively a multi-level
distributed hash-map, so it lends itself very well do storing session
attributes.

The session manager maintains two column families (like tables), one to
hold session meta-data such as the last access timestamp, etc. and one
column family to hold session attributes. Storing or reading a session
attribute is simply a matter of writing it using the session ID as the
row ID, and the session attribute name as the column name, and the
session attribute value as the column value.

Session attributes are read and written independently, so the entire web
session does not have to be loaded into memory - only the session
attributes that are actually required to service a request are read.
This greatly reduces the memory footprint of the web applications that I
am developing for my employer.
I'd be concerned about how chatty that was.

Devil's advocate question: why store data in the session if it's not needed?
Honestly, I was thinking the same thing today: usually, non-memory-based
data management is usually done in such a way as to be completely
divorced from the HttpSession concept, anyway. One needs to use
HttpSession for things like unique ids being assigned to clients, etc.
but then everything else can be done completely separately from that.

There's no reason that a "CassandraSessionManager" would really need to
exist unless you wanted to have completely seamless Cassandra-based
storage. I would argue that you don't actually want that, since you have
to put so much plumbing code in that you end up being a slave to
HttpSession when what you really want to do is store binary data (since
that's all Cassandra *can* store) and have it bound to some unique
identifier (coincidentally the HttpSession id).

I almost think that a Map implementation (with associated identifier,
which could be session-id-based) with a Cassandra backing-store would be
more useful since you could use it in any container and even entirely
outside a container.

I'm starting to be more like +0 to this idea.

-chris



--

Morten Jørgensen
Chief Architect

*OpenJaw Technologies*
T: + 353 (0)1 - 882 5444
W: www.openjawtech.com <http://www.openjawtech.com/>

Join OpenJaw Technologies Group on LinkedIn <http://www.linkedin.com/groups?about=&gid=4074413> / Follow OpenJawTech on Twitter <http://twitter.com/#%21/OpenJawTech>.

We have checked this material for computer viruses and although none has been found by us, we cannot guarantee that it is completely virus free and we do not accept any liability for loss or damage that may be caused. Please therefore check any attachments for viruses before using them on your own equipment. If you do find a computer virus please inform us immediately so that we may take appropriate action.

This communication is intended solely for the addressee and is confidential.

If you are not the intended recipient, please delete this email. Any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to