Archipelago components encapsulate discrete elements of functionality. Components can support state or be stateless, they accept messages and process these messages asynchronously in delivery order. A component can, depending on message type, contents and component state, alter it's state (if any) and optionally send messages to other components.
Homogeneous groups of components form logical cells, allowing a direct potential to exploit concurrency via managed distribution. Cells are logical functional equivalents of their contained components and are the endpoints of the wiring process defining the structure and flows of the next level of composition, reactors.
Reactors are a logical grouping of cells, simple Directed Acyclic Graphs (DSGs). Reactors define discrete functional flows (processing streams) and are effectively subsystems which in themselves can be composed into higher level subsystems or as entire systems.
Compound structures are robust logical definitions, their physical mapping may result in components co-located on the same JVM instance, on the same physical or virtual server node, spanning a cluster or network or even remaining dormant and persisted awaiting activation in any of these spaces.
We rely heavily on our choices of languages, libraries and technologies and one of the most important characteristics we look for is
expressiveness. If we cannot express the concepts, data and algorithms of our design effectively we immediately disadvantage ourselves. If
our work cannot be read and understood easily, concepts become weakened and interpretation becomes harder, forcing us to continuously
read, comprehend and reconsider. The artifacts we create must be self documenting and contribute to system as a whole.
Small code and config sizes are a matter of pride for us.