Components
VLINGO/SYMBIO
VLINGO/SYMBIO
VLINGO/SYMBIO, that’s an unusual name. What is its origin?
OK! Interesting! Tell us more about VLINGO/SYMBIO.
Sure. The VLINGO/SYMBIO parent tool is a set of protocols and default in-memory implementations. The protocols are usable by concrete implementations. The in-memory implementations are useful for testing. It is the Reactive, scalable, and resilient Object, CQRS, and Event Sourcing storage and projection tool for services and applications built on the VLINGO/PLATFORM.
A set of protocols. Fascinating. What are they?
There are three primary kinds of storage mechanism protocols available: ObjectStore, StateStore, and Journal. In recent years, object storage has been managed by a technique known as object-relational mapping (ORM), where objects are disassembled to fit into the relational table, row, and column structures. Many ORM tools are available to developers. All of these are or can be supported by a VLINGO/SYMBIO ObjectStore implementation.
What ObjectStore implementations are available?
We have Apache Geode, HSQLDB, PostgreSQL and YugaByte implementations. Adding support for other databases is a snap and will be supplied on a need basis.
What is StateStore?
StateStore is a simple CQRS Key-Value storage. The values can be of type CLOB/BLOB. The StateStore mechanism can be run against a number of persistence engines. Use it for both Command/Write Models and Query/Read Models.
Have you implemented StateStore in VLINGO/SYMBIO?
Yes! These are the available storage implementations: Apache Geode, DynamoDB, HSQLDB, and PostgreSQL. Adding additional JDBC storage delegates is a straightforward process requiring a few hours of work. We welcome you to add support for your favorite database!
What is Journal Storage? And what do you have implemented?
The Journal and related protocols support simple-to-use Event Sourcing, including Journal Reader for streaming across all entries in the journal, and Stream Reader for reaching individual “sub-streams” belonging to entities/aggregates in your application. VLINGO/SYMBIO has implementations in JDBC over Postgres and FoundationDB and supporting asynchronous readers.
VLINGO/SCHEMATA
VLINGO/SCHEMATA
Your Published Language, Managed.
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.
VLINGO/STREAMS
Implements the Reactive Streams specification for the VLINGO/PLATFORM. It implements all four abstractions: Processor, Publisher, Subscriber, and Subscription, along with additional APIs for stream processing convenience. It is possible that you will never implement a Processor, Publisher, Subscriber, or Subscription yourself. Default implementations of these are provided by our fluent API. You will, instead implement Source and Sink types. VLINGO/STREAMS runs on our foundational VLINGO/ACTORS component, providing scaled Reactive concurrency for stream processing.
VLINGO/LATTICE
Getting to know VLINGO/LATTICE
What is it?
A reactive compute grid for process distributed domain and data objects. Includes tooling used to easily implement Reactive Aggregate persistence, projections, querying, and messaging across services, such as DDD Bounded Contexts. The VLINGO/LATTICE component provides the essential components that support Reactive Domain-Driven Design projects. The partitioned grid of distributed actors are highly concurrent and supremely efficient. The tools include compute grid, actor caching, spaces, cross-node cluster messaging, publish-subscribe, message/event feeds, CQRS, and Event Sourcing support.
Tell me more!
There are numerous features to VLINGO/LATTICE. They include Grid, Exchange, Processes, Routers, and CQRS, Sourcing, and Object Persistence. Process Managers or Sagas provided by VLINGO/LATTICE are: ObjectProcess, SourcedProcess, and StatefulProcess.
Which process manager should you use?
Choose based on your preferred persistence type. If you prefer Object-Relational Mapping, use ObjectProcess. If you prefer Event/Command Sourcing, use SourcedProcess. If you prefer key-value, use StatefulProcess.
Do you support Exchange Feeds?
Yes, VLINGO/LATTICE supports Exchange Feeds, which are messages packaged in logs and generally provided through HTTP requests. Our Exchange Feeds naturally work with the built-in FeedResource support of VLINGO/HTTP.
VLINGO/HTTP
Getting to know VLINGO/HTTP
What is it?
A Reactive HTTP server that provides Reactive request-response services. Your services can be embedded into any given service and every request and response are handled asynchronously by means of actors. This is a major step forward in avoiding configuration-based REST request-response mappings. It provides built-in resource handlers for Feeds and Server-Sent Events (SSE).
Is it clunky?
It is small and fast. It can be used independently or with other VLINGO/PLATFORM components.
Did you know?
VLINGO/HTTP supports REST feed resources and snaps together nicely with VLINGO/LATTICE for complete REST+Exchange solution.
