solution: more clear intro to the project
This commit is contained in:
36
README.adoc
36
README.adoc
@@ -6,41 +6,27 @@ endif::[]
|
|||||||
|
|
||||||
image:https://github.com/emeraldpay/dshackle/workflows/Tests/badge.svg["Unit Tests"]
|
image:https://github.com/emeraldpay/dshackle/workflows/Tests/badge.svg["Unit Tests"]
|
||||||
image:https://img.shields.io/docker/pulls/emeraldpay/dshackle?style=flat-square["Docker",link="https://hub.docker.com/r/emeraldpay/dshackle"]
|
image:https://img.shields.io/docker/pulls/emeraldpay/dshackle?style=flat-square["Docker",link="https://hub.docker.com/r/emeraldpay/dshackle"]
|
||||||
image:https://img.shields.io/github/license/emeraldpay/dshackle.svg?style=flat-square&maxAge=2592000["License", link="https://github.com/emeraldpay/dshackle/blob/master/LICENSE"]
|
image:https://img.shields.io/github/license/emeraldpay/dshackle.svg?style=flat-square&maxAge=2592000["License",link="https://github.com/emeraldpay/dshackle/blob/master/LICENSE"]
|
||||||
image:https://badges.gitter.im/emeraldpay/community.svg[link="https://gitter.im/emeraldpay/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge]
|
image:https://badges.gitter.im/emeraldpay/community.svg[link="https://gitter.im/emeraldpay/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge]
|
||||||
|
|
||||||
Dshackle is an L7 Blockchain API Load Balancer with automatic discovery and health checking, authentication, and TLS termination.
|
Dshackle is an L7 Blockchain API Load Balancer with automatic discovery and health checking, authentication, and TLS termination.
|
||||||
It is designed to work as an edge proxy, middle proxy, or API gateway.
|
It is designed to work as an edge proxy, middle proxy, or API gateway.
|
||||||
|
|
||||||
Dshackle provided a high level aggregated API on top of several underlying upstreams (blockchain nodes or providers, such
|
Dshackle provided a high level aggregated API on top of several underlying upstreams (blockchain nodes or providers, such as Geth, Parity, Infura, etc), it automatically verifies their availability and the current status of the network, executes commands making sure that the response is consistent and/or data successfully broadcasted to the network.
|
||||||
as Geth, Parity, Infura, etc), it automatically verifies their availability and the current status of the network, executes
|
|
||||||
commands making sure that the response is consistent and/or data successfully broadcasted to the network.
|
|
||||||
|
|
||||||
The main goals of the project is to:
|
- Standard Ethereum JSON RPC API, plus advanced gRPC-based API
|
||||||
|
- TLS with optional client authentication
|
||||||
|
- Blockchain-aware **caching** in memory and in Redis
|
||||||
|
- Routing based on data availability (peers, height, sync status), always a **most actual state**
|
||||||
|
- Automatic **failover** and retry
|
||||||
|
|
||||||
- separate application services and blockchain nodes
|
Dshackle allows to build a mesh network of interconnected Dshackle servers to have fast, secure, stable and fail-proof access to blockchain.
|
||||||
- make blockchain access compatible with modern microservice oriented architecture
|
|
||||||
- provide secure access to a blockchain, on both protocol and data level
|
|
||||||
|
|
||||||
The main features and advantages are:
|
|
||||||
|
|
||||||
- provides standard JSON RPC as smart load balancing proxy to active nodes
|
|
||||||
- in addition to JSON RPC it provides gRPC protocol, with server push and asynchronous communications, to simplify and optimize standard access patterns
|
|
||||||
- targeting Kubernetes architecture
|
|
||||||
- automatically distributing access to API through multiple different target nodes, taking into account their current availability and status
|
|
||||||
- allowing to build a mesh network of routers in different regions sharing a set of underlying nodes, with automatic rebalancing and smart routing
|
|
||||||
- caching data on the edge
|
|
||||||
- providing monitoring (ex.
|
|
||||||
Prometheus) and externalizable logging
|
|
||||||
- configurable access authentication and authorization, including TLS certificates
|
|
||||||
|
|
||||||
Dshackle connects to several upstreams via JSON RPC, Websockets, or gRPC protocols.
|
Dshackle connects to several upstreams via JSON RPC, Websockets, or gRPC protocols.
|
||||||
It verifies if a node ("upstream") is
|
It verifies if a node ("upstream") is fully synchronized (not in initial sync mode), has enough peers, and its height is not behind other nodes.
|
||||||
fully synchronized (not in initial sync mode), has enough peers, and its height is not behind other nodes. If upstream lags
|
If upstream lags behind others, lost peers, started to resync or went down, then Dshackle temporarily excludes it from requests and returns when the upstream problem is fixed.
|
||||||
behind others, lost peers, started to resync or went down, then Dshackle temporarily excludes it from requests and returns
|
|
||||||
when the upstream problem is fixed.
|
|
||||||
|
|
||||||
image::call-schema.png[alt="Call Schema",width=100%,align="center"]
|
image::dshackle-intro.png[alt="",width=100%,align="center"]
|
||||||
|
|
||||||
== Roadmap
|
== Roadmap
|
||||||
|
|
||||||
|
|||||||
BIN
docs/assets/dshackle-intro.png
Normal file
BIN
docs/assets/dshackle-intro.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 120 KiB |
Reference in New Issue
Block a user