1. 从单机到集群,分布式环境中的挑战

1.1 集中式的特点

  • 部署结构简单
  • 协作相对简单,不存在分布式协作问题
  • 单点故障问题

1.2 集中式的痛点

随着业务的发展和演进,将所有业务集中实现在一个应用上的做法往往满足不了公司及业务发展的需要,单一的系统已经不足以承载大量的业务。 (尤其是互联网企业)
所有业务堆在一个单一的系统,其痛点:

  1. 业务模块边界不清,代码耦合严重,不利于维护;
  2. 一个大的应用工程不利于版本迭代开发和发布。

1.3 从单体到SOA的转变

面向服务架构( service-oriented architecture, SOA )
通过系统拆分实现SOA架构的价值,沉淀出一批稳定的后台服务,通过叠加复用又可以快速响应用户的前端需求。

而面向服务体系架构能够落地的基础技术之一,就是分布式服务框架

1.4 分布式服务总体框架

  1. 服务拆分后的基本技术问题: 如何实现服务之间的通信?

    • RPC(RMI、HttpClinet等)
  2. 另一方面,如何实现服务治理?
    • 一般而言包括:服务自动发现、自动下线、服务注册中心、负载均衡等功能。

1.5 分布式应用概述

  • 分布式应用可以再给定时间(同时)在网络的多个系统上运行,通过协调它们以快速有效的完成特定任务。

  • 分布式应用正在运行的一组系统称为集群,集群中运行的每台机器称为节点。

  • 分布式应用有Server和Client两部分。Server是分布式的,有通用的接口,以便Client可以连接到集群中的任何服务器并获得相同的结果。

分布式应用的优点

  • 可靠性 单个或几个系统的故障不会使整个系统出现故障。
  • 可扩展性 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改。
  • 透明性 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战

  • 竞争条件 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
  • 死锁 两个或多个操作等待彼此无限期完成。
  • 数据一致性 数据的部分失败。
  • 网络的不稳定性

2. ZK基本概念及核心原理

2.1 ZK自我介绍

姓 名: Zookeeper “动物”管理员
履 历: 基于Google Chubby开源实现,由雅虎创建; 2010年正式成为Apache的顶级项目; 已被Hadoop、Hbase、 kafka等越来越多项目作为核心基础组件。
宗 旨: 全心全意为分布式应用提供高效且可靠的协调服务。
特 点: 开源、免费。
诞生初衷: 希望作为一个通用的无单点问题的分布式协调框架,以便让程序猿将精力集中在业务逻辑处理上。
核心特性 : 树形结构数据库 + znode watch

2.2 ZK基本概念

2.2.1. 客户端-服务器架构

2.2.2 数据模型

分布式应用中的各个进程可以通过ZooKeeper的命名空间(Namespace)来进行协调,这个命名空间是共享的、具有层次结构的,更重要的是它的结构足够简单。每个命名空间被称为Znode。每个znode由3部分组成:

  1. Stat: 版本、权限等信息.
  2. data: 关联的数据.
  3. Children: znode下的子节点.

znode的分类

  • 持久节点: 客户端断开后仍存在,默认。
  • 临时节点: 生命周期和客户端会话绑定。
  • 顺序节点: 可以是持久或临时节点。/app1/s0000000001 起到锁、同步的作用。
2.2.3 Session(会话)

会话中的请求按FIFO顺序执行。
客户端连接到服务器,将建立会话并向客户端分配会话ID 。
客户端以特定的时间间隔发送心跳以保持会话有效。
服务器在SESSION_TIMEOUT时间内都没有接收到客户端心跳,会话失效,临时数据与注册的订阅者都会被移除。

2.2.4 zk工作流

2.2.5 watch机制

监视是一种简单的机制,客户端可以在读取特定znode时设置Watches。
服务器会向客户端发送znode变更(Znode的增、删、改)通知。
watch分类:

  • data  watches:getData和exists负责设置data watch
  • child watches:getChildren负责设置孩子child watch

备注:

  1. Watches通知是一次性的,一旦触发后即失效,必须重复注册。
  2. 客户端会话失效,这个会话中创建的Watcher都会被移除。

3. ZK应用举例

3.1 应用举例

分布式应用程序可以基于它实现:

  • 数据发布/订阅
  • 负载均衡
  • 命名服务
  • 分布式协调/通知
  • 集群管理
  • 分布式锁和分布式队列等
    例,
    Hadoop:依靠ZooKeeper进行配置管理和协调。
    Hbase: 通过集中式配置管理分布式互斥机制来帮助主机和区域服务器跟踪分布式数据的状态。

3.2 项目中的应用

Zookeeper作为注册中心
对内网四大服务(sso、web、push和collect)相互通信的RPC接口进行管理。

  1. 系统启动时RPC接口在ZK中注册(create node)
  2. 客户端从ZK获取对应的RPC接口。进行调用。

githup上有个类似的demo参考:https://github.com/luxiaoxun/NettyRpc
交互流程示意图:

4 小结

重点回顾:ZK数据模型、watch机制。
能帮助我们实现:分布式一致性、服务治理功能等。

参考资料
《从Paxos到Zookeeper分布式一致性原理与实践》
《分布式服务框架原理与实践》
w3cschool zookeeper教程

初探分布式环境的指挥官ZooKeeper的更多相关文章

  1. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们 ...

  2. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  3. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  4. ZooKeeper系列(5):管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...

  5. ZooKeeper管理分布式环境中的数据

    Reference: http://www.cnblogs.com/wuxl360/p/5817549.html 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  6. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

    本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解. ...

  7. Zookeeper和分布式环境中的假死脑裂问题(转)

    Zookeeper和分布式环境中的假死脑裂问题 最近和同事聊天无意间发现他们的系统也存在脑裂的问题.想想当初在我们的系统中为了解决脑裂花了非常大的功夫,现在和大家一起讨论下脑裂,假死等等这些问题和解决 ...

  8. 搞懂分布式技术3:初探分布式协调服务zookeeper

    搞懂分布式技术3:初探分布式协调服务zookeeper 1.Zookeepr是什么 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡, ...

  9. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

随机推荐

  1. NOIp2018集训test-10-23

    上午考了一套sb题,但是没有人AK.李巨290虐场. 下午又考了一套sb题,李巨AK虐场.%%% T1 % 中国剩余定理好像做不了啊,我一直在想如何用CRT做,然后就GG了. 然而正解是bike当初说 ...

  2. xlwings结合dataframe数据的写入

    一.代码 import xlwings as xw import pandas as pd xl_path=r'***' df_path=r'***' df=pd.read_excel(df_path ...

  3. 最全的PS快捷键大全!

    一.工具箱 01.(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取)02.矩形.椭圆选框工具 [M]03.裁剪工具[C]04.移动工具[V]05.套索.多边形套索.磁性套索[L]06.魔 ...

  4. Wannafly Winter Camp Day5 Div1 E题 Fast Kronecker Transform 转化为NTT或FFT

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  原题目描述在最下面.  对给定的式子算解.   ...

  5. 使用wordpress搭建的网站如何去掉域名中的wordpess

    我们搭建好的网站当以文件夹的形式把wordpress程序放在空间的根目录时,访问的时候要加上文件夹名,访问地址就是:http://www.xxx.com/wordpress,直接用域名是无法访问,解决 ...

  6. 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy

    目录 目录 前文列表 扩展阅读 前言 Models 模型 SQLAlchemy 安装 SQLAlchemy 安装 Mysql 建立 SQLAlchemy 和 Mysql 的连接 前文列表 用 Flas ...

  7. linux开机故障解决方法

    无法进grub方法1光盘或者网络引导进入Rescue切换原机系统 chroot /mnt/sysimage/ 安装grub grub-install /dev/sda 方法2 直接命令 grub-in ...

  8. php5模块pdo、pdo_mysql、mysqli的添加

    一.环境LAMP都是源码安装,PHP安装的时候没有配置pdo_mysql和mysqli,pdo是php5默认带的.PHP5的源码都在,只需要把php5的模块功能扩展就可以了. php源码目录:/usr ...

  9. 4.2.1 Vector bit-select and part-select addressing

    Frm:IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language Bit-selects extract a ...

  10. qemu通过命令行直接引导linux内核启动

    qemu -kernel vmlinuz-3.14.0 -hda img_custom -append root=/dev/sda1