We don't want to share application space, only physical space (eg all sites are located at c:\inetpub\dnn as the actual website folder). All virtual directories will be in their own app pools (well, 1 app pool per client; the linked image was portals on one level, then app pools then physical dirs then databases).
I am pretty sure that I can take care of the databases by replacing the contents of Config.GetConnectionString with the following:
Public Shared Function GetConnectionString() as String
Return IoC.Resolve(Of ILocationInfo).ConnectionString
End Function
(we already have this interface locating another database that we need to connect to based on the website url)
This should take care of connection string issues simply by the fact that all websites are actually different locations. Unfortunately it doesn't take care of problems relating to files that have been written to the webserver. If Client1 creates a file with one name and Client2 creates a different file with the same name then I wind up with a conflict (suppose both upload an image for an html module on their homepage and they both call it home.jpg; or if both modify a language string that happens to be in the same file).
I think it could work if I were to ensure that each portal on each site was unique (ie site1 has portals 0,1 and 2, site2 has portals 3 and 4, site3 has portal 5 and site4 has portals 6 and 7). If I were to ensure that each site has unique portals then perhaps I can avoid nearly all file modifications; but I don't know the ramifications of not having a master portal available for each instance (ie the portalalias table would only have an entry for the specific portal for a particular site; site3 might have www.example.com/asdf linked to portal 5 and nothing would be linked to portal 0 for that database). What would be ramifications to doing this?
Our process for creating new sites would be:
1. visit the "empty" site as host
2. create portal "newsiteid"
3. make a copy of empty database and call it the newsiteid database
4. setup the information necessary to link the new location to the new database
5. make the new database think that the portal it is for is the host portal
Ultimately what we would end up with is a bunch of databases that are all copies from this original empty database and each have information about the portals created before them. The only question I guess is if information would bleed through from one portal directory to another.
The only issue this (as long as it would work) doesn't solve is the problem of actually writing files to the webserver at all. We want to be able to ultimately provide webfarm support for our clients without having a file server share (which is still a single point of failure) or doing replication and not to require a sticky session. We manage skins, modules and other things that can be installed on a site (and they are installed everywhere, 99% are developed in house).