All Projects → esatterwhite → skyring

esatterwhite / skyring

Licence: MIT license
Distributed timers as a service - for Node.js

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to skyring

ring-election
A node js library with a distributed leader/follower algorithm ready to be used
Stars: ✭ 92 (+240.74%)
Mutual labels:  distributed-systems, cluster
Nebula
Nebula is a powerful framwork for building highly concurrent, distributed, and resilient message-driven applications for C++.
Stars: ✭ 385 (+1325.93%)
Mutual labels:  distributed-systems, cluster
jakob
A fault-tolerant, distributed cluster of Redis servers with built-in load-balancing and fall-backs to provide data availability
Stars: ✭ 19 (-29.63%)
Mutual labels:  distributed-systems, cluster
gce-cache-cluster
Easy groupcache clustering on GCE
Stars: ✭ 32 (+18.52%)
Mutual labels:  cluster, gossip
Rsf
已作为 Hasor 的子项目,迁移到:http://git.oschina.net/zycgit/hasor
Stars: ✭ 77 (+185.19%)
Mutual labels:  distributed-systems, cluster
Scalecube Services
ScaleCube Services is a high throughput, low latency reactive microservices library built to scale. it features: API-Gateways, service-discovery, service-load-balancing, the architecture supports plug-and-play service communication modules and features. built to provide performance and low-latency real-time stream-processing. its open and designed to accommodate changes. (no sidecar in a form of broker or any kind)
Stars: ✭ 482 (+1685.19%)
Mutual labels:  distributed-systems, cluster
Diplomat
A HTTP Ruby API for Consul
Stars: ✭ 358 (+1225.93%)
Mutual labels:  distributed-systems, cluster
Fluentdispatch
🌊 .NET Standard 2.1 framework which makes easy to scaffold distributed systems and dispatch incoming load into units of work in a deterministic way.
Stars: ✭ 152 (+462.96%)
Mutual labels:  distributed-systems, cluster
Dbfs
Distributed Blockchain-based File Storage 📡
Stars: ✭ 45 (+66.67%)
Mutual labels:  distributed-systems, cluster
Kubernetes Gpu Guide
This guide should help fellow researchers and hobbyists to easily automate and accelerate there deep leaning training with their own Kubernetes GPU cluster.
Stars: ✭ 740 (+2640.74%)
Mutual labels:  distributed-systems, cluster
Jupiter
Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
Stars: ✭ 1,372 (+4981.48%)
Mutual labels:  distributed-systems, cluster
raftor
Distributed chat system built with rust
Stars: ✭ 31 (+14.81%)
Mutual labels:  distributed-systems, cluster
Garfield
An offensive attack framework for Distributed Layer of Modern Applications
Stars: ✭ 74 (+174.07%)
Mutual labels:  distributed-systems
Draco
DRACO: Byzantine-resilient Distributed Training via Redundant Gradients
Stars: ✭ 21 (-22.22%)
Mutual labels:  distributed-systems
Example
Metarhia application example for Node.js
Stars: ✭ 147 (+444.44%)
Mutual labels:  cluster
braid-go
简单易用的微服务框架 | Ease used microservice framework
Stars: ✭ 34 (+25.93%)
Mutual labels:  distributed-systems
docs
Documentation repo of nebula orchestration system
Stars: ✭ 16 (-40.74%)
Mutual labels:  cluster
clojang
Clojure API for Erlang/OTP Communications (built on jiface)
Stars: ✭ 61 (+125.93%)
Mutual labels:  distributed-systems
skein
A tool and library for easily deploying applications on Apache YARN
Stars: ✭ 128 (+374.07%)
Mutual labels:  cluster
fabric
Fabric is an experimental protocol for exchanging information.
Stars: ✭ 46 (+70.37%)
Mutual labels:  distributed-systems

skyring

Travis branch npm npm David Docker Repository on Quay

Skyring

A distributed reliable timer service providing setTimeout functionality in a distributed fashion. Skyring servers are clustered into a hashring using consistent hashing to partition timers to specific nodes in the ring. Skyring exposes a simple HTTP API that allows to you create and cancel timers. Timer execution comes in to the form of an HTTP webhook ( more transports to come )

  • Pluggable transports (timer execution)
  • Plugable Storage (crash recovery + balancing)
  • Auto Rebalancing
  • Crash Recovery

Architecture Overview

Examples

A request can be issued to any active node in the cluster. If that node is not responsible for the timer in question, it will forward the request directly to the node that is keeping network latency to a minimum. This makes Skyring very suitable for high performance, stateless, and distributed environments. The minimum recommended cluster size is 3 nodes, 2 of which being seed or bootstrapping nodes. A cluster of this size can average between 2K - 5K requests per second.

Create a timer

POST /timer

Request

Since timers managed in Skyring are done so through the use of setTimeout, there is a maximum timeout value of 2^31 - 1 or 2147483647 milliseconds, which is approximately 24.8 days. Attempting to request a timeout great than this value will result in a 400 Bad Request response. Additionally, the timeout must be greater than 0.

curl -i -XPOST http://localhost:8080/timer -d '{
  "timeout": 6000,
  "data" : "{\"foo\":\"bar\"}",
  "callback": {
    "transport": "http",
    "method": "post",
    "uri": "http://api.someservice.com/hook/timeout"
  }
}'

Contributing

Skyring is a monorepo managed by pnpm. Clone the repo and bootstrap the project

$ git clone https://github.com/esatterwhite/skyring.git project-skyring
$ pnpm install -r
$ docker-compose -f compose/nats.yml up -d
$ pnpm test

Packages

License

MIT Licensed, Copyright (c) 2020 Eric Satterwhite

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].