一、前言

在“网络是不可靠的”这一前提下,分布式系统开发需要解决如下四个问题:

  • 客户端如何访问众多服务?
     解决方案:服务聚合,使用API网关

  • 服务于服务之间如何通信?
     解决方案:
      同步通讯:HTTP(Apache http client)、 RPC(Dubbo、Apache Thrift、gRPC)
      异步通讯:消息队列(Kafka Rabbitmq Rockermq)

  • 众多服务,如何进行管理(实现高可用、高并发、高性能)?
     解决方案:服务治理,采用服务注册与发现,包括
      基于客户端的服务注册与发现:Apache Zookeeper
      基于服务端的服务注册于发现:Netflix Eureka

  • 服务挂了怎么办?
     解决方案:重试机制、服务熔断、服务降级、服务限流

目前流行的微服务架构解决方案:

  • Spring Boot + Spring Cloud
  • Spring Boot + Dubbo + Zookeeper

二、Zookeeper是什么?

2.1、Zookeeper简介

  ZooKeeper是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

2.2、Zookeeper本质

  分布式锁:在同一台JVM上使用多线程异步的方式实现对临界资源的访问,而在分布式系统中为了防止多个进程之间相互干扰,需要使用分布式协调技术。
  分布式协调技术:主要用来解决分布式环境当中多个进程之间的同步控制,保证各个进程有序的访问某些临界资源,防止造成“脏数据“。
  分布式协调技术的核心就是实现分布式锁。
  ZooKeeper是分布式协调服务,Zookeeper的本质就是分布式锁的实现框架

2.3、Zookeeper特性

  • 顺序一致性
      从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到ZooKeeper中去。
  • 原子性
      所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。
  • 单一视图
      无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。
  • 可靠性
      一旦服务端成功地应用了事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了变更。
  • 实时性
      通常人们看到实时性的第一反应是,一旦一个事务被成功应用,那么客户端能够立即从服务端上读取到这个事务变更后的最新数据状态。这里需要注意的是,ZooKeeper仅仅保证了在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

三、Zookeeper能干什么?

  Zookeeper典型应用场景包括:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁、分布式队列。

四、参考资料

参考书籍:从Paxos到Zookeeper:分布式一致性原理与实践

  • 作者:
    DeepInThought


    出处:
    https://www.cnblogs.com/DeepInThought


    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 【1】Zookeeper概述的更多相关文章

    1. ZooKeeper概述

      1.Zookeeper概述 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置 ...

    2. Zookeeper概述和基本概念

      一.Zookeeper背景 随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的 ...

    3. ZooKeeper概述与安装

      ZooKeeper笔记 ZooKeeper概述 背景: 现代企业对计算机系统的计算存储能力要求越来越高,单纯的高性能服务器已经无法满足要求.企业的IT架构从集中式向分布式过度. 所谓分布式,就是将一个 ...

    4. Zookeeper概述、特点、数据模型

      Zookeeper 1.Zookeeper概述 Zookeeper是一个工具,可以实现集群中的分布式协调服务. 所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工作.   Zo ...

    5. 大数据之Zookeeper概述

      Zookeeper概述 Zookeeper是一个开放源码的分布式应用程序协调服务,是 Google的Chubby一个开源的实现,是 Hadoop和 HBASE的重要组件.主要解决分布式应用一致性问题. ...

    6. 分布式技术-Zookeeper概述

      概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目 在大数据技术生态圈中,zookeeper(动物管理员),Hadoop(大象),Hive(蜜蜂),Pig(猪) ...

    7. ZooKeeper概述(转)

      译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper是一个用于分布式应用的开源分布式协调服务.它提供了简单的原语集合 ...

    8. zk系列-zookeeper概述

      接触zk是2年前了,最近工作又比较依赖于zk,所以准备起个系列文章,系统的总结下. zookeeper是一个分布式的用于协调的服务,起源于Hadoop中的一个组件.分布式系统可以用zookeeper实 ...

    9. zookeeper_01:zookeeper概述

      应对场景: 相对于开发在一台计算机上运行的单个程序,如何让一个应用中的多个独立的程序协同工作是一件非常困难的事情.开发这样的应用,很容易让很多开发人员陷入如何使多个程序协同工作的逻辑中,最后导致没有时 ...

    10. 十四、Hadoop学习笔记————Zookeeper概述与基本概念

      顺序一致性:严格按照顺序在zookeeper上执行 原子性:所有事物请求的结果,在整个集群的应用情况一致 单一视图:无论从哪个服务器进入集群,看到的东西都是一致的 可靠性:服务端成功响应后,状态会 一 ...

    随机推荐

    1. RabbitMQ学习之:(十二)在Node.js环境下使用RabbitMQ

      学,以致用.找了半天Node.js下RabbitMQ的库,看上去都不太趁手,直到最后找到了amqp库,看上去倒还不错,照着例子,写了第一个RabbitMQ的客户端. 首先,使用 npm install ...

    2. ES安装的相关

      es安装https://www.cnblogs.com/jingping/p/9448099.htmlhttps://blog.csdn.net/zhanyu1/article/details/880 ...

    3. Vim/gVim 中文显示为乱码的解决办法

      打开vimrc文件,在vim的安装目录下可以找到该文件,或在windows下是在vim/gvim下输入:edit $vim/_vimrc. 在文件的末尾添加一句 "set fileencod ...

    4. VS开发】如何给console控制台程序更换应用程序图标

      [VS开发]如何给console控制台程序更换应用程序图标 标签:[VS开发] 实际上非常简单,就是增加一个图标资源,在资源视图里,然后修改其ID为IDC_MAINFRAME,然后编译生成即可! 20 ...

    5. C学习笔记-字符串

      对于C语言来说,字符串其实就是最后一个元素为'\0'的char数组 字符数组的初始化 字符数组常见的有两种初始化方式 char str[] = "hello"; 或者 char s ...

    6. Nuxt的动态路由及路由校验入门

      其实动态路由就是带参数的路由.比如我们现在新闻模块下面有很多新闻详情页,这时候就需要动态路由的帮助了. 新闻详细页面我们在news文件夹下面新建了_id.vue的文件,以下划线为前缀的Vue文件就是动 ...

    7. python 小数据池,代码块, is == 深入剖析

      python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了, ...

    8. XXLJOB2.1.0数据源配置踩坑记录

      最近在看XXLJOB,因为截至到发文时间最新的版本是2.1.0而且需要建立的数据库与Quartz解耦了,所以就用了最新的版本. 首先说一下踩坑过程: 代码开发完成之后,在定时跑的时候第一次跑的多数失败 ...

    9. python------模块基础【第二部分-time】------

      一.time UTC/GMT:世界时间 本地时间:本地时区时间 python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01- ...

    10. 单档——PK单号新增、修改时不允许编辑,PK单号自动生成

      由系统自动生成单号(日期+流水),用户新增.修改时不允许编辑单号: 范例(cxmt631): 1)在#单头栏位开启设定#中,即 cxmt631_set_entry(p_cmd)下: #add-poin ...