1. Apache ZooKeeper快速课程入门

时间:2023-03-09 18:23:44
1. Apache ZooKeeper快速课程入门

Tips
Tips做一个终身学习的人!
日拱一卒,功不唐捐。

1. Apache ZooKeeper快速课程入门
在过去的几十年里,互联网改变了我们生活的方式。Internet上提供的服务通常由复杂的软件系统支持,这些系统跨越了大量的服务器,而且常常位于不同的地理位置上。这种系统被称为计算机科学术语中的分布式系统。为了正确和有效地运行这些大型系统,这些系统内部的过程应该彼此之间达成某种协议;本协议也称为分布式协调。构成分布式系统的组件所达成的协议包括分布式系统的总体目标或达成一些最终导致目标的子任务的协议。这并不像听起来那么简单,因为流程不仅要达成一致,而且要确定他们的对等组件所同意的内容。

虽然在一个大的分布式系统中协调任务和过程听起来很简单,但是当要以容错的方式正确地实现它们时,这是一个非常棘手的问题。Apache ZooKeeper是Apache软件基金会的一个项目,它旨在通过简单的api提供一组可靠的原语来解决分布式系统的设计和开发中的这些协调问题。

在本章中,我们将介绍下面的内容:
分布式系统是什么及其特点
为什么分布式系统中的协调是困难的
Apache ZooKeeper介绍
下载并安装Apache ZooKeeper
使用ZooKeeper shell连接到ZooKeeper
多节点 ZooKeeper集群配置

定义一个分布式系统

分布式系统被定义为一个由独立的计算实体组成的软件系统,由一个计算机网络连接在一起,它的组件相互通信并相互协调以实现一个共同的目标。电子邮件系统,如Gmail或Yahoo !邮件就是这样一个分布式系统的一个例子。另一个分布式系统的例子是一个多人在线游戏,玩家可以在不同的地理位置上玩。

为了确定分布式系统,以下是需要注意的关键特性:

  • 资源共享:这指的是在系统中使用资源的可能性,例如存储空间、计算能力、数据和来自任何地方的服务,等等。
  • 可扩展性:这是指从硬件和软件角度逐步扩展和改进系统的可能性
  • 并发性:这指的是系统能够同时被多个用户使用,以完成相同的任务或不同的任务。
  • 性能和可伸缩性:这确保系统的响应时间不会随着整体负载的增加而降低。
  • 容错:这确保了系统总是可用,即使某些组件失败或以降级模式运行。
  • 通过API的抽象:这确保系统的各个组件隐藏于最终用户,仅向他们提供最终服务。

要设计一个分布式系统是很困难的,当一个单独的计算实体的集合被程序化到一起时,它就更加困难了。设计师和开发人员经常做出一些假设,这些假设也被称为分布式计算的谬论。这些谬论的列表最初是由SUN 公司的工程师在研究网络文件系统Network File System(NFS)的初始设计时创造的。可以在以下表格中引用这些内容:

假设 现实
网络是可靠的 在现实中,由于系统内部错误或由于电源故障等外部因素,网络或组件之间的互连可能会失败。
零延迟 分布式系统的用户可以从全球任何地方连接到它,并且需要时间将数据从一个地方移动到另一个地方。网络的服务质量也影响应用程序的延迟。
带宽是无限的 网络带宽在最近已经改进了很多倍,但在世界范围内这并不是统一的。带宽取决于网络的类型(T1,LAN,WAN,移动网络,等等)。
网络是安全的 网络永远不安全。通常,系统面临拒绝服务攻击的可能,因为在他们的设计中没有认真考虑应用程序的安全方面的隐患。
拓扑结构不会改变 实际上,拓扑结构永远不是恒定。 组件随时间被移除/添加,系统应该能够容忍这种更改。
有一个管理员 分布式系统从不孤立地运行。它们与其他外部系统相互作用;这可能超出了管理的控制。
传输成本为零 这远不是真实的,因为到处都有成本,从建立网络到发送网络数据包到目的地。成本可以是CPU周期的形式,用来支付给网络服务提供商的实际美元。
网络是同质的 网络由大量不同的实体组成。因此,要使应用程序正确地运行,它需要与各种组件进行互操作,即网络、操作系统,甚至是实现语言。

分布式系统设计者必须设计出一套系统,以保持所有之前的要点。除此之外,解决的下一个棘手问题是让参与的计算实体,或者独立的程序,协调他们的活动。通常,开发人员和设计人员在实现这种协调逻辑时陷入困境;这导致系统设计不正确,效率低下。正是基于这个动机,Apache ZooKeeper被设计和开发出来,使得分布式协调非常可靠。