ZooKeeper

写代码有这16个好习惯,可以减少80%非业务的bug

梦想与她 提交于 2020-12-16 13:53:50
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨捡田螺的小男孩 来源丨捡田螺的小男孩 前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ https://github.com/whx123/JavaHome ❞ 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的

ActiveMQ笔记:一个高稳定,可扩展的的部署方案

匆匆过客 提交于 2020-12-15 08:55:27
本文介绍一个笔者在实际工作中的实施的基于ActiveMQ的一个高稳定,可扩展的异步消息系统。 ActiveMQ是一个成熟的基于Java语言的开源消息系统,在实际应用中被大量使用。ActiveMQ在系统稳定性,系统的容错和扩展等方面都有很多成熟的方案,也有很多开源的管理工具,是部署异步消息系统的一个很好的选择。 ActiveMQ工作机制 ActiveMQ有两种消息使用方式: l Queue模式:Producer发出到Queue里的消息,只能由一个Consumer来使用。 l Topic模式:Producer发送到Topic里的消息,会传送到Subscribe这个Topic的每一个Consumer。 Producer发出的消息有两种Delivery模式。 l Persistent:Broker需要保存消息,然后把消息发送到Consumer。如果Broker崩溃后,重新启动后保存的消息可以重新发送给Consumer。 l NonPersistent:Broker不需要保存消息,直接把消息发送到Consumer。 ActiveMQ可以通过Networks of Brokers方式将多个Broker组成一个Cluster。Producer和Consumer可以任意的连接到该Cluster中的任意一个Broker。Producer发送的消息可以通过Cluser传送到需要的Consumer。

高并发下接口幂等性解决方案

心不动则不痛 提交于 2020-12-14 08:28:45
阅读文本大概需要3分钟。 0x01、幂等性概念 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 一句话: 幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。 0x02、幂等性场景 1、查询操作 查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作; 2、删除操作 删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) ; 3、唯一索引 防止新增脏数据。比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录。要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可); 4、token机制:防止页面重复提交 原理上通过session

阿里云单服务器kafka伪集群搭建

主宰稳场 提交于 2020-12-13 10:16:24
下载并解压kafka (前提是安装并配置好jdk环境变量,原因是kafka依赖于zookeeper,而zookeeper使用java编写,kafka使用scala编写都需要JVM运行环境) kafka下载地址:http://kafka.apache.org/downloads zookeeper下载地址:https://zookeeper.apache.org/releases.html 注:自己是存放在/usr/local目录下 使用自带的简版zookeeper搭建zookeeper集群 (也可使用自己下载的zookeeper搭建zookeeper及集群) 注:读者可以把 kafka文件夹复制多份来分别修改zookeeper.properties并运行各自的zookeeper 或者 仅把kafka文件夹中的zookeeper.properties复制多份使用 同一个zookeeper-server-start.sh+不同的配置文件 来启动多个zookeeper 在这里为了方便使用第二种方式 1. 修改zookeeper.properties文件 clientPort=2181 dataDir=/usr/local/kafka_2.13-2.6.0/zk/data/zkdata-1 dataLogDir=/usr/local/kafka_2.13-2.6.0/zk/log

详细解析kafka之kafka分区和副本

旧巷老猫 提交于 2020-12-12 20:45:22
本篇主要介绍kafka的分区和副本,因为这两者是有些关联的,所以就放在一起来讲了,后面顺便会给出一些对应的配置以及具体的实现代码,以供参考~ 1.kafka分区机制 分区机制是kafka实现高吞吐的秘密武器,但这个武器用得不好的话也容易出问题,今天主要就来介绍分区的机制以及相关的部分配置。 首先,从数据组织形式来说,kafka有三层形式,kafka有多个主题,每个主题有多个分区,每个分区又有多条消息。 而每个分区可以分布到不同的机器上,这样一来,从服务端来说,分区可以实现高伸缩性,以及负载均衡,动态调节的能力。 当然多分区就意味着每条消息都难以按照顺序存储,那么是不是意味着这样的业务场景kafka就无能为力呢?不是的, 最简单的做法可以使用单个分区,单个分区,所有消息自然都顺序写入到一个分区中,就跟顺序队列一样了 。而复杂些的,还有其他办法, 那就是使用按消息键,将需要顺序保存的消息存储的单独的分区,其他消息存储其他分区,这个在下面会介绍 。 我们可以通过replication-factor指定创建topic时候所创建的分区数。 bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test 比如这里就是创建了1个分区

架构师都该懂的 CAP 定理

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

分布式系统基本原理

雨燕双飞 提交于 2020-12-12 14:59:19
三元组 其实,分布式系统说白了,就是很多机器组成的集群,靠彼此之间的网络通信,担当的角色可能不同,共同完成同一个事情的系统。如果按”实体“来划分的话,就是如下这几种: 节点 -- 系统中按照协议完成计算工作的一个逻辑实体,可能是执行某些工作的进程或机器 网络 -- 系统的数据传输通道,用来彼此通信。通信是具有方向性的。 存储 -- 系统中持久化数据的数据库或者文件存储。 状态特性 各个节点的状态可以是“无状态”或者“有状态的”. 一般认为,节点是偏计算和通信的模块,一般是无状态的。这类应用一般不会存储自己的中间状态信息,比如Nginx,一般情况下是转发请求而已,不会存储中间信息。另一种“有状态”的,如mysql等数据库,状态和数据全部持久化到磁盘等介质。 “无状态”的节点一般我们认为是可随意重启的,因为重启后只需要立刻工作就好。“有状态”的则不同,需要先读取持久化的数据,才能开始服务。所以,“无状态”的节点一般是可以随意扩展的,“有状态”的节点需要一些控制协议来保证扩展。 分布式系统的三个指标 这三个指标不可能同时做到。这个结论就叫做 CAP 定理 CAP三个特性只能满足其中两个,那么取舍的策略就共有三种: CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限

01-利用Debezium捕获PostgreSQL的数据变化

限于喜欢 提交于 2020-12-11 05:12:55
1 背景 最近团队接到这样一个需求,其他团队开发的业务系统需要监控我们负责的业务系统的数据库变更情况,当表发生INSERT,UPDATE及DELETE操作时,相关的业务系统能实时获取数据的变化信息。 经过讨论,团队决定使用Debezium实现需求,于是便对Debezium进行了较深入的学习。下面给大家分享一下自己对Debezium认识与理解。 2 Debezium的介绍 Debezium针对多种数据库,分别实现了同步数据库的Connector,这些Connector以插件的形式运行在Kafka Connect集群上。 Debezium并不是一个平台,它是对Kafka Connect的Connector和Task的一种实现。Debezium现在已支持以下数据库: MongoDB MySQL PostgreSQL SQL Server Oracle (Incubating) Db2 (Incubating) Cassandra (Incubating) 其中,Oracle、Db2和Cassandra的Connector还在研发中。 Kafka Connect的介绍及Debezium的原理将在后面的章节说明,下面我们先尝试通过Debezium官方提供的Docker Image搭建测试环境,体现一下Debezium捕获PostgreSQL数据库变化情况的效果。 3

7家公司拿了5个offer,无非就是问源码、分布式微服务这些,也太简单了吧

十年热恋 提交于 2020-12-11 04:36:34
JVM相关面试题 1.Java中你怎样唤醒一个阻塞的线程? 2.在 Java中CycliBarriar和CountdownLatch有什么区别? 3.为什么我们调用start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法? 4.垃圾回收与算法、如何确定垃圾、标记清除算法、复制算法、标记整理算法、分代收集算法 5.GC分代收集算法VS分区收集算法、分代收集算法、分区收集算法 6.程序计数器(线程私有)、虚拟机栈(线程私有) 7.JVM类加载机制、验证、加载、准备、直接引用、类构造器、符号引用...... 8.描述一下JVM 加载class文件的原理机制 9.堆(Heap-线程共享) -运行时数据区 10.JVM运行时内存、新生代、老年代、永久代 11.描述一下JVM加载class文件的原理机制? 12.Java对象创建过程、简述Java的对象结构、 13.如何判断对象可以被回收? 14.JVM的永久代中会发生垃圾回收么 15.垃圾收集算法、GC最基础的算法有哪几种? Spring相关面试题 1.如何理解Spring Boot 中的 Starters? 2.什么是spring Framework? 3.运行Spring Boot有哪几种方式? 4.如何使用Spring Boot实现异常处理? 5.Spring Boot中的监视器是什么? 6.列举spring

Java工程师【2020升级版】

家住魔仙堡 提交于 2020-12-11 01:43:05
Java工程师【2020升级版】 下载地址: 百度云盘 本课程全新升级,从0基础到高薪就业,不需脱产学习,冲击互联网高薪岗位 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪! 章节目录: 阶段一:Java零基础入门 26门课 /课程总时长:43小时 /练习题:380 /大作业:4 /考试:3 /教辅资料:121 第1周 环境搭建与语法入门 本周是Java入门的第一步,学习Java语法规则,锻炼编程思维。学会环境搭建,掌握Java程序的执行流程,能够使用运算符和选择与循环结构进行编程。 课程安排: 1、Java基本概念介绍 2、Windows和Mac下开发环境搭建 3、数据类型、变量和常量的使用 4、Java中多种运算符的应用 5、选择结构的执行流程与应用 第2周 Java语法之循环、数组与方法 本周将继续学习语法基础,掌握循环结构、数组和方法的语法规则和应用,最后通过案例对所学知识进行综合应用。学完本周内容可以进行简单的程序逻辑开发。 课程安排: 1、基础语法综合案例——数组移位与统计 2、while、do-while和for三种循环结构的使用 3、嵌套循环的应用 4、break和continue语句的特点及应用 5、如何进行程序的调试,debug的使用 6、一维数组和二维数组的应用 7、Java自定义方法和方法调用 8、大作业——学生成绩管理 第3周