Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/borislemke/bancer
Blazing fast load balancer written in Node.js
https://github.com/borislemke/bancer
Last synced: about 1 month ago
JSON representation
Blazing fast load balancer written in Node.js
- Host: GitHub
- URL: https://github.com/borislemke/bancer
- Owner: borislemke
- Created: 2019-09-14T12:18:01.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T18:40:10.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T05:23:37.826Z (4 months ago)
- Language: TypeScript
- Size: 1.14 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-blazingly-fast - bancer - Blazing fast load balancer written in Node.js (TypeScript)
README
# Bancer
Bancer is a load balancer written in Node.js.
⚠ Disclaimer ⚠
This is a weekend project not meant to be used in production. I decided to take the load balancer as a subject to better understand the Node.js runtime and the JavaScript event loop.
## Features
### SSL Offloading
Bancer has built in support for TLS termination. Set the `ssl` field in the `json` config file and Bancer will spin up a HTTPS server. Bancer supports offloading standard 1024-bit and 2048-bit SSL keys.
### Health Check and Retry
When a target server is unavailable or abruptly killed while requests are ditributed to the problematic server, Bancer will attempt to retry the failed connections to other available servers.
## Configuration
```jsonc
{
"id": "backend-service-id",
"algorithm": "round-robin",
"port": 4040,
"workers": 4,
"ssl": {
"cert": "~path/to/server.crt",
"key": "~path/to/server.key"
},
"servers": [
{
"id": "server-1",
"host": "localhost",
"port": 3001,
"weight": 2,
"livenessProbe": {
"path": "/ping",
"periodSeconds": 5
}
},
{
"id": "server-2",
"host": "localhost",
"port": 3002,
"weight": 3,
"livenessProbe": {
"path": "/ping",
"periodSeconds": 5
}
}
]
}
```### id -> `string`
Identifier for running multiple load balancer on the same thread
### algorithm -> `round-robin` | `least-connection` | `random` [default: `round-robin`]
Defaults to `round-robin`.
### port -> `number`
The `port` your load balancer is listening on.
### workers -> `number` | `"auto"` [default: `1`]
Built-in support for Node.js cluster mode. Defaults to 1. Maximum is number of available CPUs. If you set a number higher than there are available CPUs, `bancer` will gracefully fallback to the number of CPUs and show a warning.
### servers.id -> `string` | `undefined`
Identifier for each target server. Must be unique across different targets. If you set the same `id` on 2 or more servers, `bancer` will throw an error and quit it's process.
### servers.host -> `number`
Host the target server is running on.
### servers.port -> `number`
Port number the target server is running on. Must be unique across target servers.
### servers.weight -> `numnber` [default: `1`]
The ratio of traffic routed to the target servers. Higher weight means higher number of request.
### servers.livenessProbe
Liveness probe to know if a serve is ready to receive load. Periodical check will ensure traffic is directed at healthy servers only.
### servers.livenessProbe.path
### servers.livenessProbe.periodSeconds
## Todo
- [ ] HTTP to HTTPS redirection
- [ ] Monitoring and Configuration UI
- [ ] Queue and retry if no servers available
- [ ] HTTP/2 Support
- [ ] Native IPv6 Support
- [ ] Content-based Routing (Host, Path, Headers, Method, Source IP, Device etc.)
- [ ] WebSocket Support
- [ ] Sticky Sessions
- [ ] Logging
- [ ] Slow Start Mode
- [x] Fixed Response
- [ ] Data Compression