ZK

ZooKeeper面试题

人盡茶涼 提交于 2020-02-28 06:59:30
前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 面试题 ZooKeeper 是什么? ZooKeeper 提供了什么? Zookeeper 文件系统 ZAB 协议? 四种类型的数据节点 Znode Zookeeper Watcher 机制 -- 数据变更通知 客户端注册 Watcher 实现 服务端处理 Watcher 实现 客户端回调 Watcher ACL 权限控制机制 Chroot 特性 会话管理 服务器角色 Zookeeper 下 Server 工作状态 数据同步 zookeeper 是如何保证事务的顺序一致性的? 分布式集群中为什么会有 Master? zk 节点宕机如何处理? zookeeper 负载均衡和 nginx 负载均衡区别 Zookeeper 有哪几种几种部署模式? 集群最少要几台机器,集群规则是怎样的? 集群支持动态添加机器吗? Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的? Zookeeper 的 java 客户端都有哪些? chubby 是什么,和 zookeeper 比你怎么看?

Kafka配置与命令

一笑奈何 提交于 2020-02-28 00:50:54
1.基本概念: producer //消息生产者 consumer //消息消费者 consumer group //消费者组 可以通过设置group 来区分 队列模式 以及 发布订阅模式 kafka server //broker,kafka服务器 存放topic zookeeper //hadoop namenoade + RM HA | hbase | kafka topic //主题,副本数,分区 主题存在broker,一个主题 具有多个分区,每一个分区具有多个备份(备份数 小于等于 kafka节点数) partitions //分区数 replica //备份数 2.安装kafka 3.核心配置 kafka config server.properties 1. broker.id = key 唯一值 2. listeners 监听端口(提供给客户端响应的端口) 3. log.dirs = 本地日志目录 4. zookeeper.connect = zk集群 4.启动zk 5.启动kafka 6.验证kafka是否启动 netstat -anop | grep 9092 7.kafka shell创建topic bin/kafka-topic.sh --zookeeper master:2181 --replication-factor 3 --partitions 4

zookeeper应用场景

流过昼夜 提交于 2020-02-28 00:49:12
前言 ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。 值得注意的是,ZK并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利用其提供的一系列API接口(或者称为原语集),摸索出来的典型使用方法。 zookeeper典型应用场景 1 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。 应用中用到的一些配置信息放到ZK上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。 分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在ZK的一些指定节点,供各个客户端订阅使用。 分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用来分配收集任务单元

素小暖讲微服务

独自空忆成欢 提交于 2020-02-27 16:14:58
欲速则不达,欲达则欲速! 一、前言 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署。本博客尝试介绍微服务架构的一些实施细节和要求,探询微服务架构的由来,并最终提供我们团队内部的有一些实践总结,希望对大家有帮助。 二、什么是微服务 传统的web开发方式,通过对比比较容易理解什么是Microservice Architecture。和Microservice相对应的,这种方式一般被称为Monolithic(比较难传神的翻译)。所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。 用《The art of scalability》一书里提到的scale cube比较容易理解如何拆分。 我们叫分库分表,为人总结成了scale cube,这就是抽象的能力,把复杂的东西用最简单的概念解释和总结。X轴代表运行多个负载均衡器之后运行的实例,Y轴代表应用进一步分解为微服务(分库),数据量大时,还可以用Z轴将服务按数据分区分表。 Monolithic比较适合小项目,优点是: 开发简单直接,集中式管理 基本不会重复开发 功能都在本地,没有分布式的管理开销和调用开销 它的缺点也非常明显

Zookeeper知识梳理

丶灬走出姿态 提交于 2020-02-27 13:23:31
转载自: https://hadyang.github.io/interview/docs/architecture/distributed/zk/ 分布式应用 分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说, 对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成 。 通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为 集群 ,而在集群中运行的每台机器被称为 节点 。 分布式应用的优点 可靠性:单个或几个系统的故障不会使整个系统出现故障。 可扩展性:可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。 透明性:隐藏系统的复杂性,并将其显示为单个实体/应用程序。 分布式应用的挑战 竞争条件:两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。 死锁:两个或多个操作等待彼此无限期完成。 不一致:数据的部分失败。 ZooKeeper基础 Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据

史上最全的微服务知识科普

空扰寡人 提交于 2020-02-27 06:46:57
作者 | 董鹏 阿里巴巴技术专家 <a name="pLVMc"></a> 微服务 好处:实现跨团队的解耦,实现更高的并发(目前单机只能实现 c10k)不用再拷贝代码,基础服务可以公用,更好的支持服务治理,能够更好的兼容云计算平台。 RPC rpc:像调用本地方法一样调用远程函数; 客户端:一般利用动态代理生成一个接口的实现类,在这个实现类里通过网络把接口名称、参数、方法序列化后传出去,然后控制同步调用还是异步调用,异步调用需要设置一个回调函数; 客户端还需要维护负载均衡、超时处理、连接池管理等,连接池维护了和多个 server 的连接,靠此做负载均衡,当某个服务器宕机后去除该连接。请求上下文维护了请求 ID 和回调函数,超时的请求当回复报文到达后由于找不到请求上下文就会丢弃。 服务端:维护连接,网络收到请求后反序列化获得方法名称,接口名称,参数名称后通过反射进行调用,然后将结果在传回客户端; 序列化的方式:一种是只序列化字段的值,反序列化的时候重新构建对象再把值设置进去,另外一种方式直接将整个对象的结构序列化成二进制。 前者节省空间,后者反序列化速度快,目前的序列化框架也是在反序列化时间和占用空间之间权衡。有点类似哈夫曼编码,或者数据库怎么存储一行一行的数据。 <a name="J2qhC"></a> 注册中心 一般有 3 种模式: f5 做集中式代理; 客户端嵌入式代理例如

零知识证明zk-snark算法Ubuntu环境搭建

天涯浪子 提交于 2020-02-27 02:10:45
转载提醒 写在之前,我第一时间公开后,发现有人转载了本篇内容,但是没注明转载地址,这样是不友好的,以下内容是我个人在个人环境下搭建的,且被模糊转载(不加转载地址)后,找不到源头,有疑问的小伙伴都没地方去提问,这就没什么意义了。因此,转载请注明转载来源。 1. 环境搭建 1.1. Ubuntu环境搭建 使用的物料: Orcle VM VirtualBox-6.1.0-135406-Win.exe ubuntu-18.04.2-desktop-amd64.iso 1.2. Ubuntu网络设置 https://www.cnblogs.com/weschen/p/7096642.html 1.3. Ubuntu全屏设置 方法一: https://my.oschina.net/u/2454816/blog/1788356 方法二: https://blog.csdn.net/fmyzc/article/details/79486111 在终端输入xrandr,并回车。注意要是小写英文状态下输入。 输入我们需要设置的分辨率,xrandr -s 1920x1440,然后回车。1920后面的是字母x。 1.4. 在Ubuntu设置中文输入法 https://blog.csdn.net/nanhuaibeian/article/details/85851335 1.5. Ubuntu安装git

值得记录的几件事

耗尽温柔 提交于 2020-02-27 01:16:16
记录一些自己在工作、学习中觉得有价值、有思考、对他人有帮助的事件/成果。这件简单的事,希望可以坚持10年。 2019 年 工作 消息容灾解决方案。实现 阿里云RocketMQ 与公司自建 RocketMQ 的互为主备容灾。当某个服务不可用时,自动触发消息容灾与告警,保障业务无损。并且通过自建消息平台实现资源整合、监控,对于各消息资源在业务中的使用情况会有一个清晰的了解。 关键字:ZK、Redis、RocketMQ、HMQ。 全链路压测建设。实现线上压测流量的识别与 DB 操作的影子库路由。关键点: Dubbo Filter:实现压测标在整个分布式服务中的透传 Redis:业务缓存与压测缓存的数据隔离 MQ:忽略压测的消息下发,防止影响下游业务。 DB:路由影子库,防止污染线上库。 网关:忽略压测的服务请求。 单测mock工具。针对分布式服务的单测解决方案,解除单测执行对外部服务、数据库、中间件的依赖。在首次执行单测时进行数据自动采集,后续再次执行单测加载第一次采集到数据作为基础场景数据,实现单测的:write once, run anytime。 业务。对于端应用的业务易变性设计了一套应对方案,采用业务域横向解耦、纵向分层的方式有效解决了系统中逻辑复杂、模型臃肿问题。已具备的扩展性应该能支撑未来一两年,甚至更久的业务发展。目前在系统中的落地效果还不错。 学习 smart

一文教你如何用Redis构建高性能锁

我的未来我决定 提交于 2020-02-26 23:32:33
前言 在这里粗略的说一下,zk锁性能比redis低的原因:zk中的角色分为leader,flower,每次写请求只能请求leader,leader会把写请求广播到所有flower,如果flower都成功才会提交给leader,其实这里相当于一个2PC的过程。在加锁的时候是一个写请求,当写请求很多时,zk会有很大的压力,最后导致服务器响应很慢。 正题: 什么情况下需要加锁? 当多个线程、用户同时竞争同一个资源时,需要加锁。比如,下订单减库存,抢票,选课,抢红包等。如果在此处没有锁的控制,会导致很严重的问题,下订单减库存的时候不加锁,会导致商品超卖;抢票的时候不加锁,会导致两个人抢到同一个位置;选课的时候没有锁的控制,导致选课成功的人数大于教室的座位数;抢红包时没有锁的控制,抢到红包的金额大于红包的实际金额。 什么是分布式锁? 学过JAVA多线程的朋友都知道,为了防止多个线程同时执行同一段代码,可以用synchronized关键字或JAVA API中ReentrantLock类来控制。 但是目前几乎任何一个系统都往往部署多台机器的,单机部署的应用很少,synchronized和ReentrantLock发挥不出任何作用,此时就需要一把全局的锁,来代替JAVA中的synchronized和ReentrantLock。 当Thread1线程获取到锁,执行锁中的代码

深入浅出,教你如何玩转微服务

南笙酒味 提交于 2020-02-26 16:35:01
欲速则不达,欲达则欲速! 一、前言 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署。本博客尝试介绍微服务架构的一些实施细节和要求,探询微服务架构的由来,并最终提供我们团队内部的有一些实践总结,希望对大家有帮助。 二、什么是微服务 传统的web开发方式,通过对比比较容易理解什么是Microservice Architecture。和Microservice相对应的,这种方式一般被称为Monolithic(比较难传神的翻译)。所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。 用《The art of scalability》一书里提到的scale cube比较容易理解如何拆分。 我们叫分库分表,为人总结成了scale cube,这就是抽象的能力,把复杂的东西用最简单的概念解释和总结。X轴代表运行多个负载均衡器之后运行的实例,Y轴代表应用进一步分解为微服务(分库),数据量大时,还可以用Z轴将服务按数据分区分表。 Monolithic比较适合小项目,优点是: 开发简单直接,集中式管理 基本不会重复开发 功能都在本地,没有分布式的管理开销和调用开销 它的缺点也非常明显