自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 JVM-垃圾收集器

一、概述什么是垃圾收集器所谓垃圾收集器(GC),个人理解是一种自动化技术,用于内存动态分配与内存回收,能保证系统在有限的资源环境中正常运行。为什么要学习垃圾收集器当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统打到更高并发量的瓶颈时,我们就必须对这些自动化的技术实施必要的监控和调节。收集的对象在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。..

2022-03-20 22:05:16 216

原创 Kafka Controller事件处理流程

通过事件队列采用单线程的方式

2022-02-08 17:51:06 956

原创 Kafka请求处理流程

Kafka请求处理流程

2022-01-25 23:30:51 1537

原创 Kafka客户端实践与原理

一、客户端API生产者(Producer)send(ProducerRecord<K, V> record)发送一条消息到broker,异步发送,无回调函数send(ProducerRecord<K, V> record, Callback callback)发送一条消息到broker,异步发送,有回调函数partitionsFor(String topic)获取topic的分区元数据metrics()获取生产者的指标数据flush()把缓存中的数据强制刷到磁

2021-12-27 12:58:27 1240

原创 RocketMQ原理学习-消息发送

学习重点消息发送方式一、消息发送方式RocketMQ 支持三种消息发送方式:同步(sync)、异步(async)、单向(oneway)。同步:发送者向 MQ 执行发送消息 API 时,同步等待,直到消息服务器返回发送结果。异步:发送者向 MQ 执行发送消息 API 时,指定消息发送成功后的回掉函数,然后调用消息发送 API 后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中执行。单向:消息发送者向 MQ 执行发送消息 API 时,直接返回,不等

2021-11-22 22:33:02 1048

原创 RocketMQ原理学习-路由中心NameServer

学习重点NameServer整体架构设计NameServer动态路由发现与剔除机制一、NameServer架构设计先看一下 RocketMQ 的物理部署图,NameServer 类似于一个注册中心,生产者、消费者、Broker 都需要直接与 NameServer 进行通信。Broker 消息服务器在启动时向所有 NameServer 注册,消息生产者(Producer)在发送消息之前先从 NameServer 获取 Broker 服务器地址列表,然后根据负载算法从列表中选择一台消息服务器进行

2021-11-21 21:23:37 1572

原创 Redis持久化之RDB

上一讲讲到了Redis的一种持久化方式 AOF,接下来看另一种持久化方式RDB。

2021-03-27 18:05:59 233

原创 Redis持久化之AOF

众所周知,Redis的数据是放在内存中的,如果服务器出现宕机,那数据将会全部丢失。如何来避免数据丢失的问题呢,这就需要用到持久化技术了,Redis持久化有AOF和RDB两种方式,接下来看一下AOF是怎么实现的。实现方式AOF的全称是Append Only File,表示文件只能追加写,Redis记日志时,就是用追加写文件的方式记录写命令操作的。先执行命令,把数据写入内存中,再执行写命令操作。AOF日志格式我们以 Redis 收到“set testkey testvalue”命令后记录的日志为例,

2021-03-21 22:04:20 199

原创 nginx+keepalived高可用配置遇到的坑

背景今天在项目上部署了一套nginx+keepalived主备模式的高可用集群,在测试验证的过程中,遇到了一点小坑,弄了半天发现是配置的问题。部署架构两台nginx负载均衡服务器+两台应用服务器高可用原理主备两台负载均衡服务器一主一备,...

2021-03-18 10:58:35 634 2

原创 Redis是单线程还是多线程

1

2021-03-17 20:09:24 255

原创 如何解决缓存常见问题

缓存常见的三个问题:缓存雪崩、缓存击穿、缓存穿透这三个问题一旦发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障。缓存雪崩原因缓存中有大量数据同时过期,导致大量请求无法得到处理,请求直接打到数据库,导致数据库压力激增Redis 缓存实例发生故障宕机了,无法处理请求,请求全部打到数据库解决方案更新策略在时间上做到比较均匀,比如可以在过期时间上加个随机数,避免大量数据同时过期多台机器做主从复制或者多副本,实现高可用热点数据尽量分散到不同的机器上实现熔

2021-03-16 14:03:53 619

原创 数据库与缓存双写一致性问题

缓存是什么通常我们会使用更快的介质(比如内存)作为缓存,来解决较慢介质(比如磁盘)读取数据慢的问题,缓存是用来解决性能问题的一种结构模式,本质就是空间换时间。缓存系统一般设计简单,功能相对单一,所以诸如Redis这种缓存系统的整体吞吐量,能达到关系型数据库的几倍甚至几十倍,因此缓存特别适用于互联网应用的高并发场景。使用缓存需要注意什么从客户端的角度来说,缓存数据的特点一定是有原始数据来源的,且允许丢失。当数据丢失后,我们需要从原始数据重新加载数据,不能认为缓存系统是绝对可靠的,更不能认为缓存系

2021-03-15 22:38:45 196

原创 MySQL数据库事务

事务事务,就是为了保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,支持事务的引擎并不多,常见的就是我们经常用的Innodb引擎。事务的可靠性模型ACIDAtomicity 原子性: 一次事务中的操作要么全部成功, 要么全部失败Consistency 一致性:跨表、跨行、跨事务, 数据库始终保持一致状态Isolation 隔离性:保护事务不会互相干扰, 包含4种隔离级别Durability 持久性:事务提交成功后,不会丢数据。如电源故障, 系统崩溃事

2021-03-14 14:19:33 155

原创 为什么一般单表数据不超过2000万

索引的存储结构MySQL的InnoDB引擎的索引使用B+树的结构,最小存储单元是页,也就是一个节点,InnoDB引擎默认一个页的大小为16k,页可以用于存放数据也可以用于存放键值+指针,在B+树中叶子节点存放数据,非叶子节点存放键值+指针。原因假设B+树的高度是2,那么存放的总记录数=根节点的指针数 * 单个叶子节点记录行数,假设主键是bigint类型,在MySQL中,bigint占8个字节,指针占6个字节,那么一个主键+指针数=14个字节,一个页大小为16k,那么根节点的主键+指针数=16 * 1

2021-03-13 22:06:07 498 1

原创 MySQL数据库索引

提到数据库索引,很多人应该都不陌生,查询SQL慢的时候,一般的做法就是加索引。索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,让我们可以很快的定位到具体哪一页,而不是一页一页的查找。索引模型常见的索引模型有哈希表、有序数组、B-Tree、B+Tree。哈希表跟数据结构讲的HashMap差不多,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。当有多个值哈希之后的值相等时,数组上的值会形成链表。有个缺点就是因为链表不是有序的,所以哈希

2021-03-13 21:23:16 441

原创 设计模式总结

设计模式目的创建型模式是将创建和使用代码解耦结构型模式是将不同功能代码解耦行为型模式是将不同的行为代码解耦作用利用更好的代码结构,将一大坨代码拆分成职责单一的小类,让其满足开闭原则、高内聚低耦合等特性,以此来控制和应对代码的复杂性,提高代码的可扩展性。类型常见的模式有23种,按功能可以划分为三种:创建型:单例模式、工厂模式、抽象工厂、建造者模式、原型模式。结构型:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。行为型:观察者模式、模板模式、策略模式、职责链

2021-03-11 22:37:50 178

原创 基于服务器轮询实现扫码功能

基于服务器轮询实现扫码功能之前的扫码功能是基于轮询和websocket长连接实现的,详情可见:基于轮询或长连接的扫码亮码功能之前的轮询有个缺点就是扫码端和被扫码端都要一直发起请求查询状态,直到扫码修改了状态才停止请求,这样其实会造成前后端需要大量的网络IO交互。为了避免这种大量的请求,我们可以把这种轮询的请求放到服务器上面去,这里我们修改扫码端的轮询。实现流程扫码端扫码之后,后端服务器阻塞主线程,开启一个新的线程轮询读取码的状态,如果码状态修改为已确认,则结束新的线程,释放主线程,返回结果给前端。

2021-03-10 22:58:40 376 1

原创 soul网关源码学习19-resilience4j插件解析

soul网关源码学习19-resilience4j插件解析目标:初步了解resilience4j跑通resilience4j插件resilience4j介绍Netflix Hystrix 作为SpringCloud最早支持的一种容错解决方案,已经进入了维护阶段。虽然目前还有大量应用在使用Hystrix 长远来看Hystrix退出历史舞台 仅仅是时间问题。并且SpringCloud和Netflix Hystrix都给出了替代方案 那就是Resilience4j。Resilience4j是受N

2021-02-05 22:10:23 188

原创 soul网关源码学习18-sentinel插件解析

soul网关源码学习17-sentinel插件解析目标:跑通sentinel插件,测试熔断功能了解sentinel基本的实现一、启动项目首先,在bootstrap中加入sentinel插件的依赖。 <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-sent

2021-02-04 23:08:51 452

原创 soul网关源码学习17-hystrix插件解析(下)

soul网关源码学习17-hystrix插件解析(下)目标:了解hystrix的底层实现实现步骤使用命令模式将所有对外部服务(或依赖关系)的调用包装在HystrixCommand或HystrixObservableCommand对象中,并将该对象放在单独的线程中执行;每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。记录请求成功,失败,超时和线程拒绝。服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。请求失败,被拒绝,超时

2021-02-03 23:15:07 291

原创 soul网关源码学习16-hystrix插件解析(上)

soul网关源码学习16-hystrix插件解析目标:跑通hystrix插件,测试熔断功能了解hystrix基本的实现一、启动项目首先,在bootstrap中加入hystrix插件的依赖。 <dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starter-plugin-hystrix&

2021-02-02 00:02:01 141

原创 soul网关源码学习15-rate_limiter插件解析(下)

soul网关源码学习15-rate_limiter插件解析(下)目标:了解常用的限流算法接着上一讲的内容深入理解令牌桶算法前言分布式环境下应对高并发保证服务有稳定的几种做法,按照个人理解,优先级从高到低分别为缓存、限流、降级、熔断,其实这种说法也不完全准确,因为服务降级、熔断本身也是限流的一种,因为它们本质上也是阻断了流量进来。一、为什么要限流为什么要限流,其实很好理解的一个问题,就是流量过大了呗,造成流量过大的原因有很多,例如以下的几个场景:业务用户量不断攀升各种促销网络爬虫

2021-01-31 00:19:12 287 1

原创 soul网关源码学习14-rate_limiter插件解析(上)

soul网关源码学习14-rate_limiter插件解析目标:跑通rate_limiter插件理解rate_limiter插件底层原理一、运行项目本地启动redis启动admin启动bootstrap启动http-example,用来测试限流插件二、测试限流插件在没用rate_limiter插件的情况下,我们先用jmeter来测试一下10个并发请求的响应情况。可以看到10个请求全部请求成功。接下来引入rate_limiter插件,在管理后台中开启插件,填入re

2021-01-30 21:54:12 243

原创 soul网关源码学习13-springcloud插件解析

soul网关源码学习13-springcloud插件解析目标跑通springcloud插件理解springcloud插件底层原理与divide插件进行对比一、运行项目引入依赖springcloud插件支持eureka或者nacos作为注册中心,这里我们使用eureka,引入eureka依赖。 <dependency> <groupId>org.springframework.cloud</groupId>

2021-01-28 23:36:15 215 1

原创 soul网关源码学习12-http代理解析(下)

soul网关源码学习12-http服务注册与探活前言上一讲讲到了http服务启动之后,通过http请求的方式把接口的数据发送到admin,接下来一起来看一下admin拿到数据之后是做了哪些操作的。一、源码解析服务注册这里为了演示新增http服务注册,可以先把数据库里面http相关的数据清掉,或者直接一点把数据库直接删掉(演示需要,实际情况慎重)。从上一讲可以知道http服务启动之后把数据发送到了/springmvc-register接口,那我们可以直接搜到这个接口,打上断点,重启http-ex

2021-01-27 23:34:06 207

原创 soul网关源码学习11-http代理解析(上)

soul网关源码学习11-http服务注册前言soul作为一款高性能网关,可以转发各种类型的接口,如http,dubbo,springcloud,sofa等,那么它是通过怎么样的方式来进行转发呢?如何动态的上下线接口呢?如何保证接口一直能处于服务状态呢?下面以http接口为例子,解析一下上面的几个问题。一、启动项目启动admin项目启动bootstrap项目启动http-example项目二、源码解析启动完这三个项目之后思考一下,既然是http接口要接入网关,猜测会有一个把接口注

2021-01-27 00:45:59 371

原创 soul网关源码学习10-数据同步总结

soul网关源码学习10-数据同步总结01一、同步方式soul网关后台管理系统与网关之间的数据同步目前有如下四种方式:websocketzookeeperhttp长轮询Nacos二、同步流程websocket启动admin,加载事件分发器DataChangedEventDispatcher实例化DataChangedListener的实现类WebsocketDataChangedListener,开始监听admin数据的变化。根据配置加载websocket服务端Websocket

2021-01-26 01:01:57 210

原创 Nacos配置中心数据同步原理

Nacos配置中心数据同步原理一、Nacos概览Nacos 能帮助我们发现、配置和管理微服务,提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。关键特性服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理持久化默认情况下,Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储

2021-01-24 20:55:36 6418 4

原创 soul网关源码学习09-Nacos数据同步

soul网关源码学习09-Nacos数据同步目标:了解Nacos的原理梳理Nacos同步数据的流程一、Nacos概览Nacos 能帮助我们发现、配置和管理微服务,提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。关键特性服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理持久化默认情况下,Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题

2021-01-23 22:16:38 240 1

原创 soul网关源码学习08-http长轮询数据同步

soul网关源码学习07-http长轮询数据同步目标:梳理http长轮询数据同步流程一、流程分析soul-admin启动的时候会创建一个定时任务,这个任务每隔5分钟全量更新一次缓存的数据。soul-bootstrap启动的时候soul-web会发起一个http请求,从soul-admin拿到全量的数据,然后更新到缓存。soul-bootstrap启动之后会定时的发起http长轮询到soul-admin,如果有数据修改,把全量数据返回,然后更新到缓存。二、启动项目修改soul-adm

2021-01-23 10:46:05 235 4

原创 soul网关源码学习07-zookeeper数据同步

soul网关源码学习07-zookeeper数据同步目标:梳理zookeeper数据同步流程一、启动项目修改soul-admin的同步方式为zookeeper sync:# websocket:# enabled: true zookeeper: url: localhost:2181 sessionTimeout: 5000 connectionTimeout: 2000修改soul-boots

2021-01-22 00:48:44 183

原创 soul网关源码学习06-websocket数据同步

soul网关源码学习06-websocket数据同步目标:演示websocket方式数据同步梳理websocket数据同步流程一、演示数据同步soul-admin使用websocket方式进行数据同步,这里打开websocket开关。soul: sync: websocket: enabled: true启动soul-admin、soul-bootstrap、soul-examples-http,打开系统:http://localhost:9095,admin

2021-01-21 01:17:53 506 1

原创 soul网关源码学习05-dubbo插件流程解析

soul网关源码学习05-插件源码解析02目标:梳理dubbo插件的调用过程理解dubbo的泛化调用一、启动项目启动本地mysql数据库和zookeeper启动soul-admin、soul-bootstrap、soul-example-apache-dubbo-service二、源码解析首先,还是按上一次讲的,在SoulWebHandler的handle方法打上断点。public Mono<Void> handle(@NonNull final ServerWebEx

2021-01-19 23:37:57 130 1

原创 soul网关源码学习04-divide插件流程解析

学习soul源码04-插件源码解析目标:梳理soul的插件是如何加载的。梳理发送http请求的时候是如何调用插件链的。一、加载插件从前面的学习可以知道,整个网关项目的入口是soul-bootstrap模块,先看一下里面的代码,简单的三个类和两个配置文件,可以猜想应该是在pom文件引入了其他模块的starter。打开pom.xml,可以看到引入了很多插件的starter,先看一下这个gateway的stater。进入soul-spring-boot-starter-gateway模块,可

2021-01-17 11:06:34 436 2

原创 soul网关源码学习03-dubbo应用示例运行

学习soul源码03-运行dubbo-example目标:运行dubbo-example走一遍熔断、限流插件一、启动项目启动soul-admin,发现有个报错。根据报错信息,找到相应的代码,发现程序会去检查已配置的这些选择器是否连接有效,把已失去连接的从内存移除。private void check(final String selectorName, final List<DivideUpstream> upstreamList) { List<Div

2021-01-16 16:19:20 120 1

原创 soul网关源码学习02-http应用示例运行

学习soul源码02-运行http-example一、启动项目先启动后台管理系统(soul-admin)和网关(soul-bootstrap),然后启动soul-example模块的soul-example-http。二、查看代码查看配置文件application.yml,配置了soul,项目启动时会根据配置注册相应的接口到网关。soul: # Soul 针对 SpringMVC 的配置项,对应 SoulHttpConfig 配置类 http: adminUrl: http://loc

2021-01-16 00:31:49 264

原创 soul网关源码学习01-搭建环境运行项目

学习soul源码01-搭建环境运行项目一、看官方文档特性基于WebFlux的响应式API网关异步高性能跨语言功能支持各种语言,无缝集成到 Dubbo、Spring Cloud、Spring Boot 中。Soul 是极其少支持 Dubbo 的 API 网关,通过 Dubbo 泛化调用 实现。支持各种语言(http协议),支持 dubbo,springcloud协议。插件化设计思想,插件热插拔,易扩展。灵活的流量筛选,能满足各种流量控制。内置丰富的插件支持,鉴

2021-01-14 23:38:01 206

原创 基于轮询或长连接的扫码亮码功能

需求:用户A进入小程序生成一个二维码,用户B用手机扫用户A的二维码,扫码成功后用户B需要等待用户A进行确认授权,用户A确认授权后,用户B的页面出现用户A的二维码的信息。解决方案:1、轮询方式;2、websocket长连接方式(有些浏览器不兼容websocket)一、轮询方式流程图...

2020-12-28 15:28:31 451

空空如也

空空如也

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

TA关注的人

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