JsonSSO Roadmap
The JsonSSO roadmap for this and next year concentrates on two areas: clustering and the addition of session history.
Clustering for scalability and high-availability
JsonSS0 uses a highly efficient in-memory session store based on
java.util.concurrent data structures. Each session object
contains 1 kByte of data on average, which means that 1 GByte of
server memory can hold the sessions of ~ 1 million users.
So with very large installations a more likely scaling issue is not going to
be memory, but rather JSON-RPC request throughput.
To address this web sites with huge user bases may run two or more
JsonSSO instances in parallel, thus spreading the load. The ballancing
can be performed by the login script, by first checking the
session count per JsonSSO instance with
sso.sessionCount
and then dispatching the
sso.login request to the
least busy server.
For fully transparent balancing and clustering a Memcached / Membase session storage is being planned. This will also increase availability as session data will be replicated across more than one server. So if a session server fails users can continue work without their sessions being lost (and having to login again).
Session history
At present JsonSSO logs finished sessions in a text file. To ease
quering of past sessions (by administrators, auditors and users for their
own sessions) a new JSON request sso.listSessionHistory is planned.
This will be backed by an SQL-compatible session history store, to allow
for simple selection and sorting of records by user ID, login period and
other criteria.
The default store will most probably be an embedded H2 instance. Administrators will be able to specify a different SQL database if they choose so. Note that this store will be completely independent from the active session store.
Example request:
{ "method" : "sso.listSessionHistory",
"params" : { "SID" : "5347e9fc-6d20-4183-b3be-67fd35caeb2b",
"userID" : "alice@wonderland.net",
"from" : "2011-05-01",
"until" : "2011-05-02" },
"id" : "0001",
"jsonrpc" : "2.0" }

