ZooKeeper

程序员都该懂的 CAP 定理

99封情书 提交于 2020-08-17 07:51:39
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 面对可能出现的网络延迟,不可预估的请求流量等情况,设计一个分布式系统,我们通常围绕系统高可用,数据一致性的目标去规划和实现,想要完全实现这个目标,却并非易事。由此,分布式系统领域诞生了一个基本定理,即 CAP 定理,用于指导分布式系统的设计,从系统高可用,数据一致性,网络容错三个角度将分布式系统的特性抽成一个分区容错一致性模型。这样一来,让系统设计者只需根据业务场景特点,进行权衡设计适合业务场景的分区容错一致性模型即可,很大程度简化了分布式系统设计的难度。 也因此,CAP 定理是架构师所必须要掌握的内容,它影响着架构师对分布式系统的技术选型,技术决策。既然如此重要,接下来,我们就一起学习下 CAP 定理吧。 什么是 CAP CAP 定理最初是由加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想,也因此被叫做布鲁尔定理。后来在 2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了 CAP 定理的证明,让它成为分布式系统领域公认的一个定理。 CAP 定理指出了,在一个跨区域网络连接,共享数据的分布式系统中,一致性(Consistency),可用性

分布式锁实现

蹲街弑〆低调 提交于 2020-08-17 07:22:27
基于数据库实现分布式锁: 基于数据库表: 要实现分布式锁,最简单的方法可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。 当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。 问题: 这把锁强依赖数据库的可用性,数据库是一个单点,一旦数据库挂掉,会导致业务系统不可用。 这把锁没有失效时间,一旦解锁操作失败,就会导致锁记录一直在数据库中,其他线程无法再获得锁。 这把锁只能是非阻塞的,因为数据的insert操作,一旦插入失败就会报错。没有获得锁的线程并不会进入排队队列,要想再次获得锁就要再次触发获得锁操作。 这把锁是非重入的,同一个线程在没有获得锁之前无法再次获得该锁。因为数据库中数据已经存在了。 解决: 数据库是单点:两个数据库,数据之间双向同步,一旦挂掉快速切换到备库。 没有失效时间:定时任务,每隔一定时间清理数据库中的超时数据。 非阻塞的:while循环,直到insert成功在返回。 非重入的:在数据库表中加个字段,记录当前获得锁的主机信息和线程信息,下次在获取锁时先查询数据库,如果当前机器的主机信息和线程信息在数据库中可以查到的话,直接把锁分配给它就可以。 基于数据库排他锁: 可以借助数据中自带的锁来实现分布式锁。 通过数据库的排他锁,基于InnoDB引擎。 总结: 使用数据库来实现分布式锁,这两种方式都是依赖数据库的一张表

Kafka系统列-1、Kafka的安装(单机&集群)

扶醉桌前 提交于 2020-08-17 05:56:40
一、软件下载和准备 1、Zookeeper & Kafka下载 Zookeeper 下载地址: http://www.apache.org/dyn/closer.cgi/zookeeper/ 或 http://distfiles.macports.org/zookeeper/zookeeper-3.4.6.tar.gz Kafka下载地址: http://kafka.apache.org/downloads 或 https://www.apache.org/dyn/closer.cgi?path=/kafka/2.5.0/kafka_2.12-2.5.0.tgz 二、安装软件 1、Zookeeper的单机&集群安装 $ tar -zxvf zookeeper-3.4.6.tar.gz # 设置环境变量 $ vim /root/.bash_profile export ZOOKEEPER_HOME=/data/app/zookeeper-3.4.6 PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin $ source /root/.bash_profile # 配置Zookeeper $ cd /data/app/zookeeper-3.4.6/conf $ mv zoo_sample.cfg zoo.cfg # 集群规划,Zookeeper

Kafka 核心概念和操作示例

混江龙づ霸主 提交于 2020-08-17 03:46:30
前面写了篇《聊一聊高并发高可用那些事(一):Kafka 篇》算是二稿吧,本篇是第三稿收尾了。 在本场 Chat 中, 会讲到如下内容: 为什么需要消息队列 高吞吐、高可用 MQ 对比分析 Kafka 相关概念 分区, 副本, 消费组 偏移量的最大值, 消息的存储策略 Zookeeper 上存的 Kafka 数据 如何确保消息只被一个服务消费 重复消费和数据丢失问题 Linux Kafka 操作 Windows 可视化工具 Kafka Tool 生产者和消费者使用代码 阅读全文: http://gitbook.cn/gitchat/activity/5f0672fabdff462974330494 来源: oschina 链接: https://my.oschina.net/u/3778989/blog/4464230

Mycatweb的介绍与搭建

萝らか妹 提交于 2020-08-16 22:35:42
Mycatweb是什么 Mycat-web是对mycat-server提供监控服务,功能不局限于对mycat-server使用。他基于jmx对所有JVM监控,通过JDBC连接对Mycat、Mysql 监控,基于snmp协议,监控远程服务器(目前仅限于linux系统)的cpu、内存、网络、磁盘。Mycat-web最近改名 Mycat-eye。 Mycatweb安装与配置 Mycat-eye运行过程中需要依赖zookeeper,因此需要先安装zookeeper,我安装的是zookeeper-3.4.14。 先下载zookeeper-3.4.14.tar.gz,然后解压,在conf/ 目录下找到 zoo-sample.cfg,将其复制为 zoo.cfg。我本地的目录为/usr/local/zookeeper-3.4.14,其内容主要如下: tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper clientPort=2181 要记得的是端口号2181,启动 Mycat-eye 的时候会用到。然后启动 zookeeper,启动的入口在 bin/ 目录下,执行以下命令: [root@localhost bin]# ./zkServer.sh start;./zkServer.sh status ZooKeeper JMX

Kafka简介

帅比萌擦擦* 提交于 2020-08-16 19:10:51
Kafka Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。 1.介绍 消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。 1.1 Kafka的特性: 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。 可扩展性:kafka集群支持热扩展 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) 高并发:支持数千个客户端同时读写 1.2 Kafka的使用场景: 日志收集:一个公司可以用Kafka可以收集各种服务的log

首发:全面到难以置信的485页Java面试题整理,1000+真题赶紧收藏

╄→尐↘猪︶ㄣ 提交于 2020-08-16 17:26:47
本文是年更文章,是专门为了金九银十而整理的一套年度级面试题;以后每年都会以这个为基础更新内容。星光不问赶路人,时光不负有心人; 愿每位程序员朋友都能找到心仪的工作。 这份面试题内容涵盖: Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈。 收藏这份面试题,为你赢得更多机会。 篇幅有限,我会尽可能列出所有面试题,答案文末获取。 MyBatis 什么是MyBatis? MyBatis的优点 MyBatis框架的缺点 MyBatis框架适用场合 MyBatis与Hibernate有哪些不同? #{}和${}的区别是什么? 当实体类中的属性名和表中的字段名不一样,怎么办? 模糊查询like语句该怎么写? 通常一个Xml映射文件,都会写-个Dao接口与之对应,请问,这个Dao接口的工作原理是什么? MyBatis是如何进行分页的?分页插件的原理是什么? MyBatis:是如何将sq|执行结果封装为目标对象并返回的?都有哪些映射形式? 如何执行批量插入? 如何获取自动生成的(主)键值? 在mapper中如何传递多个参数? MyBatis动态SQL有什么用?执行原理?有哪些动态SQL? Xml映射文件中

分布式 | dble 中分布式时间戳方式的全局序列

微笑、不失礼 提交于 2020-08-16 16:46:27
作者:吴金玲 爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offset-step 方式全局序列。本文将会从测试的角度简单讲述一下分布式时间戳方式的全局序列的环境搭建及使用。 一、分布式时间戳方式的全局序列简介 此种方式提供一个基于 Zookeeper(以下简称 ZK)的分布式 ID 生成器,可以生成全局唯一的 63 位(首位恒为 0,保证全局序列为正数)二进制 ID。 正数的 63 位模式如下: 其中: a - e 为从高位到低位; a 为线程 id 的低 9 位值; b 为 5 位实例 id 值; 此值为配置文件 sequence_distributed_conf.properties 中的 INSTANCEID 值或者从 zookeeper 服务器获取的值; c 为 4 位数据中心 id 值; 即配置文件 sequence_distributed_conf.properties 中的 CLUSTERID 的值; d 为 6 位自增长值; e

2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家

我与影子孤独终老i 提交于 2020-08-16 11:27:09
包含的模块 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 一. Java 基础模块 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2.== 和 equals 的区别是什么? == 解读: 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; 代码示例

不用找了,基于 Redis 的分布式锁实战来了!

十年热恋 提交于 2020-08-16 10:22:52
作者:菜蚜 my.oschina.net/wnjustdoit/blog/1606215 前言:在分布式环境中,我们经常使用锁来进行并发控制,锁可分为乐观锁和悲观锁, 基于数据库版本戳的实现是乐观锁,基于redis或zookeeper的实现可认为是悲观锁了。乐观锁和悲观锁最根本的区别在于线程之间是否相互阻塞。 那么,本文主要来讨论基于redis的分布式锁算法问题。 从2.6.12版本开始,redis为SET命令增加了一系列选项(set [key] NX/XX EX/PX [expiration]): EX seconds – 设置键key的过期时间,单位时秒 PX milliseconds – 设置键key的过期时间,单位时毫秒 NX – 只有键key不存在的时候才会设置key的值 XX – 只有键key存在的时候才会设置key的值 原文地址: https://redis.io/commands/set 中文地址: http://redis.cn/commands/set.html 注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。 这里简单提一下,在旧版本的redis中(指2.6.12版本之前),使用redis实现分布式锁一般需要setNX、expire、getSet