vMODB is a distributed, event-driven, microservice-oriented database management system. The first principled approach for designing and implementing microservices that require advanced data management requirements. vMODB unifies event and data management, offering event-driven functionalities and ACID guarantees by design, making it easier for developers to build scalable microservices to run in the cloud.
Differently from traditional server-based database and message systems, where users interact via a well-defined network protocol, in vMODB, users solely write application code and all the data and event management complexity is abstracted away. For that, vMODB offers familiar programming abstractions to developers, including object-relational mapping and metaprogramming (i.e., annotations).
In the end, developers experience the same flexibility and dynamicity offered by microservice architectures, while enjoying native system-level data management support that effectively prevents several challenges usually found in the practice.
Event‑driven microservice architectures (EDMAs) allow teams to build systems formed by self-contained components that can be deployed, scaled, and upgraded independently. To achieve such non-functional requirements, EDMAs typically rely on asynchronous messages to enable interaction across components. While decoupling components in time facilitate software teams to move fast and adapt the system to varied workloads, ensuring transactional guarantees across components (e.g., workflow atomicity) is often perceived as a major challenge. In most cases, EDMAs end up relying on weaker guarantees, such as eventual consistency, in order to achieve performance requirements like scalability.
vMODB departs from traditional EDMAs by providing a programming model (VMS) and a runtime that unifies event logs and state to deliver ACID across microservices. In evaluations, vMODB outperforms widely adopted eventual‑consistency frameworks by up to 3x.
- Java Runtime Environment 21 to execute; JDK 21 to modify and compile the source code
- Maven to assemble the dependencies and compile the project: Maven install
- Curl to play with the HTTP APIs
It is necessary to generate the dependencies required to compile the microservice. This can be accomplished via running the following command in the root folder:
mvn clean install -DskipTests=true
Then you can just run the following command:
mvn clean package -DskipTests=true
To run, test, and debug applications in an IDE like IntelliJ:
To run the Online Marketplace benchmark, for each submodule under marketplace , use the following VM parameters:
--enable-preview
--add-exports
java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens
java.base/jdk.internal.misc=ALL-UNNAMED
To run TPC-C, for each submodule under tpcc , use the following VM parameters:
-XX:+UseParallelGC
--enable-preview
--add-exports
java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens
java.base/jdk.internal.util=ALL-UNNAMED
--add-opens
java.base/java.nio=ALL-UNNAMED
--add-opens
java.base/sun.nio.ch=ALL-UNNAMED
To profile the system, use the following VM parameters:
-XX:StartFlightRecording=filename=app.jfr,settings=profile,dumponexit=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof
-XX:+UseParallelGC
--enable-preview
--add-exports
java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens
java.base/jdk.internal.util=ALL-UNNAMED
--add-opens
java.base/java.nio=ALL-UNNAMED
--add-opens
java.base/sun.nio.ch=ALL-UNNAMED
At the core of vMODB lies the virtual micro service (VMS) programming model. Through a VMS, users define a component’s data model, constraints, and concurrency semantics. vMODB coordinates the execution of a collection of VMS instances. Developers specify transactions that may traverse multiple VMSes; the coordinator orders, validates, and commits them, preserving ACID across components while retaining the decoupling benefits of EDA.