高速数据同步服务器——Doozer
昨天在讨论平台新架构的时候,还在说要搞个配置管理的服务出来,方便接口的管理。然后今天就看到了这个……人品爆发了吗?
好吧,不扯淡,直接翻译 Doozer 的 README 吧。Doozer 我还没实测,不过感觉,如果真得像 README 上面说得那样,还是很有用,很有用的。
关键——这个玩意提供了 go 的接口。(补充一点,忘了说了,这个是用 go 开发的)
项目代码托管于此:Doozer。
———————-翻译分割线———————-
Doozer
这是什么?
Doozer 是高可用的,完整一致性的用于小量、极端重要的数据的存储。当数据变化时,它立刻通知接入的客户端(不缓存),对于那些很少更新,但是希望更新发生时实时性高的客户端来说是非常理想的。Doozer 对于名字服务、主数据库选取和多个设备之间的配置数据同步很适合。了解什么时候应该使用它?下面,有详细的信息。
通过邮件列表同其他用户和开发者讨论 doozer。
快速开始
- 下载 doozerd
- 解压缩
- 启动 doozerd
$ doozerd
- 设置一个键,然后再读出来
$ echo "hello, world" | doozer set /message 0 $ doozer get /message 11046 13 hello, world
- 5. 访问 http://localhost:8080 查看消息
它是如何工作的?
Doozer 是一个网络服务。一票机器(通常是三、五或七个)每个都运行一个 doozer 服务进程。这些进程使用标准的全一致性分布式完整性算法进行通讯。客户端接入一个或多个 doozer 服务器,发出命令,如 GET、SET 和 WATCH,并且接收响应。
(在这里插入一个网络结构图)
每个 doozerd 进程完整的复制一份数据存储,并且提供读写请求;没有“master”或“leader”的区别。Doozer 被设计为存储能存放于内存的数据;它永远都不会将数据写入持久化文件。一个独立的工具提供了用于备份和恢复的持久化存储。
什么时候应当使用它?
这里有一些情景:
- 名字服务
有若干机器提供 HTTP 请求的服务。当发生硬件故障,这些机器中的一个坏掉了,你将其替换为另一个网络地址上的新的机器。而由于原有的 DNS 记录的 TTL 使得客户端会缓存一段时间,DNS 数据的更新到达客户端,可能需要一段时间。
代替 DNS,可以使用 Doozer。客户端可以订阅它们感兴趣的名字,然后在这些名字的地址变化时,客户端会收到通知。 - 主数据库选取
部署了 MySQL 系统。为了使其具有高可用性,在另一台物理独立的机器上增加了一个从服务器。当主服务器异常时,可以将某台从服务器变为主服务器。在任何时间,客户端需要知道哪个服务器是主服务器,而发生问题的时候,从服务器之间也需要协调。
可以使用 doozer 存储当前主服务器的地址,以及在发生异常时协调所需要的任何信息。 - 配置
在多个不同的机器上有一些进程,并且期望它们使用相同的配置文件,这些文件会不定期更新。所有进程使用相同的配置非常重要。
将配置文件保存在 doozer 中,然后让进程从 doozer 中读取配置。
我能为这个项目做些什么?
参阅协议说明查看命令列表
类似的项目
Doozer 同下面的软件类似:
* Apache Zookeeper http://zookeeper.apache.org/
* Google Chubby http://labs.google.com/papers/chubby.html
Hacking on Doozer
许可证和作者
Doozer 发布于 MIT 许可证。参阅 LICENSE 了解更多信息。
Doozer 由 Blake Mizerany 和 Keith Rarick 创建。输入
git shortlog -s
得到完整的贡献者名单。