分布式系统
文章平均质量分 66
伟娃娃
java软件开发
展开
-
MongoDB创建用户设置密码和基本命令的使用
第一步 连接本机# mongo ‐‐host <HOSTNAME> ‐‐port <PORT>mongo #我的是默认本机,所以不用跟参数第二步 设置密码> use adminswitched to db admin> db.createUser({... user: "allen",... pwd: "111111",... roles: [ "root" ]... })Successfully added user: { "user..原创 2021-06-23 22:08:49 · 508 阅读 · 0 评论 -
MongoDB的安装使用
以JSON为数据模型的文档数据库,一个文档就是一个JSON对象属于应用型数据库,类似Mysql,存储海量数据,但是相对Mysql,Mongo访问su更快。原创 2021-06-23 21:16:04 · 145 阅读 · 1 评论 -
Kafka的ReBalance机制和高水位机制
分区与消费者的分配平衡机制。partition.assignment.strategyrange -round-robinsticky原创 2021-06-20 20:48:09 · 562 阅读 · 2 评论 -
Kafka整合SpringBoot
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-06-20 18:28:01 · 168 阅读 · 0 评论 -
kafka的Leader选举机制
Kafka设计原理详解Kafka核心总控制器Controllerkafka的所有Broker都会注册到kafka集群中去。kafka集群会选举一个Broker作为Leader作为kafka七群的总控制器Controller。他负责管理整个集群所有分区Partition和副本follower的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用kafka-top原创 2021-06-20 18:01:27 · 4799 阅读 · 1 评论 -
kafka的java原生使用实例
第一步,导包 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>com.alibaba<原创 2021-06-07 22:28:13 · 678 阅读 · 1 评论 -
Kafka的集群搭建分区介绍
对于kafka来说,一个单独的broker意味着kafka集群中只有一个节点。要想增加kafka集群中的节点数量,只需要多启动 几个broker实例即可。为了有更好的理解,现在我们在一台机器上同时启动三个broker实例。1. 将kafka的配置文件准备三份[allen@localhost config]$ pwd/home/allen/packages/kafka_2.13-2.8.0/config[allen@localhost config]$ cp server.properties原创 2021-06-06 22:26:14 · 350 阅读 · 2 评论 -
Kafka入门,下载,安装,配置,基本使用
Kafka基本概念kafka是一个分布式的,分区的消息(官方称之为commit log)服务。它提供一个消息系统应该具备的功能,但是确有着独 特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范。Kafka中一些基本概念。安装并配置kafka安装和配置的步骤,可以参考下面的官网http://kafka.apache.org/quickstart下载,解压wget https://mirrors.bfsu.edu.cn/apache/k...原创 2021-06-03 22:07:24 · 178 阅读 · 0 评论 -
Rabbit MQ 通配符(Topic)的java实例
1. 创建通配符模式下的交换机通配符的规则:1. # :代表没有或一个或多个单词(单词与单词之间用“.”分割); 2. * :代表一个零个或一个单词;例如: aa.#.bb.* : 匹配的: aa.HH.CC.bb 、 aa.bb 、aa.bb.cc 不匹配: aa.cc 、 aa.bb.cc.dd2. 消费者1 public class BiaDu { public static void main(String[].原创 2021-05-11 22:35:13 · 251 阅读 · 2 评论 -
Rabbit MQ 定向(Direct)的java实例
1. 参照上一个例子, 创建一个type是direct的交换机2. 创建消费者1, 并在消费者中绑定交换机与queue的关系。public class BiaDu { public static void main(String[] args) throws IOException { Connection connection = RabbitUtils.getConnection(); final Channel channel = connec.原创 2021-05-11 21:36:31 · 230 阅读 · 1 评论 -
Rabbit MQ 广播(fanout)的java实例
RabbitMQ 基础架构如下:前一篇文章,有关于1和2的例子下面介绍3 Publish/SubScribe的例子3与2 的区别是:2 中的么个consumer 收到的msg是互斥的,加起来是一个总和。3中的每个consumer收到的msg是一样的,自己就是一个总和,msg被复制了多份。在介绍3的例子之前,需要了解下交换机:lExchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。.原创 2021-05-11 21:10:35 · 1156 阅读 · 2 评论 -
Rabbit MQ 的使用实例
1. 创建一个User , Allen2. 创建一个Virtual Host3. 为User设置访问Virtual hosts权限4. 使用Allen 这个user创建一个Queue 名字为Allen_Msg_Queue。注意需要退出当前登录然后用Allen这个用户登录进去创建5. 使用procedcer 往这个queue上面发送msgpublic class Producer { public static void main(.原创 2021-05-08 11:33:43 · 1480 阅读 · 1 评论 -
Rabbit MQ安装与使用
Rabbit MQ 的安装第一步 准备好安装包第二步 安装安装顺序分别安装erlang,socat,rabbitmq,如下[root@localhost packages]# rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm Preparing... ################################# [100%]Updating / installing... 1:er原创 2021-05-05 22:03:38 · 597 阅读 · 1 评论 -
Message Queue(消息队列)的基本概念和使用场景
消息队列的概念Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。消息队列本质如下图, 其本质就是用这种中间件的方式来代替远程调用的方式。为什么要使用消息队列?一. 解耦接触系统于系统间的强依赖关系。二. 异步提速使用消息队列在不同系统直接通信,比以前的直接调用的方式更快。三. 消峰填谷使用消息队列后会遇到什么问题?一 引入了外部依赖,一档MQ宕机,会对业务造成严重影响二 增加复杂性,要原创 2021-05-05 20:17:24 · 800 阅读 · 0 评论 -
Zookeeper 的应用场景
Zookeeper 的应用场景:Zookeeper场景一 - 分布式锁非公平锁实现原理,都去执行创建 create -e /exclusive/lock这个节点,是执行成功就谁拿到锁。这个实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接 都在对同一个节点进行监听,当服务器检测到删除事件时,要通知所有的连接,所有的连接同时 收到事件,再次并发竞争,这就是羊群效应。公平锁的实现原理,借助于临时顺序节点,可以避免同时多个节点的并发竞争锁,缓解了服务端压力。1原创 2021-04-27 22:18:55 · 184 阅读 · 0 评论 -
ZK 的 Curator java客户端使用实例
Curator是一套开源的java操作zookeeper客户端框架,由netflix公司推出的。Curator是目前使用最多,对zookeeper版本支持最好的第三方客户端。Curator对很多zookpeeper的服务功能进行了封装,例如如下场景:Leader选举分布式计数器分布式锁会话重新链接Watch反复注册多种异常处理场景下面接受Curator的java 客户端使用实例:Curator 建立与zk的连接, 这里提供了2种风格的写法: public st原创 2021-04-12 23:16:29 · 289 阅读 · 0 评论 -
Zookeeper Java客户端实例以及设置循环监听
Zookeeper Java 客户端实例Zookeeper 的client端和服务端的代码没有分离,所以只用引用一个jar就行。这里版本最好与你服务端安装的zookeeper版本一致,以防一些兼容性问题。<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.5.8</versio原创 2021-04-09 22:15:50 · 334 阅读 · 0 评论 -
搭建Zookeeper集群详细步骤
如何使用zookeeper, 如下图, 可以将配置信息放在/order/config里面, 当有人取更新里面的数据的时候,其他的节点都会收到更新的信息。ZK的客户端工具:[allen@localhost ~]$ cd packages/[allen@localhost packages]$ cd apache-zookeeper-3.5.8-bin/[allen@localhost apache-zookeeper-3.5.8-bin]$ lsbin conf docs lib原创 2021-04-08 20:42:05 · 191 阅读 · 0 评论 -
Redis编程的规范与部分优化建议
为了使reids配置更优,在使用redis的时候需要注意一些规范,首先要注意,redis和任何cache都不适合写操作比较多的场景,只时候读多写少的场景。1. 定义key的时候,加上前缀,防止不同业务的key冲突trade:order:cloth:Tshirt:10011不要再key里面加特殊字符,尽量的让key简洁,不要让key占太多空间user:{uid}:friends:messages:{mid} ==> u:{uid}:fri:msg:{mid}不要大量使用的bigkey原创 2021-04-05 12:03:48 · 123 阅读 · 0 评论 -
企业级架构下Redis存在的一些问题和解决方案
在企业级的互联网项目中,通常使用的是多级的缓存架构,如下的一个架构例子:如上的这个架构存在这一些需要注意的问题, 这些问题也是通常使用缓存架构时都会遇到的问题,下面介绍了一些常见问题和解决方案:缓存穿透缓存存在的目的是为了保护后端, 让大量的访问请求都直接从缓存层返回数据,不用打到存储层的数据库里面去。缓存穿透就是大量的访问没有被缓存层有效的拦截,都直接访问到数据层去了。通常导致缓存穿透的原因有:有人恶意的攻击,使用些不存在的产品代号,进行大量的访问,造成大量空命中。 自身业务逻辑原创 2021-04-05 10:59:35 · 288 阅读 · 1 评论 -
Redis实现分布式锁Redisson
自己来写一套redis 分布式锁的的逻辑,如下需要考虑的的问题很多, 很难把每个细节都考虑到。1. 必须把delete key放到finally里面,因为中间出现exception,这个锁就被永远卡住了2. 必须给一个锁的最大占用时间,万一没有执行到delete key程序挂了,这个锁就被永远卡住了3. 给每个锁一个id,当一段代码执行时间比较长,超过了最大占用时间,锁被释放了。后面一个程序进来到所里面,这时候第一个程序执行完成,走到delete lock。4. 锁续命,用一个守护线程一直来检查当原创 2021-04-02 18:16:42 · 154 阅读 · 0 评论 -
Redis底层设计原理
Redis是C语言实现的Redis的Key和Value都是Sting,C语言中 char data[]="Allen"Redis在C语言中自定义了一个数据结构来存储String,SDSSDS = Simple dynamic string 简单动态字符串特点:1. 二进制安全的数据结构2. 提供了热潮预分配机制,避免了频繁的内存分配3. 兼容C语言的函数库...原创 2021-03-16 22:46:06 · 266 阅读 · 1 评论 -
使用Jmeter模拟1秒发送100个请求
在分布式系统中,使用syncnized是没有用的,无法达到锁的效果,如下例子:1. 安装并配置后一个nginx服务器,nginx的配置文件如下,下面配置的server是我IDEA启动的服务对应的机器的ip,我通过修改yml的端口号,在IDEA中启动了2个服务8080和8081。这里用到了nginx的负载均衡功能。http { include mime.types; default_type application/octet-stream; sendfile原创 2021-03-16 22:45:19 · 5075 阅读 · 0 评论 -
Redis集群扩容与下线步骤
当双手十一来临时,需要临时增加Redis集群的数量来缓解压力在集群中增加Redis节点步骤如下:1. 使用链接集群,并通过cluster nodes来查看当前集群的信息[allen@localhost ~]$ cd packages/redis-5.0.3/[allen@localhost redis-5.0.3]$ src/redis-cli -h 192.168.0.103 -p 8003 -a allenWarning: Using a password with '-a' or '原创 2021-01-25 22:42:17 · 776 阅读 · 0 评论 -
Redis 集群的原理分析
Redis 集群的原理分析Redis将所有数据划分问16384个槽位slots,每个节点负责一部分槽位,槽位的信息存在于每个节点中。当Redis Cluster的客户端来链接集群时,会得到一份集群的槽位信息,这样当客户端需要查找存储每个值时,就直接去链接对应的节点就行了,同时如果槽位信息改变了,存在客户端与服务器不一致情况,需要纠正机制来实现校验和调整。槽位定位算法key的hashcode%16835跳转重定位当客户端向一个,错误的节点发出了指令,节点发现所访问的槽位不归自己所有时,原创 2021-01-24 21:50:08 · 164 阅读 · 0 评论 -
Redis Java客户端-通过原生jedis和SpringBoot操作Redis集群
Redis java客户端操作集群1. 使用Jedis java原生操作redis集群public class RedisCluster { public static void main(String[] args) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(20); jedisPoolConfig.setMa原创 2021-01-21 20:37:24 · 311 阅读 · 1 评论 -
Redis删除并重新创建一个集群
发现自己搭建的集群有问题, 如何删除现有集群并重写搭建:1. 登录每台机器查看启动的redis服务,然后停掉所以的redis服务ps -ef| grep rediskill 12455 124602. 登录每台机器,删除上个集群的相关文件[allen@localhost redis-5.0.3]$ cd 8001[allen@localhost 8001]$ ls8001.log appendonly.aof dump.rdb nodes-8001.conf[allen@l原创 2021-01-20 20:52:23 · 3016 阅读 · 8 评论 -
Redis 集群架构的搭建基于5.03
哨兵架构存在的一些缺陷:1. 瞬断问题,哨兵架构中,当主节点挂断后需要选举,然后切换,中间有几秒到几十秒的服务暂停时间2. 高并发受限问题,哨兵对外只有一个节点提供写服务,一台就几w的QPS。3. 单个节点的内存不能设置过大,也就10G左右,否者导致持久化文件过大,影响数据恢复和主从同步效率。Redis集群架构可以解决上面提到的问题,redis集群是有多个主从节点小群组成的分布式服务器集群特点: 复制,高可用,分片特性,没有中心节点,可水平扩容。官网称可以支持上万个节点(推荐不超过1原创 2021-01-19 22:12:21 · 1046 阅读 · 4 评论 -
Redis哨兵架构的搭建测试实例
主从架构,如果主节点挂了,需要运维人员手动处理,重写配置主节点。哨兵架构可以可以解决这个问题, 当主节点挂了之后,哨兵会自动的选举一个节点当作主节点。sentinel哨兵是图书的redis服务,不提供读写服务,主要用过来监控redis实例节点。哨兵架构下client端第一次从哨兵找出redis主节点,后续就支持访问redis的主节点,不会每次都通过sentinel代理访问reids主节点,当redis主节点发送变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端,redis原创 2021-01-13 22:14:29 · 445 阅读 · 1 评论 -
Redis的批处理命令-管道和Lua脚本
redis 管道,一次性的把多条命令发送到服务器端,节省网络开销管道没有考虑事务和一致性的问题,如果pipeline有10条命令,其中地2-4条没有成功,其他的命令也会提交,只是把结果返回回来。public class RedisPipeLine { public static void main(String[] args) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPo原创 2021-01-11 21:59:35 · 672 阅读 · 0 评论 -
Redis在java中的第一个Helloworld
第一步 - 加入Maven dependency: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency>第二步 - 在java中的使用:JedisPoolCon.原创 2021-01-11 08:46:05 · 150 阅读 · 0 评论 -
Redis的主从架构搭建
一个主节点,一到多个从节点,主节点执行写操作,从节点进行数据备份。也可以让从节点提供写读操作,减轻主节点的压力。Redis主从架构搭建1. 从src/redis.conf重新复制一份配置文件cp redis.conf redis.conf_12. 修改新建的文件redis.conf_1,配置如下信息port 6380 #修改端口号,代表本机另外一台机器pidfile /var/run/redis_6380.pid原创 2021-01-07 20:48:03 · 165 阅读 · 0 评论 -
redis持久化机制-RDB-AOF-混合持久化
RDB方式的持久化将redis内存直接把snapshot保存到文件系统。将整个内存数据存放到dump.rdb file 中。配置如下:[allen@localhost src]$ cd redis-5.0.3[allen@localhost redis-5.0.3]$ vi redis.conf配置解释:在60秒之内有10000条redis写命令900秒内写一次300秒内写10次持久化配置可以配多个策略,只要满足其中一个条件就会触发一次持久化如下save使用,执行sav.原创 2021-01-06 21:00:28 · 1229 阅读 · 0 评论 -
redis安装,启动,5种数据结构的基本使用
一. 安装redis1.打开需要下载redis的目录mkdir packagescd packages/2. 下载redis安装包wget http://download.redis.io/releases/redis-5.0.3.tar.gzls -lrt3. 解压安装包tar xzfv redis-5.0.3.tar.gzcd redis-5.0.3/ls -lrt4. 安装makepwdls -lrt二.启动redis1. 启动redis服务端src/redi..原创 2021-01-02 11:23:52 · 125 阅读 · 0 评论 -
为什么要使用分布式系统?
可解决的问题:1. 解决稳定性可用性问题。2. 解决单机处理能力问题。分布式系统的发展历程:1. 单体结构-- 所有代码在一个系统中, 一个数据库,一个文件系统,一个应用系统。2. 垂直结构 -- 将系统按照业务分成多个系统,每个垂直子系统为一个单体结构,会有很多重复代码。3. 分布式结构 -- 将可复用的业务水平拆分开当做公用服务。4. 微服务架构 -- 将公共的服务集合成一个系统。...原创 2020-05-13 21:10:26 · 5096 阅读 · 0 评论