自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

树和叶的博客

工作和学习的记录

  • 博客(26)
  • 收藏
  • 关注

原创 Kafka 总结

简介:Kafka是一个分布式系统:它以集群的方式运行,可以灵活伸缩(分区),在内部通过 复制数据提升容错能力和高可用性 ,高可用(主从集群),高吞吐(分区分段+索引,顺序读写,0拷贝,批量写),分布式消息持久化(文件系统),集群部署的消息中间件。0.9版本之前offset 存储在zk,0.9版本之后offset存储在本地注册中心zookeeper集群1.注册中心,producer,broker,consumer 注册 和 心跳 ,2.topic 和 partition...

2021-05-25 01:48:46 151

原创 RocketMQ 总结

MQ 对比1.功能RcoketMQ :java开发 ,消费失败支持重试,支持消息查询,RocketMQ支持定时消息RabbitMQ:Erlang开发,消费失败支持重试Kafka: scala开发,功能单一,消费失败不支持重试,不支持消息查询,Kafka不支持定时消息2.架构RcoketMQ : NameServer集群 + broker集群 主从 + topic 的 queue 均匀分布在 broker上 分布式存储RabbitMQ: 主从架构,集群(镜像...

2021-05-25 00:54:21 108

原创 JVM 总结

我们写的Java代码到底是如何运行起来的1.java代码 编译 .class 字节码2.类加载器 加载 .class文件到JVM中3.JVM就会基于自己的字节码执行引擎 执行.class 字节码JVM 类加载机制一个类从加载到使用,一般会经历下面的这个过程:加载(类加载器加载进来)-> 验证 (校验他必须完全符合JVM规范)-> 准备 (分配内存空间,来一个默认的初始值) 实例变量 静态变量 代码块-> 解析 (是把符号引用替换为直接引用的...

2021-05-24 00:51:45 173

原创 网络协议

OSI七层网络模型为啥需要协议?没有协议,各个电脑厂商,比如IBM、苹果啥的,都弄自己的协议,结果就苹果电脑和苹果电脑自己可以通信,和IBM电脑就不可以通信,这不是尴尬么。所以搞一个国际通行的协议,大家都按照这个来,所有电脑都可以通信OSI七层模型,是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。TCP/IP四层模型,数据链路层、网络层、传输层、应用层。1)物理层(网线,光缆,电脑连接起来并且传输电信号)2)数据链路层 (数据格式定义和解析)定义电信号的格式和含..

2021-05-22 23:06:07 72

原创 JDK 集合 和 并发

ArrayList源码剖析原理就是底层基于数组来实现,默认初始大小是10个元素缺点:扩容:数组的长度是固定的,会发生一个数组的扩容,就会搞一个更大的数组,把以前的数组拷贝到新的数组里面去元素往中间插入:数组来实现,数组你要是往数组的中间加一个元素,是不是要把数组中那个新增元素后面的元素全部往后面挪动一位优点:1.基于数组来实现,非常适合随机读,性能很高,直接可以通过内存地址来定位某个元素。(6)源码分析的总结如何进行扩容: 1.5倍 + 旧的数组拷贝到新的数组中老..

2021-05-22 22:20:19 59

原创 分布式事务方案 总结

事务的ACID这个先说一下ACID,必须得知道:(1)Atomic:原子性,就是一堆SQL,要么一起成功,要么都别执行,不允许某个SQL成功了,某个SQL失败了,这就是扯淡,不是原子性。(2)Consistency:一致性,这个是针对数据一致性来说的,就是一组SQL执行之前,数据必须是准确的,执行之后,数据也必须是准确的。别搞了半天,执行完了SQL,结果SQL对应的数据修改没给你执行,那不是坑爹么。(3)Isolation:隔离性,这个就是说多个事务在跑的时候不能互相干扰,别事务A操作.

2021-05-21 23:12:27 66

原创 分布式锁 方案 和源码总结

Redis 锁1.最普通的锁(单机) set nx 互斥锁 设置过期时间,释放锁 直接删除key 即可,可以使用lua脚本实现set nx中的随机值的作用: 用来判断 删除锁时 当前的锁是不是 我获取的那个锁问题:Redis 宕机了 锁就没了2.RedLock这个场景是假设有一个redis cluster,有5个redis master实例。然后执行如下步骤获取一把锁:1)获取当前时间戳,单位是毫秒2)跟上面类似,轮流尝试在每个master节点上创建锁,过期时间较短,一般就几十毫

2021-05-20 14:57:08 78

原创 库存 高并发

1.分布式锁2.分布式锁 + 分段锁 + 合并扣减3.kv nosql 原子性操作,扣减结果是负的就代表库存卖光

2021-05-19 11:33:26 149

原创 网关 总结

网关功能(1)动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到网关里去;服务增减机器,网关自动热感知(2)灰度发布:基于现成的开源插件来做(3)授权认证(4)限流熔断(5)性能监控:每个API接口的耗时、成功率、QPS(6)系统日志(7)数据缓存技术选型Kong、Zuul、getway、Nginx+Lua(OpenResty)、自研网关Kong:Nginx里面的一个基于lua写的模块,实现了网关的功能Zuul:Spring Cloud来玩...

2021-05-18 20:23:57 321

原创 高并发设计

可以分为以下 6 点:系统拆分 缓存 MQ 分库分表 读写分离 ElasticSearch系统拆分将一个系统拆分为多个子系统,用 dubbo 来搞。然后每个系统连一个数据库,这样本来就一个库,现在多个数据库,不也可以扛高并发么。缓存缓存,必须得用缓存。大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。毕竟人家 redis 轻轻松松单机几万的并发。所以你可以考虑考虑你的项目里,那些承载主要请求的读场景,怎么用缓存来抗高并发。

2021-05-18 15:26:20 84

原创 Redis 总结

Redis 最普通的分布式锁第一个最普通的实现方式,就是在 Redis 里使用SET key value [EX seconds] [PX milliseconds] NX创建一个 key,这样就算加锁。其中:NX:表示只有key不存在的时候才会设置成功,如果此时 redis 中存在这个key,那么设置失败,返回nil。 EX seconds:设置key的过期时间,精确到秒级。意思是seconds秒后锁自动释放,别人创建的时候如果发现已经有了就不能加锁了。 PX ...

2021-05-18 15:25:16 82 1

原创 Dubbo 总结

dubbo 工作原理第一层:service 层,接口层,给服务提供者和消费者来实现的 第二层:config 层,配置层,主要是对 dubbo 进行各种配置的 第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信 第四层:registry 层,服务注册层,负责服务的注册与发现 第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务 第六层:monitor 层,监控层,对

2021-05-17 20:22:32 102

原创 ES 性能优化

性能优化缓存es 的搜索引擎严重依赖于底层的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的idx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。数据预热es 集群中每个机器写入的数据量还是超过了filesystem cache一倍,比如说你写入一台机器 60G 数据,结果filesystem cache就 30G,还是有 30G 数据留在了磁盘上。其实可以做数据...

2021-05-17 10:50:44 159

原创 Zuul 总结

简介Zuul 微服务网关是为Spring Cloud Netflix提供动态路由,监控,弹性,安全等服务的框架。可以和Eureka、Ribbon、Hystrix等组件配合使用。作用  1、 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。  2、审查与监控:在边缘位置追踪有意义的数据和统计结果,从而为我们带来精确的生产视图。  3、动态路由:动态地将请求路由到不同的后端集群;  4、统一异常处理  5、统一限流、降级,为每一种负载类型分配对应容量,并弃用超

2021-05-15 12:34:08 106

原创 Hystrix 总结

简介在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制.Hystrix通过将依赖服务进行资源隔离,进而组织某个依赖服务出现故障的时候,这种故障在整个系统所有的依赖服务调用中进行蔓延,同时Hystrix还提供故障时的fallback降级机制总而言之,Hystrix通过这些方法帮助我们提升分布式系统的可用性和稳定性作用

2021-05-15 11:55:09 105

原创 Feign 总结

feign 解析生成feign代理对象 原理流程(调用错误):feign调用流程原理:

2021-05-15 01:02:37 191

原创 Ribbon 总结

简介Ribbon 是netflix 公司开源的基于客户端的负载均衡组件,是Spring Cloud大家庭中非常重要的一个模块。原理正常Ribbon在Spring Cloud中是和Feign 一起配合使用的,Ribbon负责负载均衡,Feign在执行具体的请求,Feign的底层会通过Ribbon来实现负载均衡。看底层源码的时候是直接用了Ribbon的一个注解来注解RestTemplate,这个注解@LoadBalanced,以这个注解为切入点看下他的底层原理1.扫描注释的对象,从配置类入.

2021-05-14 23:58:08 260

原创 Eureka 总结

1.简介Euraka是Spring Cloud Netflix中一个组件,用于服务注册和发现。2.作用每个服务实例都是一个Eureka Client,Eureka Client 会向Eureka Server 注册,Eureka Server 本地会有一个注册表来保存服务实例的集合,Eureka client 会定时的从Eureka Server 拉取注册表,这样服务提供方和消费方 就可以 基于 Eureka Server 的 注册与发现来进行通信。为什么要用eureka多个服务间...

2021-05-14 03:39:49 174

原创 Mysql 总结

简介mysql是一个高性能的、多线程、关系型数据库。InnoDB存储引擎

2021-05-13 01:17:02 113

原创 ES 总结

简介es的数据结构和传统数据库的数据结构es的文档型数据结构(json) 能够直观的 表达 基于面向对象的 数据(多层嵌套的数据关系)传统数据库 只能分表分对象,查询时 需要关联。es 分布式,高可用,大数据量,少更新,近实时的查询,聚合,分析的文档数据 存储系统分布式:集群部署,数据分散存储,提高查询性能和存储能力高可用:数据存储在不同node和不同shard中保证数据安全部丢失,并且primary shard会有对应的 replica,保证查询数据完整不缺失,replica 也支

2021-05-12 18:01:47 167

原创 重构观后总结

什么是重构?本质上说,重构就是在代码写好之后改进它的设计。当你了解重构后你也就知道了什么样的代码是“优雅”的代码,也是“反方向”的了解了各种设计模式。重构的第一步:为即将修改的代码建立一组可靠的测试环境。因为良好的测试机制是你重构代码后必要的安全保障。重构的小知识点:拆解长的离谱的方法,代码块越小,代码的功能就越容易管理,代码的处理和移动也就越轻松。重构的方法,首先找出函数中的局部变量和参数:1....

2018-05-10 23:42:39 198 1

原创 ZooKeeper之分布式锁

分布式锁为我们保证了在分布式环境中数据的一致性。 ZooKeeper的分布式锁有两种:1.独占锁 2.读写锁。 1.独占锁的原理 独占锁也叫排他锁,顾名思义的就是锁只能被一个客户端拥有。 当客户端a1访问z1资源时,会在z1节点下创建锁lock节点,这个时候有其他客户端来访问z1资源时发现z1已经加锁,则无法访问到z1资源,于是其他客户端就会...

2018-04-07 16:42:36 252 1

原创 ZooKeeper之集群管理

首先去下载ZooKeeper,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 我这边下载的是zookeeper-3.4.5版本。解压出来 1.如图新建三个配置文件。zoo1.cfg: 以此类推其他配置文件的配置。 2.分别新建三个启动文件如下图:对应相应的配置文件,在s...

2018-04-06 21:32:34 283 1

原创 ZooKeeper之配置管理

在以往的分布式应用程序中,或多或少都会有要修改或新增一些配置的时候,但程序部署在多台机器上,逐个修改配置就变个格外的困难,一般有一个方法,就是把配置信息从在配置文件中改成 保存在数据库里,这样配置文件的修改只要通过修改数据库的信息就可以修改配置信息,然后每个程序通过数据库获取配置信息,但是这样的做法缺点也是显而易见的,程序不知道配置信息什么时候进行了修改,这样会造成不能及时获取配置信息,并...

2018-04-06 16:18:36 295

原创 ZooKeeper之命名服务

命名服务就是指通过指定的名字来获取资源或者服务的地址。Zookeeper会在自己的文件系统上(树结构的文件系统)创建一个以路径为名称的节点,它可以指向提供的服务的地址,远程对象等。简单来说使用Zookeeper做命名服务就是用路径作为名字,路径上的数据就是其名字指向的实体。阿里巴巴集团开源的分布式服务框架Dubbo中使用ZooKeeper来作为其命名服务,维护全局的服务地址列表。在Dubb...

2018-04-06 15:46:53 2357

原创 ZooKeeper简介

ZooKeeper是一个分布式的,开源的分布式程序协调服务,是hadoop和HBase的重要组件。通俗的讲就是ZooKeeper是开源的,并且专门给分布式程序提供服务的一个框架。设计目的1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器...

2018-04-06 15:03:13 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除