{"id":13551519,"url":"https://github.com/ha/doozerd","last_synced_at":"2025-05-15T09:07:13.870Z","repository":{"id":1433179,"uuid":"1633914","full_name":"ha/doozerd","owner":"ha","description":"A consistent distributed data store.","archived":false,"fork":false,"pushed_at":"2016-03-16T04:01:32.000Z","size":3678,"stargazers_count":3266,"open_issues_count":26,"forks_count":265,"subscribers_count":175,"default_branch":"master","last_synced_at":"2025-04-14T15:01:16.727Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/ha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-04-19T03:35:05.000Z","updated_at":"2025-03-30T14:56:19.000Z","dependencies_parsed_at":"2022-08-16T13:20:29.050Z","dependency_job_id":null,"html_url":"https://github.com/ha/doozerd","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ha%2Fdoozerd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ha%2Fdoozerd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ha%2Fdoozerd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ha%2Fdoozerd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ha","download_url":"https://codeload.github.com/ha/doozerd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310515,"owners_count":22049469,"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":[],"created_at":"2024-08-01T12:01:49.730Z","updated_at":"2025-05-15T09:07:08.853Z","avatar_url":"https://github.com/ha.png","language":"Go","readme":"# Doozer\n\n![logo](doc/doozer.png)\n\n[![Build Status](https://secure.travis-ci.org/ha/doozerd.png)](http://travis-ci.org/ha/doozerd)\n\n## What Is It?\n\nDoozer is a highly-available, completely consistent\nstore for small amounts of extremely important data.\nWhen the data changes, it can notify connected clients\nimmediately (no polling), making it ideal for\ninfrequently-updated data for which clients want\nreal-time updates. Doozer is good for name service,\ndatabase master elections, and configuration data shared\nbetween several machines. See *When Should I Use It?*,\nbelow, for details.\n\nSee the [mailing list][mail] to discuss doozer with\nother users and developers.\n\n## Quick Start\n\n1. Download [doozerd](https://github.com/ha/doozerd/downloads)\n2. Unpack the archive and put `doozerd` in your `PATH`\n3. Repeat for [doozer](https://github.com/ha/doozer/downloads)\n4. Start a doozerd with a WebView listening on `:8080`\n\n        $ doozerd -w \":8080\"\n\n5. Set a key and read it back\n\n        $ echo \"hello, world\" | doozer add /message\n        $ doozer get /message\n        hello, world\n\n6. Open \u003chttp://localhost:8080\u003e and see your message\n\n![doozer web view](doc/webview.png)\n\n## How Does It Work?\n\nDoozer is a network service. A handful of machines\n(usually three, five, or seven) each run one doozer\nserver process. These processes communicate with each\nother using a standard fully-consistent distributed\nconsensus algorithm. Clients dial in to one or more of\nthe doozer servers, issue commands, such as GET, SET,\nand WATCH, and receive responses.\n\n(insert network diagram here)\n\nEach doozerd process has a complete copy of the\ndatastore and serves both read and write requests; there\nis no distinguished \"master\" or \"leader\". Doozer is\ndesigned to store data that fits entirely in memory; it\nnever writes data to permanent files. A separate tool\nprovides durable storage for backup and recovery.\n\n## When Should I Use It?\n\nHere are some example scenarios:\n\n1. *Name Service*\n\n    You have a set of machines that serve incoming HTTP\n    requests. Due to hardware failure, occasionally one\n    of these machines will fail and you replace it with a\n    new machine at a new network address. A change to DNS\n    data would take time to reach all clients, because\n    the TTL of the old DNS record would cause it to\n    remain in client caches for some time.\n\n    Instead of DNS, you could use Doozer. Clients can\n    subscribe to the names they are interested in, and\n    they will get notified when any of those names\u0026#8217;\n    addresses change.\n\n2. *Database Master Election*\n\n    You are deploying a MySQL system. You want it to have\n    high availability, so you add slaves on separate\n    physical machines. When the master fails, you might\n    promote one slave to become the new master. At any\n    given time, clients need to know which machine is the\n    master, and the slaves must coordinate with each\n    other during failover.\n\n    You can use doozer to store the address of the\n    current master and all information necessary to\n    coordinate failover.\n\n3. *Configuration*\n\n    You have processes on several different machines, and\n    you want them all to use the same config file, which\n    you must occasionally update. It is important that\n    they all use the same configuration.\n\n    Store the config file in doozer, and have the\n    processes read their configuration directly from\n    doozer.\n\n## What can I do with it?\n\nWe have a detailed description of the [data model](doc/data-model.md).\n\nFor ways to manipulate or read the data, see the [protocol spec](doc/proto.md).\n\nTry out doozer's fault-tolerance with some [fire drills](doc/firedrill.md).\n\n## Similar Projects\n\nDoozer is similar to the following pieces of software:\n\n * Apache Zookeeper \u003chttp://zookeeper.apache.org/\u003e\n * Google Chubby \u003chttp://research.google.com/archive/chubby.html\u003e\n\n## Hacking on Doozer\n\n * [hacking on doozer](doc/hacking.md)\n * [mailing list][mail]\n\n## License and Authors\n\nDoozer is distributed under the terms of the MIT\nLicense. See [LICENSE](LICENSE) for details.\n\nDoozer was created by Blake Mizerany and Keith Rarick.\nType `git shortlog -s` for a full list of contributors.\n\n[mail]: https://groups.google.com/group/doozer\n","funding_links":[],"categories":["Misc","Service Discovery \u0026 Service Mesh","Cloud Orchestration","Install from Source","Go","服务发现","Distributed Data Stores","others","Service discovery","Capabilities","Service Discovery"],"sub_categories":["Service Discovery","Configuration \u0026 Discovery"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fha%2Fdoozerd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fha%2Fdoozerd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fha%2Fdoozerd/lists"}