ZooKeeper

使用python操作zookeeper

北战南征 提交于 2020-12-24 08:03:26
kazoo 介绍 zookeeper的开发接口以前主要以java和c为主,随着python项目越来越多的使用zookeeper作为分布式集群实现,python的zookeeper接口也出现了很多,现在主流的纯python的zookeeper接口是kazoo。因此如何使用kazoo开发基于python的分布式程序是必须掌握的。 安装kazoo pip3 install kazoo 基本操作 from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1 zk.start() #与zookeeper连接 zk.stop() #与zookeeper断开 创建节点 from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1 zk.start() #与zookeeper连接 #makepath=True是递归创建,如果不加上中间那一段,就是建立一个空的节点 zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True) node = zk.get

Java中不可或缺的50个小技巧,好用!

拥有回忆 提交于 2020-12-24 01:01:27
《Effective JavaJava》名著,必读。如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提升编码素质。 以下内容只记录了我自己整理的东西,还是建议读原文。为了聚焦知识点,一些说明故意忽略掉了。相当于是一篇摘要。 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。 优势: 可读性高(方法名) 性能(不一定创建对象) 灵活性高 下面针对三个优势进行一些解读。 可读性高 new Point(x,y)和Point.at(x,y)、Point.origin()。构造函数只能看出两个参数,不知其意,后者更易理解。 性能 在某些情况下,可以事先进行实例化一些对象,调用时直接调用即可,不需要进行改变。比如,Boolean。 public final class Boolean implements Serializable, Comparable<Boolean> { // 预先设置两个对象 public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public Boolean(boolean var1) { this

美团Leaf分布式ID生成策略

别说谁变了你拦得住时间么 提交于 2020-12-22 23:51:16
ID生成原则 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 segment号段模式 重要字段说明:biz_tag用来区分业务,max_id表示该biz_tag目前所被分配的ID号段的最大值,step表示每次分配的号段长度。 test_tag在第一台Leaf机器上是1~1000的号段,当这个号段用完时,会去加载另一个长度为step=1000的号段,假设另外两台号段都没有更新,这个时候第一台机器新加载的号段就应该是3001~4000。同时数据库对应的biz_tag这条数据的max_id会从3000被更新成4000,更新号段的SQL语句如下: UPDATE table SET max_id=max_id+step WHERE biz_tag= xxx SELECT tag, max_id, step FROM table WHERE biz_tag =xxx 实时监控: 优点:

9种分布式ID生成之美团(Leaf)实战

回眸只為那壹抹淺笑 提交于 2020-12-22 11:16:40
本文收录在 GitHub 地址 https://github.com/chengxy-nds/Springboot-Notebook 引言 前几天写过一篇《 一口气说出 9种 分布式ID生成方式,面试官有点懵了 》,里边简单的介绍了九种分布式ID生成方式,但是对于像 美团(Leaf) 、 滴滴(Tinyid) 、 百度(uid-generator) 都是一笔带过。而通过读者留言发现,大家普遍对他们哥三更感兴趣,所以后边会结合实战,详细的对三种分布式ID生成器学习,今天先啃下 美团(Leaf) 。 不了解分布式ID的同学,先行去看《一口气说出 9种 分布式ID生成方式,面试官有点懵了》温习一下基础知识,这里就不再赘述了 美团(Leaf) Leaf 是美团推出的一个分布式ID生成服务,名字取自德国哲学家、数学家莱布尼茨的一句话:“There are no two identical leaves in the world.”(“世界上没有两片相同的树叶”),取个名字都这么有寓意,美团程序员牛掰啊! Leaf 的优势: 高可靠 、 低延迟 、 全局唯一 等特点。 目前主流的分布式ID生成方式,大致都是基于 数据库号段模式 和 雪花算法(snowflake) ,而美团(Leaf)刚好同时兼具了这两种方式,可以根据不同业务场景灵活切换。 接下来结合实战,详细的介绍一下 Leaf 的 Leaf

Java多线程访问Synchronized同步方法的八种使用场景

 ̄綄美尐妖づ 提交于 2020-12-22 01:50:58
简介 本文将介绍7种同步方法的访问场景,我们来看看这七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。 八种使用场景: 接下来,我们来通过代码实现,分别判断以下场景是不是线程安全的,以及原因是什么。 两个线程同时访问同一个对象的同步方法 两个线程同时访问两个对象的同步方法 两个线程同时访问(一个或两个)对象的静态同步方法 两个线程分别同时访问(一个或两个)对象的同步方法和非同步方法 两个线程访问同一个对象中的同步方法,同步方法又调用一个非同步方法 两个线程同时访问同一个对象的不同的同步方法 两个线程分别同时访问静态synchronized和非静态synchronized方法 同步方法抛出异常后,JVM会自动释放锁的情况 场景一:两个线程同时访问同一个对象的同步方法 分析:这种情况是经典的对象锁中的方法锁,两个线程争夺同一个对象锁,所以会相互等待,是线程安全的。 两个线程同时访问同一个对象的同步方法,是线程安全的。 1 我们在前文中已经讲过了。代码和详细讲解在《Java中synchronized实现对象锁的两种方式及原理解析》中的第二部分《方法锁》中,在此就不再重述了。 场景二:两个线程同时访问两个对象的同步方法 这种场景就是对象锁失效的场景

JVM GC耗时频频升高,我来教你排查

好久不见. 提交于 2020-12-22 00:13:32
1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中

安装kafka 集群 步骤

醉酒当歌 提交于 2020-12-19 12:36:00
1.下载 http://mirror.bit.edu.cn/apache/kafka/2.1.0/kafka_2.11-2.1.0.tgz 2.解压 tar -zxvf kafka_2.11-2.1.0.tgz 3.创建两份配置文件 cd conf cp server.properties server1.properties cp server.properties server2.properties 4.创建两个log目录 cd logs mkdir log1 log2 5.编辑配置文件 编辑 server1.properties,server2.properties 主要修改点 #broker id 在集群中必须唯一 broker.id=1 #监听端口 #listeners=PLAINTEXT://:9001 host.name=192.168.1.1 port=9001 #topic 分区数量 num.partitions=5 # 数据存储目录 log.dirs=/home/kafka/kafka_2.12-2.1.0/logs/log1 # zookpeer 配置 zookeeper.connect=localhost:2181,localhost:2182,localhost:2183 两个文件不同的地方 broker.id,log.dirs ,host.name

ZooKeeper的核心原理

筅森魡賤 提交于 2020-12-18 17:36:18
前言 在了解了zk的基本概念以后,我们来介绍一下ZK的核心原理。 没有了解过zk的同学,请先去了解zk的基本概念---->>> ZooKeeper入门指南 zk的角色 ZooKeeper的zab协议 zookeeper的核心是 原子广播 ,这个机制保证了各个server之间的同步。实现这个机制的协议叫做 Zab协议 。 zab协议有两种模式,分别是 恢复模式 和 广播模式 。当服务启动或者 leader 崩溃后, Zab 就进入了 恢复模式 。当 leader 被选举出来且 超过一半的server 完成了跟leader的 状态同步 以后,恢复模式结束。 zookeeper的工作原理 为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。 每个Server在工作过程中有三种状态: LOOKING:当前server没有发现leader的情况,通常出现在server启动时。 LEADING:当前server成为了leader。 FOLLOWING:leader已经选举出来

从零入门 Serverless | 架构的演进

北慕城南 提交于 2020-12-18 17:33:49
作者 | 许晓斌 阿里云高级技术专家 传统单体应用架构 十多年前主流的应用架构都是单体应用,部署形式就是一台服务器加一个数据库,在这种架构下,运维人员会小心翼翼地维护这台服务器,以保证服务的可用性。 ▲ 单体架构 单体应用架构面临的问题 随着业务的增长,这种最简单的单体应用架构很快就面临两个问题。首先,这里只有一台服务器,如果这台服务器出现故障,例如硬件损坏,那么整个服务就会不可用;其次,业务量变大之后,一台服务器的资源很快会无法承载所有流量。 解决这两个问题最直接的方法就是在流量入口加一个负载均衡器,使单体应用同时部署到多台服务器上,这样服务器的单点问题就解决了,与此同时,这个单体应用也具备了水平伸缩的能力。 ▲ 单体架构(水平伸缩) 微服务架构 1. 微服务架构演进出通用服务 随着业务的进一步增长,更多的研发人员加入到团队中,共同在单体应用上开发特性。由于单体应用内的代码没有明确的物理边界,大家很快就会遇到各种冲突,需要人工协调,以及大量的 conflict merge 操作,研发效率直线下降。 因此大家开始把单体应用拆分成一个个可以独立开发、独立测试、独立部署的微服务应用,服务和服务之间通过 API 通讯,如 HTTP、GRPC 或者 DUBBO。基于领域驱动设计中 Bounded Context 拆分的微服务架构能够大幅提升中大型团队的研发效率。 2.

1+X云计算平台运维与开发认证(中级)样卷B-实操过程

ぃ、小莉子 提交于 2020-12-18 13:12:55
个人博客地址: http://www.mwbdtth.club/ 选择题可能有些题目有点小问题,请酌情参考,主要还是以实操为主 单选题(200分): 1.下面关于软件项目开发过程,叙述错误的是?(10分) A、敏捷开发从需求、计划、开发、测试,直到项目结束,整个周期一直在迭代中 B、敏捷开发中开发、测试、发布又可以单独迭代多次 C、瀑布式模型分为计划、分析、设计、程序开发、测试、修改和整合,一个阶段结束,另一个阶段接着开始 D、瀑布式模型着重迭代式开发,分析、设计、开发、测试和发布(正确答案) 2.敏捷开发从需求、计划、开发、测试,直到项目结束,整个周期一直在迭代中,而其中可以单独迭代多次的不包括哪个过程?(10分) A、开发 B、测试 C、计划(正确答案) D、发布 3.以下关于STP协议的描述中,哪项是正确的? (10分) A、STP运行在交换机和网桥设备上 B、STP协议是一个二层链路管理协议 C、STP在选定根网桥,让一些端口进入阻塞工作模式,这些被阻塞端口没有被激活(正确答案) D、STP的主要功能是在保证网络中没有回路的基础上,允许在第二层链路中提供冗余路径 4.以下哪个状态不是RSTP的工作状态? (10分) A、监听状态(正确答案) B、丢弃状态 C、转发状态 D、学习状态 5.在常用的数据库表单管理命令当中,“use 数据库;”名称的作用是?(10分) A