A domain is a realm of control and administration. Specifically, a domain is a set of Fabric3 runtimes that are coordinated and managed together. A domain may be large, comprising multiple runtime instances on separate physical machines, or small, consisting of a single runtime. In a domain, components may be wired and connected to channels and contribution artifacts may be shared.
It is often convenient to partition large domains into a set of smaller regions, or zones. For example, an organization may decide to deploy one application to a set of runtimes and another application to a different set of runtimes. If the organization assigned the applications to different domains, they would not be able to manage them as a whole.
Zones partition a domain into smaller managed units. A zone is a set of one or more runtimes where applications (contibutions) are deployed. A domain always has at least one zone and may contain more. A zone is homogenous. In other words, all runtimes in a zone have the same configuration and host replicas of the same applications.
A distributed domain is composed of a controller runtime and participant runtimes.
The controller manages the domain, including maintaining a contribution repository and deploying applications to zones. A participant is a member of a single zone and hosts application components for the zone it is a member of. Only participants host components and process requests. The controller acts as a simple manager and may be shut down without affecting the ability of the domain to service requests.
Clustering is provided through zones. When components in a contribution are deployed to a zone, they are replicated to all runtimes configured as part of the zone.
Using this architecture, it is possible to construct domain topologies that are easy to manage and scale. A domain consist of multiple zones, each containing clustered participant runtime. However, it is also important to note this architecture scales down. A domain can be comprised of a single runtime instance, in which case the runtime acts both as the controller and participant.
In keeping with the goal of simplicity, the only thing required to configure a domain is to assign each runtime a unique name. Based on the name, Fabric3 will automatically converge a domain consisting of multiple runtimes and create the necessary zones.