This articles describes the high-level architecture of the system.

Core Concepts

An arcology consists of one or more machines, each of which running one or more modules. One of the modules must be the CentralModule (Arcology.exe). That is, every machine has one and only one CentralModule.

A module has one or more engines, which communicate by sending and receiving messages. An address specifies an engine in the arcology. Messages are sent to addresses and can optionally specify a reply address.

For example, engine A may send a message to engine B requesting some service. Engine B processes the messages asynchronously; when done, it sends a reply message back to engine A describing the result (either an error or some other result).

Messages

  • Message ID: This is the type of message being sent. A message ID is usually a string in two parts separated by a dot. The first part is the entity (usually an engine) that defines the message; the second part is the message name. For example, Aeon.insert is a message ID defined by Aeon (the database system) to insert a row into a table.
  • Payload: This is an optional datum containing parameters for the message. The type of data accepted is defined by the message.
  • Reply Address: When sending a message, one may optionally specify a reply address, which identifies the engine that expects the reply.
  • Ticket ID: If a reply is expected, the sender may specify an optional 32-bit value to identify the message instance.

The Arcology

In order to send messages, we must keep track of all machines and modules in the arcology. There are three components that participate in this:

  • Exarch: Exarch is an engine in CentralModule responsible for managing the arcology. Exarch responds to messages to query and manipulate the arcology.
  • Mecharcology Db: The Mecharcology object is a data structure contained by Exarch that is the authoritative view of the machines and modules in the arcology.
  • Mnemosynth: Mnemosynth is a data structure that is replicated to all modules that provides shared memory. We store the current structure of the arcology in Mnemosynth and allow all modules to access it. However, only Exarch is allowed to modify the arcology representation in Mnemosynth based on the data in Mecharcology.