Chubby

关于分布式锁的这些加分(钱)的面试题,你都拿到了吗?

∥☆過路亽.° 提交于 2020-08-18 07:38:58
引言 为什么要学习分布式锁? 最简单的理由就是作为一个社招程序员,面试的时候一定被面啦,你看怎么多公众号都翻来覆去的发分布式锁的主题,可见它很重要啦,在高考里这就是送分题,不要怪可惜的。 那应届生也会问吗?这就不一定了,但是,如果你会,面试官肯定会多给你那点分(钱) 第三,分布式锁在稍微有丢丢规模大系统里是必备技能啦。认真看看吧。 分布式锁要解决的问题 分布式锁是一个在分布式环境中的重要原语,它表明不同进程间采用互斥的方式操作共享资源。常见的场景是作为一个sdk被引入到大型项目中,主要解决两类问题: 提升效率:加锁是为了避免不必要的重复处理。例如防止幂等任务被多个执行者抢占。此时对锁的正确性要求不高; 保证正确性:加锁是为了避免Race Condition导致逻辑错误。例如直接使用分布式锁实现防重,幂等机制。此时如果锁出现错误会引起严重后果,因此对锁的正确性要求高。 Java里的锁: 锁是开发过程中十分常见的工具,你一定不陌生,悲观锁,乐观锁,排它锁,公平锁,非公平锁等等,很多概念,如果你对java里的锁还不了解,可以参考这一篇:不可不说的Java“锁”事(https://tech.meituan.com/2018/11/15/java-lock.html),这一篇写的很全面了,但是对于初学者,知道这些锁的概念,由于缺乏实际工作经验,可能并不了解锁的实际使用场景

分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁

旧城冷巷雨未停 提交于 2020-08-17 09:55:18
分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 今天对分布式相关的一些概念与理论进行学习。 1.集群与分布式 集群 :相同的应用部署在多台服务器。 分布式 :不同的应用部署在多台服务器。 1.数据一致性 在分布式环境中,为了提高系统整体性能,数据以多副本冗余机制存储,副本之间通过数据复制进行同步。 数据副本与数据复制必然引入新的问题:如何处理副本数据的一致性? 总的来说,无法找到一种能够满足所有分布式环境的一致性解决方案,很多时候要在系统性能与数据一致性之间权衡。 由此,分布式一致性常见以下三种一致性: 1.1.强一致性 强一致性 :数据写以后,任意时刻,所有数据副本中的数据都是一致的。 强一致性,也可以称为:原子一致性、线性一致性。 强一致性,是非分布式环境中主要被采用的一致性原则。 在非分布式环境中,数据可以集中存储,例如整个系统就一个数据库,这种情况下容易保证数据的强一致性。 在分布式环境中,数据存在多个副本,分布在不同的服务器上,数据副本之间的同步会经过网络通讯,这种情况下,很难保证强一致性。 1.2.顺序一致性 顺序一致性 :任何一次读都能读取到数据的最近一次写的数据,系统的所有进程的顺序一致,而且是合理的。 顺序一致性,其实本人接触也不多

ZooKeeper: 互联网系统无等待协调服务

ⅰ亾dé卋堺 提交于 2020-08-11 00:50:46
文章目录 1 摘要 2 1 简介 3 2 ZooKeeper服务 3.1 2.1 服务概述 3.2 2.2 客户端API 3.3 2.3 ZooKeeper保证 3.4 2.4 原语的例子 4 3 ZooKeeper应用 5 4 ZooKeeper 实现 5.1 4.1 请求处理器 5.2 4.2 原子广播 5.3 4.3 副本数据库 5.4 4.4 C/S交互 6 5 测评 6.1 5.1 吞吐量 6.2 5.2 请求延迟 6.3 5.3 屏障的性能 7 6 相关工作 8 7 结论 9 致谢 10 参考文献 摘要 本文描述分布式应用的协调服务:ZooKeeper。ZooKeeper是关键基础设施的一部分,其目标是给客户端提供简洁高性能内核用于构建复杂协调原语。在一个多副本、中心化服务中,结合了消息群发、共享注册和分布式锁等内容。ZooKeeper提供的接口有共享注册无等待的特点,与事件驱动的分布式系统缓存失效类似,还提供了强大的协调服务。 ZooKeeper接口提供了高性能服务实现。除了无等待特性,还提供了对于客户端请求消息FIFO执行顺序保证,以及改变ZooKeeper状态的所有请求的线性化保证。这样的设计保证了对于本地服务的读请求,可以用高性能处理管道实现。论文中给出了目标负载,2:1到100:1的读写比例,可以处理每秒1万到10万的事务。由于其高性能

ZooKeeper学习第一期---Zookeeper简单介绍

六眼飞鱼酱① 提交于 2020-08-10 18:28:48
一、分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术。那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果。这时,有人可能会说这个简单,写一个调度算法就轻松解决了。说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解。如果这些进程全部是跑在一台机上的话,相对来说确实就好办了,问题就在于他是在一个分布式的环境下,这时问题又来了,那什么是分布式呢?这个一两句话我也说不清楚,但我给大家画了一张图希望能帮助大家理解这方面的内容,如果觉得不对尽可拍砖,来咱们看一下这张图,如图1.1所示。 图 1.1 分布式系统图 给大家分析一下这张图,在这图中有三台机器,每台机器各跑一个应用程序。然后我们将这三台机器通过网络将其连接起来,构成一个系统来为用户提供服务,对用户来说这个系统的架构是透明的,他感觉不到我这个系统是一个什么样的架构。那么我们就可以把这种系统称作一个 分布式系统 。 那我们接下来再分析一下,在这个分布式系统中如何对进程进行调度,我假设在第一台机器上挂载了一个资源,然后这三个物理分布的进程都要竞争这个资源,但我们又不希望他们同时进行访问,这时候我们就需要一个 协调器 ,来让他们有序的来访问这个资源

Zookeeper入门,一篇就够啦

若如初见. 提交于 2020-08-08 04:53:13
创作不易,如果觉得这篇文章对你有帮助,欢迎各位老铁点个赞呗,您的支持是我创作的最大动力! 本系列主要总结下Zookeeper的基础使用,笔者准备写四篇文章: 博文内容 资源链接 Linux下搭建Zookeeper运行环境 https://blog.csdn.net/smilehappiness/article/details/105933433 Zookeeper入门,一篇就够啦 https://blog.csdn.net/smilehappiness/article/details/105933292 Zookeeper客户端ZkClient、Curator的使用,史上最详细的教程来啦~ https://blog.csdn.net/smilehappiness/article/details/105938058 Zookeeper使用总结(进阶篇) https://blog.csdn.net/smilehappiness/article/details/105938119 文章目录 前言 1 初识Zookeeper 2 Zookeeper运行环境 3 zoo.cfg配置文件详解 4 Zookeeper数据结构 5 Zookeeper客户端 5.1 图形界面客户端 5.2 命令行客户端 前言 本文主要介绍Zookeeper的一些概念,以及通过命令行的方式

【分布式】Chubby与Paxos

六月ゝ 毕业季﹏ 提交于 2020-08-07 09:53:50
一、前言   在上一篇理解了Paxos算法的理论基础后,接下来看看Paxos算法在工程中的应用。 二、Chubby   Chubby是一个面向松耦合分布式系统的锁服务,GFS(Google File System)和Big Table等大型系统都是用它来解决分布式协作、元数据存储和Master选举等一些列与分布式锁服务相关的问题。Chubby的底层一致性实现就是以Paxos算法为基础,Chubby提供了粗粒度的分布式锁服务,开发人员直接调用Chubby的锁服务接口即可实现分布式系统中多个进程之间粗粒度的同控制,从而保证分布式数据的一致性。    2.1 设计目标   Chubby被设计成为一个 需要访问中心化的分布式锁服务 。   ① 对上层应用程序的侵入性更小,使用一个分布式锁服务的接口方式对上层应用程序的侵入性更小,应用程序只需调用相应的接口即可使用分布式一致性特性,并且更易于保持系统已有的程序结构和网络通信模式。   ② 便于提供数据的发布与订阅,在Chubby进行Master选举时,需要使用一种广播结果的机制来向所有客户端公布当前Master服务器,这意味着Chubby应该允许其客户端在服务器上进行少量数据的存储和读取(存储主Master地址等信息),也就是对小文件的读写操作。数据的发布与订阅功能和锁服务在分布式一致性特性上是相通的。   ③ 开发人员对基于锁的接口更为熟悉

zookeeper

邮差的信 提交于 2020-08-07 07:36:26
ZooKeeper是一个 分布式 的,开放源码的 分布式应用程序 协调服务,是 Google 的Chubby一个 开源 的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 ZooKeeper包含一个简单的原语集,提供Java和C的接口。 ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口, 应用场景: 1、数据发布和订阅 2、负载均衡 3、命名服务 4、分布式协调 、通知、心跳服务 https://blog.csdn.net/cndmss/article/details/80220273 # zookeeper时间配置中的基本单位 (毫秒) tickTime = 2000 # 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime initLimit = 10 # 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 syncLimit = 5 #zookeper 数据存储目录 dataDir =/tmp/zookeeper #对客户端提供的端口号

【分布式】Chubby与Paxos

断了今生、忘了曾经 提交于 2020-08-06 09:44:19
一、前言   在上一篇理解了Paxos算法的理论基础后,接下来看看Paxos算法在工程中的应用。 二、Chubby   Chubby是一个面向松耦合分布式系统的锁服务,GFS(Google File System)和Big Table等大型系统都是用它来解决分布式协作、元数据存储和Master选举等一些列与分布式锁服务相关的问题。Chubby的底层一致性实现就是以Paxos算法为基础,Chubby提供了粗粒度的分布式锁服务,开发人员直接调用Chubby的锁服务接口即可实现分布式系统中多个进程之间粗粒度的同控制,从而保证分布式数据的一致性。    2.1 设计目标   Chubby被设计成为一个 需要访问中心化的分布式锁服务 。   ① 对上层应用程序的侵入性更小,使用一个分布式锁服务的接口方式对上层应用程序的侵入性更小,应用程序只需调用相应的接口即可使用分布式一致性特性,并且更易于保持系统已有的程序结构和网络通信模式。   ② 便于提供数据的发布与订阅,在Chubby进行Master选举时,需要使用一种广播结果的机制来向所有客户端公布当前Master服务器,这意味着Chubby应该允许其客户端在服务器上进行少量数据的存储和读取(存储主Master地址等信息),也就是对小文件的读写操作。数据的发布与订阅功能和锁服务在分布式一致性特性上是相通的。   ③ 开发人员对基于锁的接口更为熟悉

缘起:BigTable

狂风中的少年 提交于 2020-08-04 19:07:59
Google的三篇论文, Google File System , MapReduce 以及 Big Table 可以说是整个大数据领域的三驾马车,这里,我们简单介绍下这三驾马车基本都是干哈的,重点解读下 Bigtable: A Distributed Storage System for Structured Data 。 2003年的GFS :GFS是一个可扩展的分布式文件系统,主要解决传统单机文件系统中磁盘小,数据存储无冗余等问题; 2004年的MapReduce :MapReduce是一个基于分布式文件系统(例如,GFS)的分布式计算框架,主要用来处理大规模数据集; 2006年的BigTable :BigTable是一个用来管理结构化数据的分布式存储系统,其本质上一个分布式KV存储系统。 BigTable是个啥? BigTable是Google内部用来管理结构化数据的分布式存储系统,BigTable可以轻易地扩展到上千台机器,BigTable具有以下优点: 适用场景广泛:从需要高吞吐量的批处理作业到低延迟的用户数据服务,BigTable都可以胜任。 可伸缩:集群规模可水平扩展,BigTable部署规模可以小到3~5台,大到数千台,从而支撑不同的数据量; 高性能:性能这个,想必不用我BB了吧,各位看官,你们怎么看呢? 高可用:BigTable是主从结构,不会产生单点故障

Bigtable:结构化数据的分布式存储系统

六月ゝ 毕业季﹏ 提交于 2020-05-08 04:49:34
Bigtable最初是谷歌设计用来存储大规模结构化数据的分布式系统,其可以在数以千计的商用服务器上存储高达PB级别的数据量。开源社区根据Bigtable的设计思路开发了 HBase 。其优势在于提供了高效的随机读写,缺陷在于不(原生)支持类SQL的数据分析。 Bigtable的设计目标是:适应性广泛,可扩展,高性能和高可用。Bigtable将数据看作是一串无编码的字符串,由客户端负责对数据“编解码”,也就是说,对于Bigtable而言,数据是没有格式的,用数据库的术语即是,数据没有Schema,用户需要自行定义Schema。本文是Google的Bigtable论文的总结。 ###数据模型Data Model Bigtable“集群”( cluster )是一组运行着Bitable软件的进程,每一个集群都负责一组表( tables ),Bigtable中每一个 table 都是一个稀疏的,分布式的,持久化存储的多维度已排序的Map。每一条记录都以三个维度组织:行,列和时间戳( timestamps )。Map格式: (row:string,column:string,time:int64)->string 。称行,列和时间戳指定的数据为 cell 。一个典型的Bigtable中表的例子: 1. Row BigTable通过行关键字(row key)的字典顺序组织数据。