EVENT-SOURCED TRANSACTION PROCESSING FRAMEWORK

Reveno is thoroughgoing lightning-fast, durable and yet simple async transaction processing framework made to fit your domain in first place.

READ MORE

Low latency

Able to process millions of transactions per second with the mean latency measured by tens of microseconds on an average hardware, thus delivering the result with the speed of lightning.

Durable

A rich set of configurations for journaling, in-memory model snapshotting and clustered failover replication makes the system totally reliable, so you make sure no single bit of data is lost.

Easy to use

We kept simplicity at the heart of our project so that you can concentrate only on a domain model and transactional business logic, and let the Reveno do the rest dirty work for you.




Transaction processing is easy

Most of todays solutions are suffering from excessively complex architecture and hard maintainable infrastructure, not to mention an overall maintenance cost of them.

The purpose of Reveno is to give an easy domain-oriented development tool with simple and transparent infrastructure, with perfectly fitted components for max performance. But easy doesn't mean simplistic. Instead, we are different in intention to give you as many options as possible, so you can choose the best one for you.

  • Reveno is an in-memory transactional event-driven framework with CQRS and event sourcing intruded. See our Architecture overview

  • Reveno is based on JVM and written fully on Java.

  • Reveno is fast and low latency - Able to process millions of transaction per second with microseconds latency.

  • Reveno is domain oriented - your primary focus will be on the core domain and domain logic only.

  • Reveno is GC-friendly - despite it is general purpose framework, we minize the costs as much as possible.

  • Reveno is robust - we have much durability options as well as failover replication among cluster, pre-allocated volumes and much more.

  • Reveno is lightweight. The core is about 300kb only.







Fluent and self-expressive

Sample banking case done with Reveno API:


Reveno reveno = new Engine("/tmp/reveno-sample");
reveno.config().mutableModel();

reveno.domain()
	.transaction("createAccount", (t,c) ->
		c.repo().store(t.id(), 
			new Account(t.arg())))
	.uniqueIdFor(Account.class).command();

reveno.domain()
	.transaction("changeBalance", (t,c) -> 
		c.repo().get(Account.class, t.arg())
			.balance += t.intArg("inc"))
	.command();

reveno.startup();

long accountId = reveno.executeSync("createAccount",
		map("name", "John"));
reveno.executeSync("changeBalance", 
		map("id", accountId, "inc", 10_000));

reveno.shutdown();
	

See full example on our documentation page

Getting support

There are various ways to let us know about yourself.

You can post to our Google Groups forum in case you have any kind of questions and suggestions which you can share with others.

All observed bugs are better to go to our Issues page.

If you have any private enquiry about Reveno, please drop us a line on support@reveno.org