自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 负载均衡、限流(限流算法)、降级Hystrix、熔断Sentinel

在Java微服务架构中,实现限流、降级和熔断是确保系统稳定性和可靠性的重要手段。

2024-10-30 18:11:05 504

原创 响应式编程-WebClient实现非阻塞HTTP访问

响应体的实体类需要按照 JSON 格式定义字段,确保字段类型和名称匹配。

2024-10-28 11:29:01 551

原创 Grafana入门到精通(入门、Grafana-Clickhouse SQL优化、面试题、Grafana与ClickHouse 集成)

首先从通用的基础管理功能入手,然后分别对graph、table、text、alert list、dashboard list和pie chart展开进行说明,覆盖其所属的各类设置项,包括query、visualization、general、alert。在编写Perflog指标数据SQL时,当某条SQL执行后得到的数据条目数过多时,会影响其传输以及前端加载速度,在实际场景中,用户更多的关注TopN,建议通过 LIMIT n BY expressions 语句限制条目数量,达到优化效果。

2024-10-28 11:23:36 565

原创 本地缓存(ConcurrentHashMap、Guava Cache、Caffeine)、缓存一致性、提高缓存命中率、技术选型

Guava Cache 提供了多种缓存失效机制,包括基于时间的失效、基于大小的失效、基于引用的失效和显式失效。通过合理配置这些失效机制,可以有效管理缓存的生命周期和内存使用,确保缓存的高效性和稳定性。同时设置和可以确保缓存数据的新鲜度和一致性,同时提高系统的性能和可用性。合理设置这两个参数需要根据具体的应用场景和需求来决定,考虑数据更新频率、系统性能和负载等因素。示例代码展示了如何同时设置这两个参数,以实现更灵活和高效的缓存管理。通过合理配置和。

2024-10-28 11:22:50 585

原创 本地缓存Caffeine(基础入门、Caffeine + Redis两级缓存架构实战、原理、源码)

1、自动将数据加载到缓存中,同时也可以采用异步的方式加载。2、内存淘汰策略:基于频次、基于最近访问、最大容量。3、根据上一次的缓存访问\上一次的数据写入决定缓存的过期的设置。4、当一条缓存数据过期了,自动清理,清理的时候也是异步线程来做。5、考虑JVM的内存管理机制,加入弱引用、软引用。6、缓存数据被清理后,会收到相关的通知信息7、缓存数据的写入可以传播到外部的存储。8、统计功能:被访问次数,命中,清理的个数,加载个数.build();cache.put("name","张三");

2024-10-28 11:22:31 494

原创 Sentinel(流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。资源:资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

2024-10-28 11:21:40 520

原创 接口自适应降级(滑动窗口+令牌桶RateLimiter)、QPS限流、滑动窗口的几种算法

背景:项目调用多个第三方接口,当第三方接口异常变多时实现自动降级。

2024-10-28 11:21:06 502

原创 响应式编程二(Spring WebFlux核心编程)

文章目录一、 **用操作符转换响应式流**1 、 映射响应式流元素2、 过滤响应式流3、 收集响应式流3.1 收集到List3.2 使用collectMap3.3 CollectionMultimap 使用3.4 repeat 操作符的使用:3.5 defaultIfEmpty 操作符的使用:3.6 distinct 操作符的使用:3.7 distinctUntilChanged 操作符的使用:4、裁剪流中元素5、 组合响应式流6、流元素批处理7、**flatMap**、**concatMap** 和

2024-10-28 11:04:31 548

原创 Future、CompletableFuture、ListenableFuture

根据Oracle官方出具的Java文档说明,创建线程的方式只有两种:继承Thread或者实现Runnable接口。但是这两种方法都存在一个缺陷,没有返回值,也就是说我们无法得知线程执行结果。虽然简单场景下已经满足,但是当我们需要返回值的时候怎么办呢?于是在 Java 1.5 以后的Callable和Future接口就解决了这个问题,我们可以通过向线程池提交一个Callable来获取一个包含返回值的Future对象,从此,我们的程序逻辑就不再是同步顺序。try {

2024-10-22 10:49:17 540

原创 ElasticSearch系列二(索引操作、文档操作、查询、深度分页、排序、DSL、检索原理)

1、什么是IK分词器分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,这显然是不符合要求的,所以我们需要安装中文分词器IK来解决这个问题。如果要使用中文,建议使用ik分词器。IK提供了两个分词算法:ik_samrt和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度划分!IK分词器入门1、下载2、下载完毕之后放入到elastics

2024-10-21 16:51:06 518

原创 quartz任务定时器(简介、Spring整合Quartz、CORN)

quartz简介定时任务处理,quartz及Spring整合quartz去快速解决企业开发中的任务调度问题。quartz是开源且具有丰富特性的“任务调度库”,能够集成于任何的Java应用,任务job被定义为标准的Java组件,能够执行任何你想要实现的功能。quartz调度包含许多企业级的特性,如JTA事务、集群的支持。简言之,quartz就是基于Java实现的任务调度框架,用于执行任何你想要执行的任务。quartz应用案例第一步:导入jar包;第二步:获取一个实例;第三步:创建一个任务;第四

2024-01-16 17:56:26 1192

原创 MySQL主从复制(概念和作用、主从延迟原因及解决方案)

1.2 主从复制的步骤1.3 搭建主从同步实战1.3.4 主从复制的问题和解决方法1.7 半同步复制(保证不丢失数据)

2023-05-29 18:32:50 1917

原创 ShardingSphere系列四(Sharding-JDBC内核原理及核心源码解析)

使用ShardingSphere提供的SPI扩展点,实现自定义分布式主键生成策略。

2023-05-08 23:50:59 1085

原创 ShardingSphere系列一(MySQL主从架构及读写分离实战(搭建主从集群、MySQL高可用方案MHA、分库分表概念))

这个工具专门用于监控主库的状态,当发现master节点故障时,会提升其中拥有新数据的slave节点成为新的master节点,在此期间,MHA会通过其他从节点获取额外的信息来避免数据一致性方面的问题。整个服务的性能是会有所下降的。在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。

2023-05-08 23:49:00 1790

原创 MySQL系列三(定位慢SQL、索引优化、SQL优化)Using filesort

1. 慢SQL1.1 定位慢SQL(慢查询日志)1.2 慢SQL优化整体思路2. 索引失效的场景3. 索引优化4. SQL语句优化Using filesort

2023-05-08 23:36:31 1979

原创 MySQL进阶(UNION和UNION ALL的区别、HAVING、CASE WHEN、自定义排序、SQL关键字、SQL语句执行顺序、自增主键不一定连续)

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。例如:查找总访问量大于 200 的网站。

2023-04-18 22:27:52 936 1

原创 Redis底层String的存储结构(动态字符串,simple dynamic string,SDS)、通信协议RESP

Redis由于各种原因,并没有直接使用了C语言的字符串结构,而是对其做了一些封装,    得到了自己的简单动态字符串(simple dynamic string, SDS)的抽象类型。     Redis中,默认以SDS作为自己的字符串表示。    只有在一些字符串不可能出现变化的地方使用C字...

2023-04-18 22:07:33 410

原创 MySQL系列四(Online DDL、Online DDL的Alter、批量删除导致IO出现瓶颈)

线上临时表积压数据过多,虽然有索引和数据归档,但是每日新增数据量>删除&归档数量,导致整体数据操作效率变慢。所以提交数据库删除工单,结果导致线上数据库半个小时内整个数据库集群链接不可用。

2023-04-18 21:38:55 1407

原创 Spring系列三(Spring容器的启动流程)

基于 java-config 技术分析源码,所以这里的入口是 AnnotationConfigApplicationContext ,如果是使用 xml 分析,那么入口即为 ClassPathXmlApplicationContext ,它们俩的共同特征便是都继承了 AbstractApplicationContext 类,而大名鼎鼎的 refresh()便是在这个类中定义的。

2022-12-20 21:45:50 401

原创 Spring系列四(Spring Bean的加载流程)

2.4 获取单例:getSingleton(String beanName, ObjectFactory

2022-12-20 21:45:02 1320 1

原创 Redis的数据过期清除策略、内存淘汰策略(8种)

1. Redis的数据过期清除策略:定期删除 + 惰性删除2. Redis的缓存淘汰策略3. Redis中的LRU和LFU算法

2022-12-01 00:02:12 1857

原创 Dubbo简单使用

文章目录1. Dubbo简单使用1.1 服务提供者1.2 服务消费者1. Dubbo简单使用1.1 服务提供者第一步:将服务提供者注册到注册中心(暴露服务)(1)导入dubbo依赖(com.alibaba.dubbo)由于注册中心使用的是ZooKeeper,所以得引入操作ZooKeeper的客户端curator;dubbo 2.6 以前的版本引入zkclient操作ZooKeeper...

2022-10-06 22:38:01 209

原创 Redis三种集群模式(主从复制replication、哨兵sentinel、Cluster)

文章目录1. Redis集群1.1 Redis集群容错1.2 Redis集群中的一致性问题1.3 Redis集群架构2. Redis主从复制3. Redis哨兵模式Redis哨兵模式工作原理1. Redis集群Redis集群是可以在多个Redis节点之间进行数据共享的架构。Redis集群通过分区容错(Partiton)来提高可用性(Availability),即使集群中有一部分节点失效或者无法进行通信,集群也可以继续处理请求。Redis集群通过以下手段实现高可用、高性能:数据分片:将数据切分到多个

2022-10-06 22:36:28 1175

原创 RocketMQ篇四(保证消息不丢失、保证消息顺序、快速处理消息积压、消息轨迹、消息位点)

1. RocketMQ如何保证消息不丢失1.1 Producer端1.1.1 同步发送、重试3次、集群部署1.1.2 生产者使用事务消息机制保证消息零丢失1.2 Broker同步刷盘+Dledger主从架构保证MQ自身不会丢消息1.3 Consumer消费者端消费确认1.4 RocketMQ特有的问题:NameServer挂了如何保证消息不丢失?1.5 RocketMQ消息零丢失方案总结2. 使用RocketMQ如何保证消息顺序3. RocketMQ如何快速处理积压消息4. Rocket

2022-08-22 22:55:03 3264

原创 RocketMQ篇三(源码解读、NameServer启动、Broker启动、Broker注册、Producer、消息存储、Consumer消费者、延迟消息)

RocketMQ源码

2022-08-21 22:25:06 2501

原创 RocketMQ篇二(消息重试、死信队列、死信消息、消息幂等、延迟消息、顺序消息、消息过滤、回溯消费、事务消息)

1. 消息重试1.1 如何让消息进行重试1.2 重试消息如何处理2. 死信队列、死信消息3. 消息去重/消息幂等(防止消息重复消费)4. 定时消息(延迟消息)5. 顺序消息6. 消息过滤7. 回溯消费8. 事务消息

2022-07-17 13:09:25 7930

原创 RocketMQ篇一(基本概念、集群组成、部署类型、存储机制(介质、结构、刷盘机制、主从复制)、消息防丢失、负载均衡)

文章目录入门消息重试(重试队列)生产端重试消费端重试延迟消息发送延迟消息顺序消费1、messageDelayLevel 是设置重试时间间隔还是延时队列时间间隔的?messageDelayLevel 是设置延时队列时间间隔的。消息异常重试时也有用到。2、默认重试次数和时间间隔是多少?默认情况下都是重试16次,使用延时等级配置的时间。入门其代码结构清晰优秀,底层采用Netty框架进行NIO通信。内部使用轻量级的NameServer进行服务发现和动态路由,提高了服务性能,并且支持消息失败重试机制。

2022-07-17 13:08:40 1807

原创 Kafka篇二(SpringBoot整合Kafka)

文章目录SpringBoot整合Kafka事务SpringBoot整合Kafkapom.xml:<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.2.6.RELEASE</version></dependency>a

2022-05-16 20:25:43 323

原创 Dubbo高可用(ZooKeeper宕机、Dubbo直连、负载均衡、服务降级、服务容错、整合Hystrix

高可用:通过设计,减少系统不能提供服务的时间。ZooKeeper宕机现象:ZooKeeper注册中心宕机,还可以消费Dubbo暴露的服务。原因:注册中心全部宕机后,服务提供者和服务消费者仍能通过本地缓存通信;监控中心宕机不影响使用,只是丢失部分采样数据;数据库宕机后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务;注册中心对等集群,任意一台宕机后,将自动切换到另一台;服务...

2020-09-11 15:49:31 1107 1

原创 Nginx代理(正向代理、反向代理)、负载均衡、动静分离、缓存

文章目录1. 正向代理与反向代理1.1概念2. 负载均衡2.1 负载均衡概念2.2 负载均衡的配置2.2.1 配置一般轮询负载均衡2.2.2 加权负载均衡2.2.3 ip_hash负载均衡2.2.4 利用第三方模块3. 缓存3.1 缓存实现原理对于一个大型网站来说,随着网站访问量的快速增长,单台服务器已经无法承担用户的并发访问,必须采用多台服务器协同工作,以提高计算机系统的处理能力、计算速度,从...

2020-09-01 22:36:26 1721 1

原创 Dubbo原理(RPC&Netty原理)

RPC原理一次完整的RPC调用流程如下(同步调用,异步另说):服务消费方(client)调用以本地调用方式调用服务;client stub(客户端代理)接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;client stub找到服务地址,并将消息发送到服务端;server stub收到消息后进行解码(序列化与反序列化);server stub根据解码结果调用本地的服务;...

2020-07-27 22:26:50 260

原创 JVM系列二(JVM结构深度解析:JVM整体结构及内存模型、内存参数设置、对象创建过程、内存分配流程)

Java内存区域划分程序计数器:存放下一条要执行的程序的指令的地址,每个线程都有一个程序计数器,它们之间互不影响。即程序计数器是线程私有的。Java虚拟机栈:保存了局部变量、部分结果,并参与方法的调用和返回。也是线程私有的。本地方法栈:本地方法栈和Java虚拟机栈的功能相似,Java虚拟机栈用于管理Java函数的调用,而本地方法栈用于管理本地方法(Native方法)的调用。也是线程私有的。..................

2020-07-19 22:07:13 566 1

原创 MySQL系列二(Explain执行计划详解、执行计划的局限性)

文章目录1、 建索引对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引2、select子句中尽量避免使用*,只查询用到的字段。3、 where子句比较符号左侧避免函数尽量避免在比较符号的左侧出现表达式、函数等操作,因为会导致全表扫描,增加运行时间。所以,为了提高效率,可以把where子句中遇到函数或加减乘除的运算移到比较符号的右侧。4...

2020-07-19 19:03:27 582 1

原创 Dubbo入门(特性、核心组件、调用过程)

文章目录1. Dubbo(开源分布式服务框架)1.1 Dubbo的特性1.2 Dubbo分层1.3 Dubbo的核心组件1.4 Dubbo总体调用过程1. Dubbo(开源分布式服务框架)Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。Dubbo是一款高性能、...

2020-07-19 18:45:32 1398

原创 ShardingSphere系列二(ShardingSphere实现分库分表)

当业务系统逐渐增大时,单库单表不足以支撑起整个业务,性能会急速下降,这是就需要分库分表;垂直拆分垂直分库垂直分库针对的是系统中的不同业务进行拆分。如用户一个库,订单一个库、商品一个库…分库之后减小了单库的压力,但单机压力并不会缓解多少,可以通过把库放到不同的服务器上解决。垂直分表“大表拆小表”,基于列字段进行拆分。一般是对表中的字段较多的表进行拆分,将不常用的、数据较大、长度较长的拆分到...

2020-07-19 18:35:55 2413 1

原创 分布式锁(Redis分布式锁的问题、锁超时、Redlock、Redission)

由于锁没有同步成功,线程B就可以获取同个key的锁,这就会出现线程A还没执行完,线程B又来执行,导致并发安全问题。如果设置锁的超时时间为10s,程序没执行完但是锁已经被释放了,线程2重新获得锁,但是线程1执行完删除了线程2的锁,导致其他线程重新获得锁,可以使用。分布式锁是指所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。,同一把锁在上锁时设置不同的uuid,删除锁时判断是否是当前线程的锁,如果是,就删除,如果不是,就不删除。

2019-12-31 15:23:54 2839 1

原创 Nginx入门、下载安装启动(Win10)、常用配置

文章目录1. Nginx简介2. 下载安装启动3. Nginx的常用基本配置3.1 Nginx配置文件结构3.2 设置用户和组3.3 自定义错误页1. Nginx简介Nginx是一个轻量级开源Web服务器软件,可以作为反向代理、负载均衡、缓存服务器使用。Nginx是为高并发网站的应用场景而设计的。Nginx具有高性能、稳定性好、结构模块化、配置简单、资源消耗非常低等特点。具体可参见官网:Ngi...

2019-12-26 14:07:23 4478 1

原创 Dubbo注册中心(ZooKeeper)

文章目录1. 注册中心概述2. 注册中心的工作流程3. 注册中心的原理3.1 ZooKeeper做注册中心的原理1. 注册中心概述在Dubbo微服务体系中,注册中心是其核心组件之一。Dubbo通过注册中心实现了分布式环境中各服务之间的注册与发现,是各个分布式节点之间的纽带。其主要作用如下:动态加入(服务注册/暴露):一个服务提供者通过注册中心可以动态地把自己暴露给其他消费者,无须消费者逐个...

2019-12-20 16:55:15 1130 1

原创 ZooKeeper的shell操作命令

文章目录ZooKeeper的shell操作命令ZooKeeper的shell操作命令使用help命令可查看ZooKeeper的shell操作可用的命令,如下:[zk: localhost:2181(CONNECTED) 4] helpZooKeeper -server host:port cmd args stat path [watch] set path...

2019-12-18 20:15:49 1260

原创 ZooKeeper配置参数详解

ZooKeeper的配置文件zoo.cfg内容如下:# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can ...

2019-12-18 17:18:50 914

空空如也

空空如也

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

TA关注的人

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