All Projects → swir-rs → swir

swir-rs / swir

Licence: Apache-2.0 license
SWIR - Sidecar Written In Rust

Programming Languages

rust
11053 projects
shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to swir

Gokit Examples
Examples for building microservices with Go kit (gokit.io)
Stars: ✭ 125 (+155.1%)
Mutual labels:  nats
Openmessaging Benchmark
OpenMessaging Benchmark Framework
Stars: ✭ 184 (+275.51%)
Mutual labels:  nats
nats-surveyor
NATS Monitoring, Simplified.
Stars: ✭ 150 (+206.12%)
Mutual labels:  nats
Stan.net
The official NATS .NET C# Streaming Client
Stars: ✭ 131 (+167.35%)
Mutual labels:  nats
Liftbridge
Lightweight, fault-tolerant message streams.
Stars: ✭ 2,175 (+4338.78%)
Mutual labels:  nats
Nats Top
A top-like tool for monitoring NATS servers.
Stars: ✭ 202 (+312.24%)
Mutual labels:  nats
Golang Examples
Stars: ✭ 114 (+132.65%)
Mutual labels:  nats
mongoproxy
Lightweight proxy to collect MongoDb client metrics
Stars: ✭ 26 (-46.94%)
Mutual labels:  sidecar
Prometheus Nats Exporter
A Prometheus exporter for NATS metrics
Stars: ✭ 179 (+265.31%)
Mutual labels:  nats
golang-example-app
Example application
Stars: ✭ 138 (+181.63%)
Mutual labels:  nats
Go Micro Boilerplate
The boilerplate of the GoLang application with a clear microservices architecture.
Stars: ✭ 147 (+200%)
Mutual labels:  nats
Kubernetes Nats Cluster
NATS cluster on top of Kubernetes made easy.
Stars: ✭ 168 (+242.86%)
Mutual labels:  nats
Phpnats
A PHP client for the NATSio cloud messaging system.
Stars: ✭ 209 (+326.53%)
Mutual labels:  nats
Websocket Nats
An in-browser websocket client for NATS, a lightweight, high-performance cloud native messaging system
Stars: ✭ 125 (+155.1%)
Mutual labels:  nats
rants
An async NATS client library for the Rust programming language.
Stars: ✭ 80 (+63.27%)
Mutual labels:  nats
Aither
An example microservice system in Node.js using Hemera and best of today.
Stars: ✭ 116 (+136.73%)
Mutual labels:  nats
Voik
♒︎ [WIP] An experimental ~distributed~ commit-log
Stars: ✭ 200 (+308.16%)
Mutual labels:  nats
sidecache
Sidecar cache for kubernetes applications.
Stars: ✭ 38 (-22.45%)
Mutual labels:  sidecar
secret-sidecar
A Kubernetes init container that retrieves a secret from AWS Secrets Manager
Stars: ✭ 24 (-51.02%)
Mutual labels:  sidecar
Watermill
Building event-driven applications the easy way in Go.
Stars: ✭ 3,504 (+7051.02%)
Mutual labels:  nats

Build Status License GitHub release Awesome Badges

SWIR or Sidecar Written in Rust

For alternative meaning of SWIR

Rationale

SWIR is a platform allowing you to build applications for the cloud and on-prem environments quickly by providing an abstraction layer between your business logic and the infrastructure.

How it works

SWIR exposes a set of high level APIs that your business logic component uses to tap into underlying resources such as PubSub, State, Service Invocation. SWIR API specification in OpenApi 3.0 format can be found here

Usecases

Examples of SWIR in action for Docker, Kubernetes and AWS ECS are descibed here

Top Level Architecture

Diagram

Rust

Rust is a safe language, and side by side benchmarks show that the applications which are written in Rust achieve performance comparable with applications written in C or C++. In choosing an implementation language for a sidecar, these two factors are probably the most important. Rust language secure design guarantees that an attacker can't compromise the sidecar due to problems with memory safety. At the same time, since sidecar is responsible for most of the application's system-level functionality, it is crucial to minimise sidecar's impact on the performance. As Rust has no runtime nor garbage collector, it can run very fast and with small latency.

About Swir

This project is just a starting point to a conversation about sidecars, particularly for solutions consisting of many event-driven components. Even then it has some interesting features mainly because of the quality of crates created and maintained by Rust community: SWIR:

  • has moved to asynchronous programming
  • uses Hyper to expose REST interfaces over HTTP or HTTPS
  • uses Tonic to handle gRPC calls
  • uses rdkafka to talk to Kafka brokers
  • uses Nats to talk to NATS brokers
  • uses rusoto AWS SDK for Rust
  • uses redis-rs Redis SDK for Rust
  • is using modified config-rs so various aspects can be configured via a yaml file and environment variables can be easily injected based on an environment
  • adapted and improved mDNS(https://github.com/swir-rs/rust-mdns) to advertise/resolve services
  • SWIR uses conditional compilation which allows creating sidecars with just Kafka or Kafka and NATS
  • HTTP and gRPC Java and Python clients and other components allowing testing it end to end

Requirements

  • Docker, Docker Compose to build the project, run the infrastructure and the examples.
  • Minikube to run examples for Kubernetes
  • AWS account to run AWS based examples
  • Rust 1.44.1 or above

Similar Frameworks

SWIR has been influenced by Microsoft's Distributed Application Runtime - Dapr. It is hard to compete with Microsoft's unlimited resources, but someday perhaps SWIR might achieve a parity :)

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].