ZooKeeper在分布式应用中的作用
作者:陈叶皓(携程邮轮研发部软件架构师)
是不是要在标题的“作用”之前加上“重要”两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在应用中不使用它,早晚也会在你的应用中去实现zookeeper 的功能,所以,zookeeper值得你花(一点)时间去掌握。
zookeeper是为了“分布式”而诞生的,我反复在说“分布式”,并不是赶潮流,而是被潮流推着向前。在任何互联网生产应用中,哪怕你的公司规模小,访问量用一台服务器足够应付,仍然不能容忍当服务器故障时,没有备用的服务器可切换,这个称为“防止单点故障”,因为你至少要用两台服务器来防止单点故障,所以你已经在“分布式”的服务环境里。
我们来回顾上一篇提到的“为什么要在服务层设计读写分离”,我把应用层的通用服务分为“读”服务和“写”服务,“读”服务用集群来实现高可用高性能,而“写”服务用单台服务器来保证事务顺序执行。
那么,“单台服务器”听上去好危险的样子,于是今天的主角登场,我们需要zookeeper。
你也许听到过,这种应用场景叫做master/slave,或者我更喜欢称为主/备模式,在这种场景下,我有两台服务器(主和备),任何情况下,只有“主”在工作,“备”是在主出现故障时,接替“主”来提供服务。在zookeeper的支持下,这一过程是这样实现的,
Zookeeper提供目录和节点的服务,当我的两台服务器启动时,会在zookeeper的指定目录下创建对应自己的临时节点(这个过程称为“注册”),所谓临时节点,是靠心跳(定时向zookeeper服务器发送数据包)维系,当服务器出现故障(无法向zookeeper服务器发送数据包),zookeeper会删除临时节点。服务器向zookeeper注册时,zookeeper会分配序列号,我们认为序列号小的那个,就是“主”,序列号大的那个,就是“备”。
当我们的客户端(通常是web server)需要访问“写”服务时,需要连接zookeeper,获得指定目录下的临时节点列表,也就是已经注册的服务器信息,获得序列号小的那台“主”服务器的地址,进行后续的访问操作。以达到“总是访问主服务器”的目的。
当“主”服务器发生故障,zookeeper从指定目录下删除对应的临时节点,同时可以通知关心这一变化的所有客户端,高效且迅速的传播这一信息,你想一想,如果不是使用zookeeper,要自己实现这个功能,可没。。。那么简单(不许唱!)
我们为了消除单点故障而使用的主/备模式依赖zookeeper,那么zookeeper可不能有单点故障,所以zookeeper在诞生的时候,就是用集群的模式工作,用多台服务器来消除自身的单点故障隐患,怎么样,无可挑剔吧。
总结,在多核并行计算模式下,我认定基于消息传递的actor模型(源自erlang)是正确的编程方式,在actor模型下,可以简单实现基于服务层的串行操作,保证“写”操作的完整和一致。使用actor模型,需要用主/备的部署架构来消除单点故障,实现主/备的部署架构,最简单可靠的方法是使用zookeeper。所以我现在的软件架构是这么推导出来的高并发需求 -> 异步计算 (使用actor model) -> master/slave (使用zookeeper)
原文链接:http://techshow.ctrip.com/archives/788.html
ZooKeeper在分布式应用中的作用的更多相关文章
- Zookeeper在Dubbo中的作用及Zk集群的选举原理
转自 : https://blog.csdn.net/zh15732621679/article/details/80723358
- Zookeeper 在 Kafka 中的作用
https://www.jianshu.com/p/a036405f989c 待整理...
- Apache ZooKeeper在Kafka中的角色 - 监控和配置
1.目标 今天,我们将看到Zookeeper在Kafka中的角色.本文包含Kafka中需要ZooKeeper的原因.我们可以说,ZooKeeper是Apache Kafka不可分割的一部分.在了解Zo ...
- 什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么
什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是Zooke ...
- Zookeeper的作用,在Hadoop及hbase中具体作用
什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么 一.什么是Zookeeper ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hado ...
- Zookeeper 在Hadoop中的应用
Zookeeper 简单介绍 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目.它主要是用来解决分布式应用中常常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集 ...
- 原理分析dubbo分布式应用中使用zipkin做链路追踪
zipkin是什么 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开 ...
- 【HBase】zookeeper在HBase中的应用
转自:http://support.huawei.com/ecommunity/bbs/10242721.html Zookeeper在HBase中的应用 HBase部署相对是一个较大的动作,其依赖于 ...
- 原理分析dubbo分布式应用中使用zipkin做链路追踪(转)
作者:@nele本文为作者原创,转载请注明出处:https://www.cnblogs.com/nele/p/10171794.html 目录 zipkin是什么为什么使用Zipkinzipkin架构 ...
随机推荐
- MATLAB学习之内存溢出的管理方法
今天用Matlab跑程序,由于数据量太大,又出现 Out of memory. Type HELP MEMORY for your options.的问题.看到这篇文章非常实用,转过来方便查阅~ 用 ...
- vjue 点击发送邮件如何处理
<li @click.stop="openSendMail()"> <i class="icons mail-icon" title=&quo ...
- Django admin 常用方法 model 增加只读权限
1.Django admin model 设置查看权限 Django model 默认只有增加.删除.修改权限.没有查看权限 #model class Ad_Campaing(models.Model ...
- Redis面试题及分布式集群
Reference: http://blog.csdn.net/yajlv/article/details/73467865 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似 ...
- Bootstrap tab插件的使用
菜鸟教程链接:http://www.runoob.com/bootstrap/bootstrap-tab-plugin.html 1.例子 <!DOCTYPE html> <html ...
- C#使用线程池创建线程
using System; using System.Threading; public class Example { public static void Main() { // Queue th ...
- C语言 · 判断回文
算法提高 判断回文 时间限制:1.0s 内存限制:512.0MB 编程判断一个字符串是否是回文,当字符串是回文时,输出字符串:yes!,否则输出字符串:no!.所谓回文即正向与反向的 ...
- u-boot的配置
1 sama5d31dk sama5d3_xplained:SAMA5D3,SYS_USE_NANDFLASH ...
- PCL点云特征描述与提取(3)
快速点特征直方图(FPFH)描述子 已知点云P中有n个点,那么它的点特征直方图(PFH)的理论计算复杂度是,其中k是点云P中每个点p计算特征向量时考虑的邻域数量.对于实时应用或接近实时应用中,密集点云 ...
- 微信支付WxpayAPI_php_v3(三)支付成功回调
接收回调通知后的业务处理都在NotifyProcess做,$data包含了微信返回给你的数据. Service: <?php /** * Created by PhpStorm. * User: ...