Hydra Booster
A DHT Indexer node & Peer Router
A new type of DHT node designed to accelerate the Content Resolution & Content Providing on the IPFS Network. A (cute) Hydra with one belly full of records and many heads (Peer IDs) to tell other nodes about them, charged with rocket boosters to transport other nodes to their destination faster.
Read the RFC.
Disclaimer: We are at Stage 1 of the RFC. Kanban
Install
[openssl support (lower CPU usage)]
go get -u -tags=openssl github.com/libp2p/hydra-booster
[standard (sub-optimal)]
go get -u github.com/libp2p/hydra-booster
Usage
hydra-booster
has two modes. A 'single head' mode that has a nicer UI, this is intended to be run in a tmux window or something so you can see statistics about your contribution to the network.
go run ./main.go
The second mode is called 'many heads'. Passing the -nsybils=N
allows you to run N heads (called sybils) at a time in the same process. It periodically prints out a status line with information about total peers, uptime, and memory usage.
go run ./main.go -nsybils=5
Alternatively you can use the HYDRA_NSYBILS
environment var to specify the number of sybils. Note the -nsybils
flag takes precedence.
Best Practices
Only run a hydra-booster
on machines with public IP addresses. Having more DHT nodes behind NATs makes DHT queries in general slower, as connecting in generally takes longer and sometimes doesnt even work (resulting in a timeout).
When running with -nsybils
, please make sure to bump the ulimit to something fairly high. Expect ~500 connections per node youre running (so with -nsybils=10
, try setting ulimit -n 5000
)
Developers
Publish a new image
# Build your container
docker build -t hydra-booster .
# Get it to run
docker run hydra-booster
# Commit new version
docker commit -m="some commit message" <CONTAINER_ID> libp2p/hydra-booster
# Push to docker hub (must be logged in, do docker login)
docker push libp2p/hydra-booster
Metrics collection with Prometheus
Install Prometheus and then start it using the provided config:
prometheus --config.file=promconfig.yaml --storage.tsdb.path=prometheus-data
Next start the Hydra Booster, specifying the port to run metrics on:
go run ./main.go -nsybils=5 -metrics-port=8888
You should now be able to access metrics at http://127.0.0.1:9090.
API
HTTP API
By default the HTTP API is available at http://127.0.0.1:7779.
GET /sybils
Returns an ndjson list of peers created by the Hydra: their IDs and mulitaddrs. Example output:
{"Addrs":["/ip4/127.0.0.1/tcp/50277","/ip4/192.168.0.3/tcp/50277"],"ID":"12D3KooWHacdCMnm4YKDJHn72HPTxc6LRGNzbrbyVEnuLFA3FXCZ"}
{"Addrs":["/ip4/127.0.0.1/tcp/50280","/ip4/192.168.0.3/tcp/50280","/ip4/90.198.150.147/tcp/50280"],"ID":"12D3KooWQnUpnw6xS2VrJw3WuCP8e92fsEDnh4tbqyrXW5AVJ7oe"}
...
GET /records/list
Returns an ndjson list of records stored by the Hydra Booster node.
GET /records/fetch
Fetches a record available on the network by CID. NOT IMPLEMENTED YET
License
The hydra-booster project is dual-licensed under Apache 2.0 and MIT terms: