- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 Elasticsearch Mapping 详解
Mapping 也称之为映射,定义了 ES 的索引结构、字段类型、分词器等属性,是索引必不可少的组成部分。ES 中的 mapping 有点类似与DB中“表结构”的概念,在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性。
2024-09-05 13:09:01
2608
原创 Java数据结构
数据结构是计算机存储组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
2024-09-04 10:14:05
1623
原创 RocketMQ整体架构及NameServer源码分析
RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性,是阿里巴巴双 11 使用的核心产品。
2023-09-14 08:41:45
371
原创 Kafka源码分析之网络通信
将消息缓存到RecordAccumulator收集器中, 最后判断是否要发送。这个加入消息收集器,首先得从 Deque 里找到自己的目标分区,如果没有就新建一个批量消息 Deque 加进入。
2023-09-10 15:36:52
227
原创 Kafka中Consumer源码解读
extends 类AbstractPartitionAssignor,然后在消费者端增加参数:properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,类.class.getName());即可。
2023-09-09 19:55:43
827
原创 Kafka中Producer源码解读
这里讲一讲拦截器的使用和基本作用,拦截器一般用得不多,所以这里只是讲一讲案例,不推荐生产中使用。想要实现拦截器,我们需要先实现ProducerInterceptor接口即可,然后在生产者中设置进去即可。1、想要把发送的数据都带上时间戳2、实现统计发送消息的成功次数和失败次数在里面,根据消息发送后返回的异常信息来判断是否发送成功。一般异常如果为空就说明发送成功了,反之就说明发送失败了。然后定义两个变量,并根据Exception的值分别累加就可以统计到了。
2023-09-09 14:58:44
553
原创 Kafka集群与消息可靠性
设置acks=all,且副本数为3极端情况1:默认min.insync.replicas=1,极端情况下如果ISR中只有leader一个副本时满足min.insync.replicas=1这个条件,此时producer发送的数据只要leader同步成功就会返回响应,如果此时leader所在的broker crash了,就必定会丢失数据!这种情况不就和acks=1一样了!所以我们需要适当的加大min.insync.replicas的值。
2023-09-09 10:29:20
159
原创 Kafka生产与消费示例
代码见:代码中使用到了自定义序列化。id的长度4个字节,字符串的长度描述4个字节, 字符串本身的长度nameSize个字节自定义序列化容易导致程序的脆弱性。举例,在我们上面的实现里,我们有多种类型的消费者,每个消费者对实体字段都有各自的需求,比如,有的将字段变更为long型,有的会增加字段,这样会出现新旧消息的兼容性问题。特别是在系统升级的时候,经常会出现一部分系统升级,其余系统被迫跟着升级的情况。解决这个问题,可以考虑使用自带格式描述以及语言无关的序列化框架。
2023-09-08 14:52:41
759
原创 Kafka入门与安装
基于磁盘的数据存储,换句话说,Kafka的数据天生就是持久化的。高伸缩性,Kafka一开始就被设计成一个具有灵活伸缩性的系统,对在线集群的伸缩丝毫不影响整体系统的可用性。高性能,结合横向扩展生产者、消费者和broker,Kafka可以轻松处理巨大的信息流(LinkedIn公司每天处理万亿级数据),同时保证亚秒级的消息延迟。
2023-09-07 09:22:49
1028
原创 并发编程--------JUC集合
ConcurrentHashMap是线程安全的HashMap。红黑树是一种特殊的平衡二叉树,首选具备了平衡二叉树的特点:左子树和右子数的高度差不会超过1,如果超过了,平衡二叉树就会基于左旋和右旋的操作,实现自平衡。CopyOnWriteArrayList是基于lock锁和数组副本的形式去保证线程安全。
2023-08-12 13:30:37
202
原创 多线程与高并发--------线程池
首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可以设置的核心参数最多就两个,这样就会导致对线程池的控制粒度很粗。所以在阿里规范中也推荐自己去自定义线程池。手动的去new ThreadPoolExecutor设置他的一些核心属性。
2023-08-12 13:30:23
2044
原创 多线程与高并发--------阻塞队列
生产者消费者是设计模式的一种。让生产者和消费者基于一个容器来解决强耦合问题。生产者 消费者彼此之间不会直接通讯的,而是通过一个容器(队列)进行通讯。所以生产者生产完数据后扔到容器中,不通用等待消费者来处理。消费者不需要去找生产者要数据,直接从容器中获取即可。而这种容器最常用的结构就是队列。
2023-08-12 13:10:17
249
原创 多线程与高并发--------锁
Java中提供的synchronized,ReentrantLock,ReentrantReadWriteLock都是可重入锁。重入:当前线程获取到A锁,在获取之后尝试再次获取A锁是可以直接拿到的。不可重入:当前线程获取到A锁,在获取之后尝试再次获取A锁,无法获取到的,因为A锁被当前线程占用着,需要等待自己释放锁再获取锁。
2023-08-11 10:15:16
213
原创 多线程与高并发--------原子性、可见性、有序性
原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到他。可见性的定义:多核CPU执行,有三级缓存,操作共享资源,如果不及时写会主内存,那么共享资源的值和预期不同。有序性的定义:CPU在执行这些指令时,为了提升执行效率,在不影响最终结果的前提下(满足一些要求),会对指令进行重排。
2023-08-11 10:08:24
608
原创 SpringCloudAlibaba之Sentinel 持久化配置
在Sentinel Dashboard中配置规则之后重启应用就会丢失,所以实际生产环境中需要配置规则的持久化实现,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。
2023-07-25 09:22:43
273
原创 OpenFeign基础应用以及Sentinel整合OpenFeign使用
OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,用法其实就是编写一个接口,在接口上添加注解即可。可以简单理解它是借鉴Ribbon的基础之上,封装的一套服务接口+注解的方式的远程调用器。
2023-07-19 12:35:09
319
原创 SpringCloudAlibaba之Sentinel 自定义限流逻辑处理
Sentinel 提供了@SentinelResource注解用于定义资源,并提供了AspectJ的扩展用于自定义资源,处理BlockException等。
2023-07-18 11:41:55
301
原创 SpringCloudAlibaba之Sentinel 热点规则详解
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效官网:https://sentinelguard.io/zh-cn/docs/parameter-flow-control.html。
2023-07-18 09:51:08
138
原创 SpringCloudAlibaba之Sentinel 熔断规则详解
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。
2023-07-13 10:07:01
1252
1
原创 SpringCloudAlibaba之Sentinel安装部署以及Sentinel流量控制
分布式系统的流量防卫兵:随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。
2023-07-12 17:57:56
1305
原创 SpringCloudAlibaba中Nacos组件下载安装,集群搭建,注册中心以及配置中心使用详解
Nacos可以直接提供注册中心(Eureka)+配置中心(Config),所以它的好处显而易见,我们在上节课成功安装和启动了Nacos以后就可以发现Nacos本身就是一个小平台,它要比之前的Eureka更加方便,不需要我们在自己做配置。
2023-07-06 18:21:34
1417
原创 Nginx安装、反向代理、负载均衡
高性能 处理高并发能力上很强高扩展性 Nginx模块化,官方提供了多元化的模块。高可用性 三个999.9% 四个9 99.99%热部署(版本平滑升级) 服务进行升级的同时,保证业务不宕机
2023-06-29 17:10:11
312
原创 微服务知识点整理
EurekaRibbonFeignHystrixConfig等组件组成。NacosSentinelSeata等组件组成。Apollo 携程、SkyWalking 吴晟(shèng)国产开源的。
2023-06-16 16:31:33
362
原创 Mysql知识点整理
MVCC 的核心思想是: 我可以查到在我这个事务开始之前已经存在的数据,即使它在后面被修改或者删除了。在我这个事务之后新增的数据,我是查不到的。通过以上演示我们能看到,通过版本号的控制,无论其他事务是插入、修改、删除,第一个事务查询到的数据都没有变化。在 InnoDB 中,MVCC 是通过 Undo log 实现的。
2023-06-13 20:52:06
2663
原创 JVM知识点整理
Stop-The-World 简称 STW该回收的对象没有被回收不该回收的对象被回收了在STW状态下,所有的线程都是停止运行的 - >垃圾回收线程除外当STW发生时,出了GC所需要的线程,其他的线程都将停止工作,中断了的线程知道GC线程结束才会继续任务STW是不可避免的,垃圾回收算法的执行一定会出现STW,而我们最好的解决办法就是减少停顿的时间GC各种算法的优化重点就是为了减少STW,这也是JVM调优的重点。
2023-06-11 18:23:31
403
原创 Java垃圾回收【GC】详解
什么是垃圾垃圾是内存中没有任何引用指向它,并且没有引用的对象无法使用,所以就可以认为这个对象是垃圾,需要被回收释放其占用的内存空间。垃圾定位1、引用计数法(RefrenceCount)堆中每个对象实例都有一个引用计数,每当有一个引用指向它,计数器加1,引用失效,计数器减1,当计数器为0时,这个对象就是垃圾。简单高效。缺点是:无法解决对象之间相互循环引用的问题。2、根搜索(Root Seaching)GC Roots 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Re.
2023-06-11 16:13:06
1283
原创 Redis知识点整理,入门到精通带你起飞
Redis 中的事务是一组命令的集合,是 Redis 的最小执行单位。它可以保证一次执行多个命令,每个事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。服务端在执行事务的过程中,不会被其他客户端发送来的命令请求打断。它的原理是先将属于一个事务的命令发送给 Redis,然后依次执行这些命令。Redis 事务的注意点有哪些?需要注意的点有:Redis 事务是不支持回滚的,不像 MySQL 的事务一样,要么都执行要么都不执行;
2023-06-10 23:36:13
231
原创 Java网络编程BIO/NIO
在开发过程中,如果类的名字有Server或者ServerSocket的,表示这个类是给服务端容纳网络服务用的,如果类的名字只有Socket的,那么表示这是负责具体的网络读写的。Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器(Selectors),然后使用一个单独的线程来操作这个选择器,进而“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。
2022-11-06 22:32:49
618
原创 Sentinel整合Ribbon/OpenFeign,Sentinel自定义限流熔断
服务熔断:应对微服务雪崩效应的一种链路保护机制,类似保险丝。需要完成Sentinel整合Ribbon+openFeign,所以我们先要搭建环境,那么先从整合Ribbon开始为了演示操作,所以在这里我们需要利用Ribbon进行负载均衡的调用,所以我们需要创建一个服务消费者cloudalibaba-consumer8084和两个服务提供者cloudalibaba-provider9003和cloudalibaba-provider9004,以下是结构图新建spring-cloud-consumer
2022-11-04 18:02:39
918
原创 SpringCloudAlibaba之Sentinel流量控制、熔断降级详解,实战图文演示
分布式系统的流量防卫兵,随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控。
2022-11-04 14:38:27
1954
原创 SpringCloud Alibaba之Nacos注册中心、config配置中心、Nacos集群搭建
Nacos(Naming Configuration Service) 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序服务发现是微服务架构中的关键组件之一。Nacos 致力于帮助你发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助你快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2022-11-01 12:56:11
475
原创 DUBBO详解,Nacos注册中心实现服务注册与发现
Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
2022-10-29 18:34:41
7275
原创 Mysql事务---MVCC详解
Mysql数据库事务隔离级别?SQL 标准定义了四个隔离级别:READ-UNCOMMITTED(读取未提交): 事务的修改,即使没有提交,对其他事务也都是可见的。事务能够读取未提交的数据,这种情况称为脏读。READ-COMMITTED(读取已提交): 事务读取已提交的数据,大多数数据库的默认隔离级别。当一个事务在执行过程中,数据被另外一个事务修改,造成本次事务前后读取的信息不一样,这种情况称为不可重复读。REPEATABLE-READ(可重复读): 这个级别是MySQL的默认隔离级别,它解决了脏读
2021-03-14 19:18:21
3500
原创 JVM入门到精通详解
由于 Java 虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为「线程私有」的内存。该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存。
2021-03-12 15:19:22
638
1
线程-线程池-锁-集合-Map-队列.docx
2020-05-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人