[Opensim-dev] "Friendly teleports" between the standalone sims

Sean Dague sean at dague.net
Thu Sep 27 11:06:37 UTC 2007


On Thu, Sep 27, 2007 at 08:39:11AM +0200, Tleiades wrote:
>   just for a laugh, I've implemented so that the OGS Grid comms now have a Local Grid comm, and forwards all requests to it to see if it can be handled locally, if not, it accesses the grid.
> 
> 
> One second thought, I think we should be very carefull about the levels of indirections
> 
> The comms manager already has a lot, most of the various base classes
> in the inheritance chain try to implement complex logic, user simpler
> - and multiple - methods to the genric comms (be it the local or the
> OGS one), when the comms layer needs database access you will again
> see a lot of indirections.

Agreed.  I think we've got a couple too many layers of inheritance in
the current chain.  I'm always happy when people remove some of them. :)

> We have 2-3-4 different DB plugins (SQLLite and MySQL probably being
> more complete and stable), If you examine both the MySql and SQLite
> plugins, they are again staggered into a hierarchy of logic.
> 
> So if you tweak the local comms layer to attempt a local access first, and then divert to OGS in case you fail, you risk:
> 1) Duplicating the decision of wheter to uses local or OGS in two different layers of the application
> 2) Introduce - atleast increased -latency in the network
> communications, and that will cause the lag monster to appear.

Agreed.  I think our current model on walking through a list of loaded
plugins to do calls around the DB stuff is not good.  We really need to
pick one at load time, and that's our guy.

> I am pretty worried, we have a very flexible engine, with a lot of
> dynamically loaded assemblies, which - atleast on Microsoft -  will
> produce less than optimum compiled code, and we generally use a very
> inefficient network comms protocol (XML-RPC and REST). How can we get
> that to perform well?

Does the JIT really care if you are loading code on runtime?  Any
reference to performance information there would be appreciated.

> I would suggest that we:
> 1) Use .NET remoting for all our communications, out of the box .NET
> comes with TCP, HTTP and IPC channels. IPC is designed to be a local
> machine interprocess communications protocol. TCP and HTTP should be
> pretty self explanatory. The format of the messages can be controlled
> via formatters, out of the box .NET supports binary and SOAP, but an
> XML-RPC formatter is freely available.

The LL model is going to evolve into REST for communication to the Agent
Domain / Region Domain communication
(http://wiki.secondlife.com/wiki/Proposed_Architecture).  Using .NET
remoting for things outside of that (like Region <-> Region
communication) is a win, but we want to make sure not to evolve in a
completely incompatible way with where LL is going.

> 2) Drop local mode.
> 
> If we switch to a complete remoting based communications protocol, it will be possible to use high performance IPC remoting if we are running in stand alone mode, and stil delegate communications on a per server basis via the config files.
> 
> This way stand alone mode, is merely a question of using the right
> configuration. The gains are that we reduce the comlexity of the
> codebase by removing all the local comms stuff. and remove one layer
> of abstraction.

+1 on this approach.  If we can get local IPC fast enough, getting rid
of an extra layer of logic for us would be a good thing.

      -Sean

-- 
__________________________________________________________________

Sean Dague                                       Mid-Hudson Valley
sean at dague dot net                            Linux Users Group
http://dague.net                                 http://mhvlug.org

There is no silver bullet.  Plus, werewolves make better neighbors
than zombies, and they tend to keep the vampire population down.
__________________________________________________________________



More information about the Opensim-dev mailing list