{"id":18583103,"url":"https://github.com/ryogrid/funnelkvs","last_synced_at":"2025-07-19T11:35:05.966Z","repository":{"id":38333732,"uuid":"275071544","full_name":"ryogrid/FunnelKVS","owner":"ryogrid","description":"Autonomous distributed key-value store which has REST interfaces implemented in Rust","archived":false,"fork":false,"pushed_at":"2024-07-20T10:44:45.000Z","size":942,"stargazers_count":25,"open_issues_count":5,"forks_count":3,"subscribers_count":4,"default_branch":"musl-build-for-x86-64-linux","last_synced_at":"2025-04-11T00:11:34.779Z","etag":null,"topics":["chord","database","db","dht","distributed-database","distributed-system","go","golang","kvs","python","rest-api","rust"],"latest_commit_sha":null,"homepage":"https://github.com/ryogrid/rust_dkvs/blob/master/ARCHITECTURE.md","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryogrid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["ryogrid"]}},"created_at":"2020-06-26T04:16:30.000Z","updated_at":"2024-12-19T23:11:46.000Z","dependencies_parsed_at":"2024-05-02T13:40:37.742Z","dependency_job_id":"0ede1244-2b20-4333-8da0-b20bf48afbd0","html_url":"https://github.com/ryogrid/FunnelKVS","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ryogrid/FunnelKVS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryogrid%2FFunnelKVS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryogrid%2FFunnelKVS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryogrid%2FFunnelKVS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryogrid%2FFunnelKVS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryogrid","download_url":"https://codeload.github.com/ryogrid/FunnelKVS/tar.gz/refs/heads/musl-build-for-x86-64-linux","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryogrid%2FFunnelKVS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265926967,"owners_count":23850886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chord","database","db","dht","distributed-database","distributed-system","go","golang","kvs","python","rest-api","rust"],"created_at":"2024-11-07T00:20:11.543Z","updated_at":"2025-07-19T11:35:05.898Z","avatar_url":"https://github.com/ryogrid.png","language":"Rust","funding_links":["https://github.com/sponsors/ryogrid"],"categories":[],"sub_categories":[],"readme":"# FunnelKVS: Rust implementation of autonomous distributed key-value store which has REST interfaces\n\n- TODO list (Japanese, includes finished tasks)\n  - https://gist.github.com/ryogrid/9b1f340babfbb6cdc9d03e57b7834e71\n\n## What is Funnel?\n- It is name of wepons which appears in MOBILE SUIT GUNDUM (animation) series\n- Several type of funnel attacks enemy cooporate with multi units\n- https://www.google.com/search?q=fin+funnel\u0026tbm=isch\n\n## Distributed KVS\n- Architecture (Japanese)\n  - https://github.com/ryogrid/rust_dkvs/blob/master/ARCHITECTURE.md\n- Referenced site (about REST API implementation. first one is Japanese) \n  - https://qiita.com/yukinarit/items/c5128e67d168b4f39983  \n  - https://rocket.rs/v0.4/guide/getting-started/\n\n- Fault torelance\n  - **in-memory DB with no persistance (disk storage is not used)**\n  - data replication is implemented\n  - functionality for keeping network healthy at occuring node down is also implemented\n\n\n- Data consistency\n  - care for data consistency is not enough yet...\n  - First, **running test on occring node downs and joins condition is planned** \n\n- How to execute node daemon\n  - $ curl https://sh.rustup.rs -sSf | /bin/bash -s -- -y --default-toolchain stable\n  - $ rustup update \u0026\u0026 cargo update\n  - **$ rustup install nightly-2021-07-29**\n  - **$ rustup override set nightly-2021-07-29**\n  - $ cargo build --release\n  - $ target/release/rust_dkvs [born_id: 1...N] [IP addr to bind] [Port number to bind] [IP addr of medietor] [Port number of medietor] [log output path: currently not referenced]\n\n- Setup KVS system\n    - **launch example of node daemons which compose KVS system**\n      - **you can build KVS system which is composed of multiple machines if you place rust_dkvs program binary to the machines and kick these with some tool like SSH**\n        - procedures wrote below are single machine example for easy trying\n      - **born_id of first node must be 1** but born_id of other node has no restriction except thst **1** can't be used\n        - **1** can be used by first node only \n      - **IP address and port number has no restriction but all nodes should be able to communicate directly with each other**\n    - $ target/release/rust_dkvs 1 127.0.0.1 11000 127.0.0.1 10999 ./  \n    - $ target/release/rust_dkvs 2 127.0.0.1 11001 127.0.0.1 11000 ./\n    - $ target/release/rust_dkvs 3 127.0.0.1 11002 127.0.0.1 11000 ./\n    - ....\n\n- REST interfaces which are offered by KVS system\n  - for easy testing with Web browser or something (use http GET request)\n    - http://[node addr]:[node_port]/global_put_simple?key=[string only includes ascii character]\u0026val=[string only includes ascii character]\n    - http://[node addr]:[node_port]/global_get_simple?key=[string only includes ascii character]\n    - http://[node addr]:[node_port]/global_delete_simple?key=[string only includes ascii character]\n  - for using from code or HTTP client tool (use http POST request to send JSON text)\n    - **Data should be appropriately escaped as JSON string and charactor code should be UTF-8**\n    - **\"Content-Type\" header's value should be \"application/json\"**\n    - http://[node addr]:[node_port]/global_put  \n  　  - body at POST -\u003e { \"key_str\" : \"[charactors]\", \"val_str\" : \"[charactors]\" }  \n    - http://[node addr]:[node_port]/global_get  \n  　  - body at POST -\u003e \"[key charactors]\"  \n    - http://[node addr]:[node_port]/global_delete  \n      - body at POST -\u003e \"[key charactors]\" \n\n- Utility CLI tool (tools/dkvs_client.go)\n  - setup chord network (on local machine)\n    - $ go run -op=setup-nodes -arg1=[launch nodes num]\n  - KVS system network health check\n    - $ go run -op=check-chain\n    - if the network is helthy, launched or alive nodes (process) are listed without duplication\n  - testing put values to KVS via specified node\n    - $ go run -op=put-test-values -arg1=\"127.0.0.1:11000\"\n    - put 100 values\n    - node you specify with arg1 has no restiction like that local addresses can be only specified. above is example\n  - testing get already put values from KVS via specified node\n    - $ go run -op=get-test-values -arg1=\"127.0.0.1:11005\"\n    - get 100 values \n\n## Simulator of distributed KVS (chord_sim dir)\n- design verification with simulator wrote by **Python** (**verification is finished**)\n  - you can simulate distributed kvs working behavior. on the simulation put, get, stabilize, join operations are issued continuously on node downs and node joins occuring condition.\n\n## Simulator of distributed KVS (chord_sim_rust dir)\n- design verification with simulator wrote by **Rust** (**verification is finished**)\n- Rust implemantation of chord simulator can be executed like below \n  - $ curl https://sh.rustup.rs -sSf | /bin/bash -s -- -y --default-toolchain nightly\n  - $ rustup override set nightly\n  - $ rustup update \u0026\u0026 cargo update\n  - $ cd chord_sim_rust\n  - $ cargo run\n\n## Runnable platforms for KVS system (= you can build the daemon binary for the platform)\n- Windows native\n  - dev env is also OK\n- macOS\n  - dev env is also OK\n- Linux (and Windows Subsystem for Linux environment)\n  - dev env is also OK\n  - probably ...\n- other UNIX like OS environments\n  - please try!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryogrid%2Ffunnelkvs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryogrid%2Ffunnelkvs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryogrid%2Ffunnelkvs/lists"}