Difference between revisions of "Architecture/Robust"

From LookingGlass

Jump to: navigation, search
(initial)
 
(half formatted)
Line 1: Line 1:
 
===Robust Architecture===
 
===Robust Architecture===
 
"Robust" is two things:  
 
"Robust" is two things:  
  - a modular system of connectors enabling flexible configurations
+
* a modular system of connectors enabling flexible configurations of grid services; and  
  of grid services; and  
+
* a container for running back-end grid services
  - a container for running backend grid services
+
  
 
We'll start with the first and work up to the second.
 
We'll start with the first and work up to the second.
Line 9: Line 8:
 
The Robust connector architecture links together request APIs to
 
The Robust connector architecture links together request APIs to
 
service providers with a set of modules that are loaded and
 
service providers with a set of modules that are loaded and
configured at simulator startup time.
+
configured at simulator start up time.
  
 
Let's work through an example for a standalone grid.
 
Let's work through an example for a standalone grid.
  
In "Standalone.ini", there is
+
In <tt>Standalone.ini</tt>, there is
 
     [Modules]
 
     [Modules]
 
         AssetServices = "LocalAssetServicesConnector"
 
         AssetServices = "LocalAssetServicesConnector"
  
"LocalAssetServicesConnector"'s code is in  
+
<tt>LocalAssetServicesConnector</tt>'s code is in  
OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset. This module
+
<tt>OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset</tt>. This module
presents an IAssetService interface and provides that functionality
+
presents an <tt>IAssetService</tt> interface and provides that functionality
by looking up a local service module in Standalone.ini
+
by looking up a local service module in <tt>Standalone.ini</tt>
  
LocalAssetServicesConnector finds in Standalone.ini:
+
<tt>LocalAssetServicesConnector</tt> finds in <tt>Standalone.ini</tt>:
  
 
     [AssetService]
 
     [AssetService]
 
         LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
 
         LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
  
LocalAssetServicesConnector loads the asset service (see note below)
+
<tt>LocalAssetServicesConnector</tt> loads the asset service (see note below)
 
which implements local database access for assets.
 
which implements local database access for assets.
  
Line 34: Line 33:
 
         AssetService = "RemoteAssetServicesConnector"
 
         AssetService = "RemoteAssetServicesConnector"
  
"RemoteAssetServicesConnector"'s code is in
+
<tt>RemoteAssetServicesConnector</tt>'s code is in
OpenSim.Region.CoreModules.ServiceConnectorOut.Asset and
+
<tt>OpenSim.Region.CoreModules.ServiceConnectorOut.Asset</tt> and
presents an IAssetService interface as well as inheriting the
+
presents an <tt>IAssetService</tt> interface as well as inheriting the
"AssetServicesConnector" class. This module uses the URI
+
<tt>AssetServicesConnector</tt> class. This module uses the URI
specifed in the [AssetService] section to connect
+
specifed in the <tt>[AssetService]</tt> section to connect
 
to the remote grid service.
 
to the remote grid service.
  
As a side note, the connectors specified in the [Modules]
+
As a side note, the connectors specified in the <tt>[Modules]</tt>
 
section are loaded via  
 
section are loaded via  
OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin
+
<tt>OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin</tt>
which loads all the modules with the extension "/OpenSim/RegionModules".
+
which loads all the modules with the extension <tt>"/OpenSim/RegionModules"</tt>.
 
This extension is specified either in the source of the module or in
 
This extension is specified either in the source of the module or in
one of the XML resource files (like "CoreModulePlugin.addin.xml").
+
one of the XML resource files (like "<tt>CoreModulePlugin.addin.xml</tt>").
 
Later connectors are usually loaded by the Robust plugin loader
 
Later connectors are usually loaded by the Robust plugin loader
(OpenSim.Server.Base.ServerUtils.LoadPlugin). This latter loader takes
+
(<tt>OpenSim.Server.Base.ServerUtils.LoadPlugin</tt>). This latter loader takes
 
the parameter "DLLName:PackageID" which is what you will find elsewhere
 
the parameter "DLLName:PackageID" which is what you will find elsewhere
 
in the configuration files.
 
in the configuration files.
  
 
For the grid configuration, each region in the simulator is connected to
 
For the grid configuration, each region in the simulator is connected to
a "RemoteAssetServicesConnector" which implements the "IAssetService"
+
a <tt>RemoteAssetServicesConnector</tt> which implements the <tt>IAssetService</tt>
 
interface by making network requests.
 
interface by making network requests.
  
Line 61: Line 60:
 
and access the database a container is needed
 
and access the database a container is needed
 
which reads configuration and assembles all the connectors. The
 
which reads configuration and assembles all the connectors. The
application "Robust.exe" reads "Robust.ini" and starts up all the
+
application <tt>Robust.exe</tt> reads <tt>Robust.ini</tt> and starts up all the
services specified in "ServiceConnectors".
+
services specified in <tt>ServiceConnectors</tt>.
  
 
Continuing with the asset service example, the parameter is  
 
Continuing with the asset service example, the parameter is  
"8003/OpenSim.Server.Handlers.dll:AssetServiceConnector".
+
<tt>"8003/OpenSim.Server.Handlers.dll:AssetServiceConnector</tt>.
 
This connector looks up the asset service in Robust.ini:
 
This connector looks up the asset service in Robust.ini:
  

Revision as of 17:50, 12 September 2010

Home < Architecture < Robust

Robust Architecture

"Robust" is two things:

  • a modular system of connectors enabling flexible configurations of grid services; and
  • a container for running back-end grid services

We'll start with the first and work up to the second.

The Robust connector architecture links together request APIs to service providers with a set of modules that are loaded and configured at simulator start up time.

Let's work through an example for a standalone grid.

In Standalone.ini, there is

   [Modules]
       AssetServices = "LocalAssetServicesConnector"

LocalAssetServicesConnector's code is in OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset. This module presents an IAssetService interface and provides that functionality by looking up a local service module in Standalone.ini

LocalAssetServicesConnector finds in Standalone.ini:

   [AssetService]
       LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"

LocalAssetServicesConnector loads the asset service (see note below) which implements local database access for assets.

Now let's look at Grid mode. The entry in "Grid.ini" is

   [Modules]
       AssetService = "RemoteAssetServicesConnector"

RemoteAssetServicesConnector's code is in OpenSim.Region.CoreModules.ServiceConnectorOut.Asset and presents an IAssetService interface as well as inheriting the AssetServicesConnector class. This module uses the URI specifed in the [AssetService] section to connect to the remote grid service.

As a side note, the connectors specified in the [Modules] section are loaded via OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin which loads all the modules with the extension "/OpenSim/RegionModules". This extension is specified either in the source of the module or in one of the XML resource files (like "CoreModulePlugin.addin.xml"). Later connectors are usually loaded by the Robust plugin loader (OpenSim.Server.Base.ServerUtils.LoadPlugin). This latter loader takes the parameter "DLLName:PackageID" which is what you will find elsewhere in the configuration files.

For the grid configuration, each region in the simulator is connected to a RemoteAssetServicesConnector which implements the IAssetService interface by making network requests.

This is where the Robust grid service container comes in.

To implement the receiver of the asset requests and access the database a container is needed which reads configuration and assembles all the connectors. The application Robust.exe reads Robust.ini and starts up all the services specified in ServiceConnectors.

Continuing with the asset service example, the parameter is "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector. This connector looks up the asset service in Robust.ini:

   [AssetService]
       LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"

Well look at that! This is exactly the same asset service code loaded by the standalone configuration. So, what one ends up with is a network connector in the region which can talk to a network connection receiver in Robust.exe which is running the exact same code as the standalone asset service.

<<picture of networked asset service>>

This connector architecture is used for all the services and each region service can be individually configured for remote or local connections and code can be shared between the standalone setup and the grid services setup.

Since everything is parameterized, there is no reason that there be only one grid service -- there can be many Robust.exe's each configured to run some of the grid services. Similarly, some services could be local while others remote. Why you'd do that I don't know, but it's possible.

<<picture of multiple grid service servers>>

HYPERGRID

OTHER NOTES

There has been some confusion about the different available grid backends (Robust and Simian).

The Robust backend uses C# code to implement the grid service (asset, inventory, ...) and the code is modularized in such a way that the same code can be used for standalone and grid simulator configurations. The Simian backend, on the other hand, is an implementation of the grid services using REST/PHP/etc. So, Robust and Simian both use the Robust connector architecture but use different protocols and data storage systems on the backend.

Personal tools