ZooKeeper

从构建分布式秒杀系统聊聊分布式锁

走远了吗. 提交于 2020-10-30 19:55:24
前言 最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的。上周末抽时间重读了周志明大湿的 JVM 高效并发部分,每读一遍都有不同的感悟。路漫漫,借此,把前段时间搞着玩的秒杀案例中的分布式锁深入了解一下。 案例介绍 在尝试了解分布式锁之前,大家可以想象一下,什么场景下会使用分布式锁? 单机应用架构中,秒杀案例使用ReentrantLcok或者synchronized来达到秒杀商品互斥的目的。然而在分布式系统中,会存在多台机器并行去实现同一个功能。也就是说,在多进程中,如果还使用以上JDK提供的进程锁,来并发访问数据库资源就可能会出现商品超卖的情况。因此,需要我们来实现自己的分布式锁。 实现一个分布式锁应该具备的特性: 高可用、高性能的获取锁与释放锁 在分布式系统环境下,一个方法或者变量同一时间只能被一个线程操作 具备锁失效机制,网络中断或宕机无法释放锁时,锁必须被删除,防止死锁 具备阻塞锁特性,即没有获取到锁,则继续等待获取锁 具备非阻塞锁特性,即没有获取到锁,则直接返回获取锁失败 具备可重入特性,一个线程中可以多次获取同一把锁,比如一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁 在之前的秒杀案例中,我们曾介绍过关于分布式锁几种实现方式: 基于数据库实现分布式锁 基于 Redis 实现分布式锁 基于

注册中心Nacos集群搭建

老子叫甜甜 提交于 2020-10-30 12:07:41
一提到注册中心,大家往往想到Zookeeper、或者Eureka。今天我们看看阿里的一款配置中心+注册中心的中间件——Nacos。有了它以后,我们的项目中的配置就可以统一从Nacos中获取了,而且Spring Cloud的提供者和消费者还可以使用它做注册发现中心。 在搭建Nacos的时候,为了保证高可用,我们要采用的集群的方式搭建。 首先,我们要在数据库中创建一些Nacos的表,Sql文件可以点击下面的链接下载, Sql文件 然后,我们再下载Nacos的压缩包,连接如下: tar.gz包 将下载好的压缩包分别上传到3个服务器上,在我们这里3台机器分别是192.168.73.141,192.168.73.142,192.168.73.143,然后进行解压, tar -zxvf nacos-server-1.3.2.tar.gz 然后,我们进入到conf目录,修改配置,如下: vim application.properties #*************** Config Module Related Configurations ***************# ### 数据源指定MySQL spring.datasource.platform=mysql ### 数据库的数量: db.num=1 ### 数据库连接 IP 端口 数据库名称需要改成自己的 db.url.0

Apache Kafka:优化部署的 10 种最佳实践

天大地大妈咪最大 提交于 2020-10-30 08:09:13
作者 | Ben Bromhead 译者 | 冬雨 转自 |infoQ Apache Kafka 肯定会像它的同名小说家一样不负众望,因为它能激奋新来者、挑战深度,若能更全面的理解它还会产生丰厚的回报。抛开文学,书归正传。遵循 kafka 最新的最佳实践,一定可以让这个强大的数据流平台的管理变得非常、非常容易,而且还会相当有效。 这里有 10 个具体的技巧,可以帮助您优化 Kafka 部署并更容易管理: 设置日志配置参数以使日志易于管理 了解 kafka 的 (低) 硬件需求 充分利用 Apache ZooKeeper 以正确的方式设置复制和冗余 注意主题配置 使用并行处理 带着安全性思维配置和隔离 Kafka 通过提高限制避免停机 保持低网络延迟 利用有效的监控和警报 让我们详细分析一下这些最佳实践。 1 设置日志配置参数以使日志易于管理 Kafka 为用户提供了大量的日志配置选项,虽然默认设置是合理的,但定制日志行为以满足您的特定需求将确保它们不会成为长期的管理挑战。这包括设置日志保留策略、清理、压缩和压缩活动。 可以使用 Log.segment.bytes、log.segment.ms、log.cleanup.policy (或主题级等价参数) 来控制日志行为。如果在应用场景中您不需要以前的日志,那么您可以使用 Kafka 删除某个文件大小的日志文件,或者通过设置

hadoop2.4.1集群搭建

放肆的年华 提交于 2020-10-30 08:06:34
前期准备: 1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等) /etc/hosts里面要配置的是内网IP地址和主机名的映射关系 4.关闭防火墙 5.ssh免登陆 6.安装JDK,配置环境变量等 集群规划: 主机名 IP 安装的软件 运行的进程 weekend01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend03 192.168.1.203 jdk、hadoop ResourceManager weekend04 192.168.1.204 jdk、hadoop ResourceManager weekend05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain weekend06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager

Java码农的10年的技术生涯和技术成长,值得借鉴,启发篇!

混江龙づ霸主 提交于 2020-10-29 18:05:04
先简单分享自己这10年在技术上曾经感觉到明显迷茫的阶段: 阶段1:只会增删改查: 时间:大学期间(2008年-2009年) 学习的方式:看视频、看书。(学会了使用控件的增删改查,和写SQL语句)。 自我感觉:XX管理系统已不在话下,反正网站弄来弄去也是增删改查,这大概就是无知者无畏。 如何破:(走出社会去就好了)。 阶段2:能快速实现功能,却不会思考: 时间:(2009年-20012年) 学习的方式:看博客、大量的编码(第1年,封闭式开发(1天敲15个小时代码),第二年后:每周六天,每天到夜里3点)。 感觉:大量的编码,做了大量的不同类型的系统,已练就成一个高级代码工:(CodeSmith代码生成器+批量生成增删改查)。 如何破:(让自己静下来)。 阶段3:学会了分享、安全、性能、底层原理 时间:(20012年-2016年) 学习的方式:写博客、看博客、写框架(CYQ.Data V-V4系列、QBlog)。 感觉:为某个框架代码而自我得意。 如何破:不断重复的将自己归零(把自己的认为得意的东西开源出去,如果要保留一点感觉,可阶段性开源)。 阶段4:领悟了抽象思维、面向对象、写框架、用户体验 时间:(2016年-至今) 学习的方式:看书、写框架(CYQ.Data V5系列、ASP.NET Aries系列、Taurus.MVC系列)。 感觉:也许我懂的很多,但是我不懂的更多。 如何破:

一名北漂三年的Java程序员的面试经历和题库总结

六眼飞鱼酱① 提交于 2020-10-29 16:57:26
最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦。所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考。其中会包含一些面试的小经验,如果您是面霸,希望能给予指导。自己不是大牛,如果您是大牛,也可以忽略之。我面试的岗位是Java后端开发工程师。 一、简历 简历里面需要包含的内容应该是学历,自己的技术栈,然后自己做过的一些项目。简历不需要太长,两页纸即可。里面应该重点写你使用过的一些框架,自己做的一些项目,以及自己的收获,简练第一。一般面试官不会有很多的耐心,看你的项目详细描述,所以尽量简洁明了即可。 二、简历投递 投递的方式有几种吧,相信大家也都知道。一般在程序员的垂直招聘网站投递即可,比如脉脉、BOSS直聘、拉勾等等。智联招聘啥的,不太适合咱们程序员,你懂的。另外,由于自己不是大牛,所以如果有猎头勾搭的话,我尽量不会理会,因为有过血的教训。所以尽量还是自己投简历比较靠谱,或者是内推。 三、面试 由于我是跨城市,所以我接到的面试一般都是电话面试+视频面试,如果聊得差不多了,也有现场面试,不会拘泥于形式。 一般来说,面试流程都差不太多。首先自我介绍,重点介绍一下自己的一些工作经历,以及自己主要负责的一些内容。这块可以提前准备一下,不过也不需要特地准备,别搞得像背书似的,反而觉得不真实。 3.1 技术面试 一般公司都会有两到三轮的技术面试,大厂的技术面试轮次还可能更多

彻底删除Kafka中的topic

人盡茶涼 提交于 2020-10-29 06:35:50
彻底删除Kafka中的topic 1 、删除kafka存储目录(server.properties文件log.dirs配置,默认为 " /tmp/kafka-logs " )相关topic目录 2 、Kafka 删除topic的命令是: . /bin/kafka-topics --delete --zookeeper 【zookeeper server】 -- topic 【topic name】 如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable = true ,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion 你可以通过命令:. /bin/kafka-topics --zookeeper 【zookeeper server】 -- list 来查看所有topic 此时你若想真正删除它,可以如下操作: ( 1 )登录zookeeper客户端:命令:./bin/zookeeper- client ( 2 )找到topic所在的目录:ls /brokers/ topics ( 3 )找到要删除的topic,执行命令:rmr /brokers/topics/ 【topic name】即可,此时topic被彻底删除。 另外被标记为marked for

zookeeper

馋奶兔 提交于 2020-10-29 01:23:08
一、What 一个 主从架构 的分布式框架 给分布式框架提供协调服务(service) 作用 提供简版文件系统来存储数据 维护和 监控 存储的数据 状态变化 ,通过监控数据状态变化达到基于数据的集群管理 主要用来解决分布式集群中应用系统的 一致性 问题 应用场景 1. 主备切换 2. 节点的上下线感知 3. 统一命名服务 4. 状态同步服务 5. 集群管理 6. 分布式应用配置管理 二、基本概念 ZooKeeper=简版文件系统(Znode)+原语+通知机制(Watcher) ZK文件系统 基于类似于文件系统的 目录节点树 方式的数据存储 原语 提供类linux指令进行操作 Watcher(监听器) 数据节点ZNode 数据节点本质就是目录 持久节点 临时节点 非有序节点 create create -e 有序节点 create -s create -s -e 持久节点(无序) 节点创建以后,即便连接断开,除非主动删除,不然会一直存在 持久节点(有序) 创建节点的时候加上 -s ,会默认的在目录后加上数字 防止同一目录创建同名ZNode导致失败 临时节点(无序) 节点创建以后,一旦连接断开会自动删除 创建节点的时候通过 -t 指定 持久节点(有序) 同上 会话 与zk交互时会建立TCP长连接,称为会话 建立会话后,如果超过SessionTimeout时间,两者间没有通信,会话超时

来自大佬的洗礼!全网独家Java顶配级核心手册,太全了

限于喜欢 提交于 2020-10-28 13:55:41
不知道大家是不是都有过这样一种感受,到快要面试了,却不知道要怎么去复习,怎么尽快找准自己的不足。今天,我是作为一位已经找到适合自己工作的程序员来分享自己面试如何准备的,然后也特意给大家整理了一份Java核心手册(Java核心笔记+Java面试突击笔记) ,由于篇幅有限,为了方便大家观看,小编这里主要以图片的形式给大家展示文章的部分内容,也希望这份知识点体系笔记能得到大家的喜欢! Java核心笔记 这份Java核心笔记不论是从整个Java知识体系,还是从面试的角度来看,都是一份含技术量很高的资料! 内容概要:包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈! 目录总述: JVM JAVA集合 JAVA多线程并发 JAVA基础 Spring原理 它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 微服务 Netty 与 RPC Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP

追源码的平凡之路

时光总嘲笑我的痴心妄想 提交于 2020-10-28 13:55:20
在斯坦福大学, 乔布斯做了一场我认为他最精彩的演讲之一 (另一场可能是iphone的问世发布会)。他讲了第一个故事 "connecting the dots" 你不可能充满预见地将生命的点滴串联起来;只有在你回头看的时候,你才发现这些点点滴滴之间的联系。所以,你要坚信,你现在所经历的将在你未来的生命中串联起来。你不得不相信某些东西,你的直觉、命运、生活、因缘际会……正是这种信仰让我不会失去希望,它让我的人生变得与众不同。 什么是连接生命中的点滴呢?我的理解:当一个人的能力还在上升期, 格局和视野还不够广阔的时候,他需要专注当前的事情,并且把每件事情做到他当时的能力所能做到的极限,也许当时没有那么大的成就感,但"蓦然回首,那人却在灯火阑珊处"。 十年前刚进入IT这个行业的时候,我是一个很普通的工程师,脑袋也不灵光,工作老是得不到要领,我的同学智商很高,他看一次代码基本就会写了,我得花很长时间去消化吸收,我对自己能不能在这一行生存下去都产生了质疑。 没有办法,只能勤能补拙,笨鸟先飞, 当遇到问题的时候, 我都抱着死咬不放的心态去寻找最佳解决方案, 洗澡的时候,睡觉的时候,吃饭的时候,甚至上厕所的时候都会去思考。很自然的,"追"源码也成为我程序生命中的一部分。 阅读过很多源码,和大家分享几个对我的职业影响比较大的追源码的经历。 正文 1 Druid 连接池 这是在2013年