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. eclipse中server name选项变灰

    删除workspace中.metadata\.plugins\org.eclipse.core.runtime\.settings目录下 org.eclipse.wst.server.core.pre ...

  2. RF中滚动条的操作方法小结

    滚动条分为俩种,一:主页面中的滚动条.二:页面中的子页面的滚动条. 每种滚动条有都分为上下滑动与左右滑动. 下面分别介绍: 一:主页面的滚动条上下滑动: execute javascript      ...

  3. Access数据库中自动编号字段重置为1

    在清空一张ACESS数据库表后,在重添加数据之前,希望此表的自动编号能从1开始,怎么办呢? 下面的方法告诉我们,除了通过转存数据库表的方法外,还有几种更简单的方法: 方法一(前提:数据库表可带内容进行 ...

  4. POJ3630-Phone List-Trie字典树模板题

    Given a list of phone numbers, determine if it is consistent in the sense that no number is the pref ...

  5. HBase 永久RIT(Region-In-Transition)问题

    HBase 永久RIT(Region-In-Transition)问题:异常关机导致HBase表损坏和丢失,大量Regions 处于Offline状态,无法上线. 问题1:启动HBase时,HBase ...

  6. kafka单机版的安装、集群部署 及使用

    1.安装kafka(单机版) 1.1上传 kafka_2.11-2.0.0.tgz 到 /root/Downloads 1.2解压 tar 包 tar -zxvf kafka_2.11-2.0.0.t ...

  7. docker mysql 命令导入sql数据文件

    1.查看mysql容器 docker ps 比如我的是:94df84cbaaaa 2.复制sql文件到docker mysql里面的tmp文件夹 docker cp ./admin.sql 94df8 ...

  8. python颜色

    # python终端显示彩色字符类,可以调用不同的方法# 选择不同的颜色.使用方法看示例代码就很容易明白.# --------------------------------------------- ...

  9. winform textbox 不能唤醒windows 平板的软键盘解决办法

    这个问题,研究了将近两个小时,baidu,google,好大一会,windows 平板本身的应用程序,必须浏览器,notepad都是可以自动唤起软键盘的,但是我的winfrom 程序就是不可以,起先怀 ...

  10. 笔记-ubuntu中/home下中文目录改英文

    安装ubuntu后,如果选择的语言是中文,那/home下的文件夹会默认中文,在使用命令行的时候很不方便,此文记录切换成英文的方式,以便日后查看. 将目录重命名为英文 可以使用图形化界面,直接重命名 可 ...