ZooKeeper源码解析(1)-总览

研究一款产品的时候,我们要从设计,架构的角度,来考虑其设计者为何要这样设计,这样设计的优点是什么,缺点是什么,其适用场景是什么,还有没有更好的解决方案.

在研究其实现时,也不能仅仅思考其功能上是如何实现的,还要考虑如何保证代码的优雅性,如何充分解耦,如何进行测试,代码中进行了哪些优化,我们还可以如何进一步优化.

这样我们才能也设计出一款具有更高的性能,更好的产品.

在这篇文章中,我们将会对ZooKeeper进行模块拆分.

ZooKeeper介绍

其实,ZooKeeper就是一个分布式键值系统.它提供了几种类型的几点,基于这,又衍生出来它的其他用途,比如,分布式锁.但是,从本质上说,它就是一个分布式键值系统.

我们如何设计一个键值系统?

我们考虑一下,如果让我们设计一个键值系统,不是分布式键值系统,只是一个简单的键值系统,在单机上运行的那种,我们要如何来设计呢?

首先,这个键值系统,很明显,是C/S架构.需要一个客户端,然后还需要一个服务器端.

那么,服务器端如何对外提供服务呢?以Restful接口的形式,还是以Socket的方式,或者RPC的方式?

另外,我们这个系统提供哪些操作?

它提供的操作是否是幂等性的?如果是非幂等性的,我们如何处理?

数据结构是怎样的?是HashMap么?或者其他的数据结构,链表,树?

如何做到容灾?用快照?

如何对服务器端进行监控?

对于一个分布式键值系统来说,又有其他的地方需要考虑.

各个节点如何进行通讯?

如何保证各个节点之间的数据的一致性?Paxos,Raft,Zab?

要实现哪一种一致性模型?强一致性还是最终一致性?

需要容忍Byzantine错误吗?

如何进行测试?

ZooKeeper拆分

从上面那一小节,我们基本上就能得出ZooKeeper的各个模块:

  • 客户端
  • 服务器端
  • 一致性算法模块
  • 本地容灾模块
  • 监控模块
  • 测试模块

当然,各个模块之间并不是独立的.比如,ZooKeeper中的监控使用的是JMX,所以,可以看到JMX穿插在各处.

其实服务器端包括了本地容灾模块以及监控模块,以及其他的如各种数据结构.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 一、ZooKeeper的背景 1.1 认识ZooKeeper ZooKeeper---译名为“动物园管理员”。动物...
    algernoon阅读 9,128评论 1 106
  • 1 Zookeeper概述# ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决...
    七寸知架构阅读 7,375评论 0 101
  • 此文知识来自于:《从Paxos到Zookeeper分布式一致性原理与实践》第六章 数据发布/订阅(配置中心) 负载...
    李文文丶阅读 1,797评论 0 3
  • 人生真的很有意思,开始很不想做的事情,可是后来又因为某种原因,我们就接受了。就像这次提前来石家庄。搞笑! 早就说...
    光玉木子阅读 216评论 0 0