Introduction

Welcome to the vlingo/platform documentation!

Industry Challenge

Obsolete and brittle architecture, and deficient software design, have resulted in the competitive paralysis of the software industry. It is quite common for large enterprises, that once enjoyed competitive distinction, to be hamstrung by Big Ball of Mud systems that prevent more than a few releases per year.

These legacy monoliths have generated profit for decades. Yet, the gradual myriad of changes to these revenue generators have led to a paralyzing tangle. The recurring plea for help? Teams are demoralized by the mud, and hardware has outpaced software architecture. Large companies that have experienced stagnation need liberating relief and mobility through enterprise modernization and transformation.

We are in need of change. We need change in how we interact with business stakeholders to achieve better business outcomes with software. We need change in the level of complexity regularly experienced with the software components that we build on. We need change in how business-driven solutions and the technical components align to achieve true competitive advantage.

Simplistic Power

Use the open source (OSS) vlingo/platform to achieve the simplification of distributed, concurrent, reactive, event-driven, and microservices architectures. Along with Domain-Driven Design, this is the crossroads where business strategy and modern technology meet. This means that the vlingo/platform doesn’t get in your way as you build your Bounded Context with its Ubiquitous Language. Rather, the vlingo/platform facilitates the explicit and fluent linguistic expressions of your core business models. Together with simplified multi-core enablement, your teams are supplied with a powerful toolbox full of versatile components supporting innovation.

There is far too much complexity in the software industry. The overarching vision for the vlingo/platform puts extreme emphasis on simplicity. With our platform components, preconfigured for common use cases, you should be productive within minutes, not an untold number of weeks or months.

Actor Model Foundation

In 1973, Dr. Carl Hewitt and his colleagues formulated the Actor Model. In recent years, the inventor of object orientation, Alan Kay, has stated that the Actor Model retained more of what he thought were the important object ideas. So, when you think of the Actor Model, think of objects done right.

The vlingo/actors toolkit is an implementation of the Actor Model. The ideas behind the Actor Model are powerful, and the vlingo/actors toolkit elegantly implements the concepts behind it with simplicity. The vlingo/actors toolkit is type safe by design, and services use it by defining and implementing domain-specific interfaces as actors. This box shows how actors work and what they do.

How actors work and what they do

An actor receives messages in its mailbox, and processes one message at a time when a thread is available.

Fundamentally, actors are non-blocking and share none of their mutable state with the outside, not even with other actors.

Actors use available threads, and you can’t run more threads simultaneously than there are available cores, e.g. Runtime.getRuntime().availableProcessors()

The basic unit of computation is expressed through actors. Actors send and receive messages asynchronously.

As objects create other objects, actors can create other actors.

Each actor can designate the behavior it will exhibit for the next message it receives. With vlingo/actors this can be accomplished by actors implementing multiple type-safe domain-specific interfaces.

As objects are typically used, software developers have become accustomed, even addicted, to the blocking paradigm. In the blocking diagram a Client object invokes a method on a Server object. This is an in-process (in-VM) invocation, not a remote client and a remote server. The point is, when a method invocation occurs, the Client is blocked until the Server returns from the method invocation. This means that the Client can perform no additional operations while the Server is handling its request. In contrast, the Actor Model works differently as is shown in the message-driven diagram.

When the Sender actor wants another actor to provide a service, it sends that actor a message. The message is sent to the Receiver actor and handled asynchronously when a thread is available. The Sender is not blocked, but continues moving forward with its current activities, and when those complete, it returns from its own message handling. As a result the thread previously used by the Sender is now available for another actor. This achieves maximum efficiency across all actors in your service instance. The more cores that are available, the greater the overall throughput.

With vlingo/actors, type-safe messages are the fundamental building block. For those that depend on static typing, a strongly-typed Actor Model implementation is crucial to reassure developers that they are sending the correct and intended message to each actor. This is guaranteed by the compiler, and adds no overhead beyond a typeless implementation.

There is far too much complexity in the software industry. The overarching vision for the vlingo/platform puts extreme emphasis on simplicity. In a few moments you can download the platform components through your build definition, with the whole platform fully configured for common use cases. You can be productive within minutes, rather than the typical untold number of weeks or months. Try it!

The vlingo/actors toolkit is the bedrock on which our other platform tools are implemented.

Reactive Platform Components

The following components are available for use.

Component

Description

vlingo/actors

The type-safe Actor Model toolkit for reactive concurrency, scalability, and resiliency using Java and other JVM languages, serving as the foundation for the message-driven platform.

vlingo/auth

An identity and access management tool used by the vlingo-platform where data and its use must be secured. Your services may use this facility but are not required to.

vlingo/cluster

The way to scale your services across a number of nodes, whose components can communicate and collaborate with components on any given node.

vlingo/common

A small set of reusable components used by multiple platform components. (Don't worry, this is not a catchall.)

vlingo/directory

The means by which services register with the system and discover collaborators. It's not a passive "look-up registry." It is a publisher of service availability and access.

vlingo/http

A reactive HTTP server that provides request-response services that can be embedded into any given service. It is small and fast.

vlingo/lattice

Tooling for reactive Domain-Driven Design projects that are highly concurrent. Includes compute grid, actor caching, spaces, cross-node cluster messaging, CQRS, and Event Sourcing support.

vlingo/maven-plugin

A plugin for the Maven build tool supporting automation for the vlingo platform.

vlingo/symbio

The reactive, scalable, and resilient CQRS storage and projection tool for services and applications built on the vlingo/platform.

vlingo/symbio-dynamodb

An implementation of vlingo/symbio state storage for the Amazon AWS DynamoDB.

vlingo/symbio-geode

The reactive Apache Geode storage for services and applications built on the vlingo/platform.

vlingo/symbio-jdbc

An implementation of vlingo-symbio state storage for JDBC databases, including Postgres and other hardened relational databases.

vlingo/telemetry

The reactive metrics collector plugin for the vlingo/platform, including support for vlingo/actors, vlingo/http, vlingo/lattice, vlingo/streams, and others.

vlingo/wire

Wire protocol messaging implementations, such as with full-duplex TCP and UDP multicast, using vlingo/actors.

See each of the documents for guidance on how to use of the individual platform components.