28 lines
1.6 KiB
Plaintext
28 lines
1.6 KiB
Plaintext
== What is Dshackle
|
|
|
|
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.
|
|
|
|
Dshackle provides a high level aggregated API on top of several underlying upstreams.
|
|
I.e. to blockchain nodes such as Bitcoind, Geth, Parity, or providers like DRPC, and so on.
|
|
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.
|
|
|
|
Example use cases:
|
|
|
|
- Read a _transaction_ - Dshackle tries to find it on different nodes and retries until it's found or there is a consistent answer from upstreams that the transaction doesn't exist
|
|
- Get _nonce_ to send a transaction - Dshackle makes sure it finds the highest value across several nodes
|
|
- Send _transaction_ - Dshackle distributes it to several nodes in parallel
|
|
|
|
Availability and fault tolerance:
|
|
|
|
- Dshackle connects to several upstreams via JSON RPC, Websockets or gRPC protocol
|
|
- 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
|
|
- If upstream lags behind, lost peers, started to resync, or goes down then Dshackle temporarily excludes it from
|
|
routing and returns back when the upstream's problem is fixed
|
|
|
|
Main goals:
|
|
|
|
- separate application services and blockchain nodes
|
|
- make blockchain access compatible with modern microservice oriented architecture
|
|
- provide secure access to a blockchain, on both protocol and data level |