- 博客(74)
- 收藏
- 关注
原创 MapReduce流程
MapReduce流程 MapReduce流程1.MapReduce架构1.MapReduce架构 Hadoop MapReduce采用了Master/Slave(M/S)架构,主要由以下几个组件组成:Client、JobTracker、TaskTracker和Task。如下图所示:(1)Client 用户编写的MapReduce程序通过Client提交到JobTracker端。在Hadoop内部用Job表示MapReduce程序,一个MapReduce可对应多个Job,每个Job会被分解成
2021-08-19 13:26:28
1084
原创 Java访问权限
Java访问权限权限同一个类同一个包不同包的子类不同包中非子类private√default√√protected√√public√√√√
2021-08-18 09:49:21
81
原创 Java static关键字
Java static关键字1.static变量 static修饰的变量也被称为静态变量,类似于全局变量。该变量对每个类来说都只有一份存储空间,是所有对象共享的。static变量会在其所在的类被初次加载的时候被初始化,只会初始化这一次。 若是有多个static变量存在,会根据其定义的顺序进行初始化。 引用static变量有两种方法。可以通过实例化后的对象去调用它,也可以通过类名直接调用。如下所示:public class StaticTest { static int x = 4;
2021-08-17 20:16:23
101
原创 Java final关键字
Java final关键字1.final数据修饰基本类型 修饰基本类型时,final使数值恒定不变。此时就相当于将其修饰的变量变为了一个常量,在对这个常量定义时,可以直接赋值也可以先不赋值,但若是定义时不赋值,后面使用这个值之前就必须要进行赋值才能用,且其值后面就一直是所赋的这个值了。修饰对象引用 修饰对象引用时,final使引用恒定不变。当引用被初始化指向一个对象之后,就无法再把它改为指向另一个对象。但是对象自身是可以被修改的。2.final方法 final修饰的方法无法被覆盖、重写。
2021-08-17 19:34:12
94
原创 Java八种基本数据类型
Java八种基本数据类型基本类型大小包装器类型boolean4或1字节Booleanchar2字节Characterbyte1字节Byteshort2字节Shortint4字节Integerlong8字节Longfloat4字节Floatdouble8字节DoublevoidVoid 这里比较特殊的是boolean类型,其只有两个值,ture和false。 如果boolean是单独使用的,
2021-08-16 20:22:53
100
原创 构建Zookeeper高可用的集群
构建Zookeeper高可用的集群1.集群组成 一个ZooKeeper集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。基于这个特性,如果想搭建一个能够允许F台机器down掉的集群,那么就要部署一个由2×F+1台服务器构成的ZooKeeper集群。因此,一个由3台机器构成的ZooKeeper集群,能够在挂掉1台机器后依然正常工作,而对于一个由5台服务器构成的ZooKeeper集群,能够对2台机器挂掉的情况进行容灾。如果是一个由6台服务器构成的ZooKeeper
2021-08-10 15:20:15
428
原创 ZooKeeper Leader选举
ZooKeeper Leader选举 ZooKeeper集群中有三种服务器角色:Leader、Follower和Observe。Leader选举是ZooKeeper中最重要的技术之一,也是保证分布式数据一致性的关键所在。1.ZooKeeper的Leader选举的过程服务器启动时期的Leader选举 以3台机器组成的服务器集群为例,在服务器集群初始化阶段,当有一台服务器启动的时候,它是无法进行Leader选举的。当第二台机器也启动后,此时这两台机器已经能够互相通信,每台机器都试图找到一个Leade
2021-08-10 14:39:38
704
原创 ZooKeeper服务器启动流程
ZooKeeper服务器启动1.单机版服务器启动ZooKeeper服务器的启动,大体可以分为下面五个主要步骤:配置文件解析、初始化数据管理器、初始化网络I/O管理器、数据恢复和对外服务。流程如下图所示:2.集群版服务器启动Leader和Follower启动期交互过程1.创建Leader服务器和Follower服务器2.Leader服务器启动Follower接收器LearnerCnxAcceptor3.Leader服务器开始和Leader建立连接4.Leader服务器创建LearnerH
2021-08-09 20:20:57
3195
原创 ZooKeeper会话的创建过程
会话创建过程中ZooKeeper客户端的工作流程 客户端一次会话创建的过程可以分为三个阶段:初始化阶段、会话创建阶段、响应处理阶段。初始化阶段1.初始化ZooKeeper对象 通过调用ZooKeeper的构造方法来实例化一个ZooKeeper对象,在初始化过程中,会创建一个客户端的Watcher管理器:ClientWatchManager。2.设置会话默认Watcher 如果在构造方法中传入了一个Watcher对象,那么客户端会将这个对象作为默认Watcher保存在ClientWatchM
2021-08-09 17:03:24
273
原创 ZooKeeper的系统模型
ZooKeeper的系统模型 ZooKeeper的系统模型1.系统模型(1)数据模型(2)节点特性(3)版本(4)Watcher1.系统模型(1)数据模型 ZooKeeper的视图结构和标准的Unix文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的“数据节点”概念,称之为ZNode。ZNode是ZooKeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载节点,构成一个层次化的命名空间,是个树。其数据模型如下图所示: 在ZooKeeper
2021-08-09 15:09:49
425
原创 ZooKeeper典型应用场景总结
ZooKeeper典型应用场景总结1.数据发布/订阅 数据发布/订阅系统,即配置中心,是发布者将数据发布到ZooKeeper的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。...
2021-07-26 21:19:03
432
原创 ubuntu20.04安装zookeeper
ubuntu20.04安装zookeeper1.下载zookeeper安装包 进入https://downloads.apache.org/zookeeper/下载安装包,然后上传至虚拟机中的ubuntu。我这里选择的是zookeeper-3.6.3。2.解压zookeeper安装包tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz3.开始配置环境(1)配置文件zoo.cfg 这里需要将解压后zookeeper目录下的conf目录下的zoo_samp
2021-07-19 11:28:33
2860
1
原创 Zookeeper的ZAB协议
Zookeeper介绍1.Zookeeper是什么 Zookeeper是一个开放源代码的分布式协调服务,由互联网公司雅虎创建,是Google Chubby的开源实现。Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基本它实现诸如数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列
2021-07-15 14:05:29
290
原创 分布式一致性协议——3PC协议
分布式系统下的一致性协议——3PC 3PC,是Three-Phase Commit的缩写,即三阶段提交,是2PC的改进版,将2PC协调的“提交事务请求”过程一分为二,形成了由CanCommit、PreCommit和do Commit三个阶段组成的事务处理协议。1.3PC协议流程(1)阶段一:CanCommit 1.事务询问 协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。 2.各参与者向协调者反馈事务询问的响应
2021-07-13 17:43:23
724
原创 分布式一致性协议——2PC协议
分布式系统下的一致性协议——2PC 2PC,是Two-Phase Commit的缩写,即二阶段提交。目前,绝大部分的关系型数据库都采用2PC协议来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务,统一决定事务的提交或回滚,从而能够有效地保证分布式数据一致性。1.2PC协议的执行流程 2PC协议是将事务的提交过程分成了两个阶段来进行处理。(1)提交事务请求(投票阶段) 1.事务询问。 协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
2021-07-13 16:37:53
793
原创 分布式系统的BASE理论
分布式系统的BASE理论 BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。 BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的。 核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。1.基本可用 基本可用是指分布式系统在出现不可预知故障的时候,允许
2021-07-13 15:01:17
185
原创 分布式系统的CAP理论
分布式系统的CAP理论 CAP理论就是:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本要求,最多只能同时满足其中的两项。1.一致性 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。 对于一个将数据副本分布在不同分布式节点上的系统来说,如果对第一个节点的
2021-07-13 14:36:21
427
原创 单机数据库下事务的ACID
单机数据库下的ACID 事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义上的事务特指数据库事务。事务具有四个特征,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为事务的ACID特性。1.原子性 原子性指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行。任何一项操作失败都将导致整个事务失败。2.一致性 一致性是指事务的
2021-07-13 11:35:13
180
原创 Redis Cluster
Redis Cluster Redis Cluster是Redis作者自己提供的Redis集群化方案,该集群由三个Redis节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。它们之间相互连接组成一个对等的集群,通过一种特殊的二进制协议交互集群信息。 Redis Cluster将所有数据划分为16384个槽位,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。 当Redis Cluster的客户端来连接集群时,也会得到一份集群的槽位配置信息。当客户端要查找某个k
2021-07-10 12:25:48
149
原创 Redis Sentinel集群
Redis Sentinel集群 Redis Sentinel集群是Redis官网提供的一种抵抗节点故障的高可用方案,当故障发生时可以自行主从切换。 可以将Redis Sentinel集群看成是一个Zookeeper集群,它是集群高可用的心脏,一般由3~5个节点组成,当个别节点挂了时,集群还是可以正常运转。 Sentinel负责监控主从节点的监控,当主节点挂掉时,自动选择一个最优的从节点切换成主节点。客户端连接集群时,会先连接Sentinel,通过Sentinel来查询主节点的地址,然后再连接
2021-07-08 14:02:38
1700
原创 Redis的懒惰删除
Redis的懒惰删除1.Redis中的懒惰删除 Redis内部实际上并不只有一个主线程,还有几个异步线程专门用来处理一些耗时的操作。异步线程在Redis内部被称为“BIO”,全称是Background IO,意思是在背后默默干活的IO线程。(1)del指令 Redis的删除指令del会直接释放对象的内存,多数情况下,这个指令非常快。但是如果被删除的key是一个非常大的对象,那么删除操作就会导致单线程卡顿。 为了解决这个问题,Redis4.0版本引入了unlink指令,它能对删除指令进行懒处理
2021-07-07 17:01:06
1215
原创 Redis过期策略
Redis过期策略Redis所有的数据结构都可以设置过期时间,时间一到就会被自动删除。1.过期的key集合 Redis会将设置了过期时间的key放入一个独立的字典中,称为过期字典,与没有时间限制的key区分开来,后面会定时遍历这个独立字典来删除到期的key。除了定时遍历之外,它还会使用惰性策略来删除过期的key。2.定时删除策略 Redis默认每秒进行10次过期扫描,过期扫描不会遍历过期字典中所有的key,而是采用一种简单的贪心策略,步骤如下:(1)从过期字典中随机选出20个key(2)删除
2021-07-05 14:53:49
308
原创 Redis缓存淘汰机制
Redis缓存淘汰机制当Redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换,这样会使得redis的性能急剧下降。在生产环境中,是不允许redis出现交换行为的,为了限制最大使用内存,redis提供了配置参数maxmemory来限制内存超出期望大小。当实际内存超出maxmemory时,redis提供了几种可选策略来让用户自己决定该如何腾出新的空间继续提供读写服务。有以下几种策略:1.noeviction:继续读,停止写。这样做能够保证不丢失数据,但是会使得线上的业务无法继续进行。这
2021-07-05 12:29:47
2780
原创 Redis集群的主从复制
Redis集群的主从同步主从的作用在于,当主节点Master挂掉的时候,主节点需要经过数据恢复和重启的过程才能继续运行,这样的话会拖延很长时间,从而影响到线上业务的持续服务。运维可以让从节点Slave过来接管,从而使得服务可以继续进行。现代分布式系统存有一理论基石,就是CAP原理。C:Consistent,一致性A:Availability,可用性P:Partition tolerance,分区容忍性分布式系统的节点往往都是分布在不同的机器上进行网络隔离开的,那么必然会有网络断开的风险,也就是
2021-07-02 16:55:23
124
原创 Redis持久化机制
Redis持久化机制Redis的数据全部在内存中,若是突然宕机,数据会全部丢失,因而要有一种机制保证Redis的数据不会因为故障而丢失,这就是Redis的持久化机制。Redis的持久化机制有两种,一种是快照,另一种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而AOF日志记录的是内存数据修改的指令记录文本。1.快照原理由于Redis是单线程程序,因而这个线程要同时负责多个客户端套接字的并发读写操作和内存数据结构的读写。在服务线上
2021-06-30 21:26:51
138
原创 Redis高级数据结构——GeoHash
Redis高级数据结构——GeoHashRedis在3.2版本以后增加了地理位置Geo模块,可以使用Redis实现”附近的人“类似的功能。1.GeoHash算法GeoHash算法将二维的经纬度数据映射到一维的整数,使得所有的元素挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。当想要计算“附近的人”时,将目标位置映射到这条线上,然后在这个一维的线上获取附近的点就好。那GeoHash是怎么将二维经纬度映射为一维的整数呢?它将整个地球视为一个二维平面,然后划分成一系列正方形的方格,
2021-06-30 10:59:51
298
原创 Redis高级数据结构——HyperLogLog
Redis高级数据结构——HyperLogLogredis的高级数据结构HyperLogLog提供不精确的去重计数方案,虽然不精确,但是标准误差也达到了0。81%,也足以满足很多场合了。比如,要对大型网站的每天独立访客数进行大致统计的话,就可以用到HyperLogLog了。1.HyperLogLog的使用方法pfadd key element [element …] #增加计数,类似于set的saddpfcount key #获取计数,类似于set的scard以redis-cli命令行的方式
2021-06-07 20:09:41
386
原创 Redis高级数据结构——位图
Redis高级数据结构——位图对于bool型数据,存取时使用普通的key/value会占很大的内存,可以使用位图来存放,可以大大节省存储空间。比如用户的签到情况,1表示已签到,0表示未签到,那么一年的签到情况只需要使用一个365位(46个字节)的空间即可存储。若是使用字符串的话则需要365个字节,当用户数量庞大的时候,使用位图是非常节省空间的。位图不是特殊的数据结构,其实就只是一个byte数组,如下图所示。1.位图的基本操作setbit key offset value #将位图中的offs
2021-06-04 20:29:46
421
原创 Redis基础数据结构——集合
Redis基础数据结构——集合redis的集合set相当于Java里面的HashSet,它内部的键值对是无序的、唯一的。它的内部相当于一个特殊的字典,字典中所有的value都是一个值NULL。set结构可以用来存储在某活动中中奖的用户ID,因为有去重功能,可以保证同一个用户不会中奖两次。1.redis集合的基本操作(1)单集合操作sadd key member [member …] #添加一个或多个元素到集合里 sismember key member #判断一个元素是否是集合里的smemb
2021-05-31 19:56:09
319
原创 Redis基础数据结构——字典
Redis基础数据结构——字典redis的字典hash相当于Java里面的HashMap,实现结构上也与Java的HashMap一样,都是“数组+链表”的二维结构。不同的是,redis的字典的值只能是字符串,并且它们rehash的方式也不一样,相较于Java中HashMap的一次性rehash,redis中是渐进式rehash。hash结构用来存储用户信息时,与字符串需要一次性全部序列化整个对象不同,hash可以对用户结构中的每个字段单独存储,这样当我们需要获取用户信息时可以进行部分获取。1.red
2021-05-31 18:53:49
1231
原创 Redis基础数据结构——列表
Redis基本数据结构——列表redis的列表list相当于Java里面的LinkedList,列表是一个双向链表。redis的列表常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串,塞进redis的列表,另一个线程从这个列表中轮询数据进行处理。1.redis列表的基本操作lpush key value [value …] #列表的左边加入元素rpush key value [value …] #列表的右边加入元素lpop key #列表的左边出一个元素rpop key #列表
2021-05-30 19:39:43
391
原创 Redis基础数据结构——字符串
Redis基础数据结构——字符串字符串string是Redis最简单的数据结构,它的内部表示是一个字符数组。它是动态字符串,可以进行修改,内部结构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。字符串一个常见的用途是缓存用户信息,通过将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串塞进Redis来缓存,取用户信息时要进行反序列化。Redis中所有的数据结构都以唯一的key字符作为名称,然后通过唯一key值来获取相应的value数据,不同类型的数
2021-05-30 15:54:09
439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅