Build simple, secure, scalable systems with Everblack

Monstera

Open source framework for building scalable stateful applications in Go. All Everblack services are powered by Monstera.

Get Started

Scalability

Monstera cluster is horizontally scalable. Applications are sharded, and shards can split even further as they grow with no downtime.

High availability

Each shard is replicated with Raft. Writes are performed on the leader, reads can be performed on the leader for strong consistency or on followers for eventual consistency. There is no single point of failure in Monstera cluster.

High performance

Data and compute are brought together into a single process. You are free to use any in-memory data structure or embedded database. Unlock the full power of Go to write your business logic.

Transactions

Updates are applied sequentially, so you get serializable transactions out of the box.

Local development

No need to run the whole cluster locally. It can be run in standalone mode as a single process which allows you to attach debugger and explore things end to end.

Testability

By design, application cores are easily testable with unit tests, no mocks required.

Moab

Moab is a fully managed service that simplifies working with asynchronous tasks at scale.

Get Started

Durability

All enqueued tasks are persisted and replicated. A task can be removed only by an explicit confirmation from a worker that a task was successfully completed.

Pull-based model

Workers periodically pull (dequeue) tasks from queues, allowing simple scaling of the workers fleet. Workers are stateless. No poison pills ever. You can monitor queue size and the age of the oldest task in real time.

Automatic retries

Failed tasks are automatically retried. Even in the event of worker crash. Retry strategy can be configured for a queue or for each individual task. That guarantees at-least-once execution.

Scheduled Tasks

Moab allows you to schedule the time (delay) when a task will be executed.

Tasks Expiration

Tasks that are set to expire can run as long as they want, but an expiring task must be picked up before the expiration time. Expiration time can be set on each task individually.

Unique Tasks

Moab makes sure there is only a single copy of a task with a given key in the queue. You can choose to leave the original task or rewrite it (if payload or scheduled time is different).

Long running tasks

Tasks can run for hours or days as long as workers keep reporting them in-progress.

Built-in Cron

Schedule periodic tasks with built-in Cron.

Security

Payload can be end-to-end encrypted. IAM roles allow granular control to queues and operations. Each API request is signed. API keys can be revoked.

Rate Limiter

Moab has a built-in rate limiter that works across all workers. Rate limiter is implemented with Token Bucket algorithm.

Concurrency Limiter

Regardless of how many workers are pulling tasks from a queue Moab can also limit the number of inflight tasks.

Pause a queue

You can pause dequeuing from a queue with a single command. For example, in an emergency scenario.

Grackle

Distributed synchronization primitives as a service.

Get Started

Primitives

  • Read/Write Locks
  • Semaphores
  • Wait Groups

Expiration

All holds have a set expiration time. Process crash will not cause a dangling lock. Long-running processes can extend the hold.

Simple API

All operations are atomic and safe to retry.

Bison

Fully managed IoT-oriented timeseries storage and data catalog management system.

Coming soon

Data catalog

Timeseries are organized into trees of directories. That makes it easy to navigate in millions of timeseries.

Strongly typed

All timeseries and expressions are strongly typed: integer, float, string, boolean, user-defined structures and enums. Data is validated at the time of ingestion.

Flexible retention

Retention policy can be set on a per-timeseries basis, starting from 1 day up to infinity.

Aggregations

Built-in functions for aggregating by time and downsampling.

Expressions

Powerful formulas for transforming data.

Alerts

Alerts can be configured to notify you when a timeseries exceeds a certain threshold.