Leverage reactive multi-core with DDD
RSocket is now supported for very fast TCP and even faster Aeron Messaging over UDP.
What is nice about @vlingo_io design is that all components like cluster, wire, directory relies and uses actors. For example Vlingo.Wire which is the TCP/UDP com. library relies on Vlingo.Actors and there are actors like request response channel actor, or inbound stream actor
— Tomasz Jaskuλa (@tjaskula) May 7, 2019
A key component that sits on top of our Reactive foundation, supporting the development of scalable and fault-tolerant tools and applications. You will implement and deploy your services/applications in clusters, with managed actor message passing between cluster nodes.
In addition to scalable fault-tolerance we also provide cluster-wide, synchronizing attributes of name-value pairs. This enables the cluster to share live and mutating operational state among all nodes. Likewise, application-level services can also make use of cluster-wide, synchronizing attributes in order to enhance shared application/service values.
Generally a cluster will be composed of multiple nodes of an odd number (not just one, but for example, 3, 5, 21, or 49), which best supports our consensus protocol in determining a quorum of healthy nodes. Due to our Reactive foundation, even a small number of nodes may outperform much larger clusters that use blocking runtimes.
Our schema registry provides the means for Bounded Contexts, a la services and applications, built using other components, to publish standard types, or schemas, that are made available to client services that consume these types with data. The published standard types in the registry are arranged in an organizational, services, and type hierarchy.
Organization: There may be one or many top-level organizations. An organization is the owner of all schemas under its hierarchy.
Unit: There may be one or many units under an organization. A unit is representative of some kind of business unit, division, or department. A unit’s name is flexible and may include dot-notation to create uniqueness in a large organization.
Context: A logical application or (micro)service within which schemas are to be defined and for which the schemas are published for potential consumers. You may think of a Context as the name of the Bounded Context, and it may even be appropriate to name it the top-level namespace used by the Context:
com.saasovation.agilepm
Category: A type division within a Context. Supported categories are: Command, Data, Document, Envelope, and Event.
Schema: The name and description of a given categorized schema. Each schema has at least one version and may have several.
SchemaVersion: Every schema has at least one version, and may have several. A Schema Version holds the specification of a particular version of the schema, and also holds a description, a semantic version number, and a status. The description is a textual/prose description of the purpose of the version. The specification is a simple DSL that defines the structure and attributes of the given version of the schema. The following is an example schema version specification under the Event category:
event PriceChanged {
version eventVersion
timestamp occurredOn
string productId
BigSale:Marketing:Pricing:Data:Price newPrice
}
The above specification is dependent on the following schema version specification under the Data category:
data Price {
double amount
string currency
}
Combined, these two schemas define a single schema of a Domain Event named PriceChanged that is published by:
BigSale:Marketing:Pricing
Additional tooling generates the schema definition in source code for the programming language of the dependent consumer.