Hello everyone,

Lately I've been wondering about a new framework for AOLserver web applications. Term "package" below is used to describe on-demand loaded Tcl code, where one package usually serves one application, where usually one application resides per one domain. The previous model is currently used in production on servers that handle many (about 100) domains and about the same number of packages and web applications.

Previously (with 3.4) I've been using the following:

1/ code that allowed dynamic loading of "packages";
The code that was contained in it's own namespace and was loaded/unloaded on demand with reloading on changes.

2/ nsdqe provided session handling - setting the cookie and using ns_set for data plus serialization to harddrive
This was handling all the session stuff plus logging in/logging out.

3/ nscache and similar code to handle cache'ing

This seems to work ok, but for generic approach what I really lack is an OO - ie so that someone could develop a generic "ecommerce" class and inherit for specific implementations. This can be done writing plain procs and passing proper args/configuration variables, but I find this task a job for actual OO.

This also has a downside that ns_cache cannot actually cache Tcl_Obj so if I would get a result from the db this would get serialized to a string and deserialized on first use. I did develop some cache mechanism that does "deepcopy" of the objects and then caches the Tcl_Obj themselves for each thread, this improved the speed a lot.

Right now I'm wondering the pros and cons of the following solution (using 4.0.10, 8.4.12, thread 2.6.3 and some other extensions).

1/ similar code, but one that would initialize a separate thread for each package and load all the neccessary code in there - the package code would be Itcl classes and plain Tcl code (in the future this could use VFS and maybe tbcload to allow redistribution of the code)

2/ session mechanism (which would require sessions to initialize main website engine) that would create instance of an application object per each session - so that each user would be an instance

3/ most data would be cached using Tcl_Objs (maybe even not using nscache)

4/ Background jobs could also use the same thread, using common non-AOLserver methods (after/fileevent etc)

The objects would allow serialization/deserialization by supplying name-value data that would be saved by the session manager. Session would only allow X number of concurrent sessions and serialize+delete the oldest ones when new ones need to be created.

Pros:

* much better app designing framework

* using event loop for packages

* one thread per package would solve most multi user scenarios

Cons:

* any change in the package code would require serializing all instances and reloading the package
  (but it's not common to experiment with

* non-session aware browsers will not be able to use most of the functionality (some functionality could be done by supplying a generic instance for all non-session aware)

* it would be easy to do a DoS by generating a lot of sessions
  (since serialization/deserialization would take a lot of time)

* sync DB operations could cause a freeze for many customers (especially with long lasting queries)

Any comments on this?

--
Wojciech Kocjan
[EMAIL PROTECTED]


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]> 
with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.

Reply via email to