- 博客(60)
- 收藏
- 关注
原创 在 Ubuntu 中安装 ES 7.13
这个配置项除了支持 ip 外还支持域名 ~所以可以用域名来解决这个问题,其他节点的配置上写的是域名,域名解析到对应的 ip,如果机器挂了,新的节点 ip 换了,就把域名解析到新的ip即可,这样其他节点的配就不用修改了。discovery.seed_hosts 这个可以理解为是做服务或者节点发现的,其他节点必须知道他们才能进入集群~ 一般配置为集群的master 候选者的列表。ES 的安装非常简单,这里先献上。除了修改 ES 服务配置外,还需要配置 JVM 的配置,我们主要配置服务占用的堆内存的大小。
2024-12-31 21:26:01
325
原创 ElasticSearch存储引擎
indices.memory.min_index_buffer_size:如果将index_buffer_size设置为备份比,则可以用此设置指定绝对最小值,默认为48mb。indices.memory.max_index_buffer_size:如果将index_buffer_size设置为百分比,则可以用此设置指定绝对最小值,默认无限制。indices.memory.index_buffer_size:接受百分比或字节大小值,默认为10%,意味着分配给node的总内存的10%用于索引缓冲区。
2024-12-26 17:42:34
581
原创 Mysql8 数据库安装及主从配置
设置为与主服务器不同的唯一标识符。重启 MySQL 服务以使配置生效。是二进制日志文件的过期时间(以秒为单位)是要从中开始复制的二进制日志文件的名称,4.重启 MySQL 服务以使配置生效。3.在主服务器上,找到。5.在从服务器上,配置相同的。是之前创建的复制用户的凭据,是主服务器的 IP 地址,是二进制日志文件中的位置。是主服务器的唯一标识符,一、MySQL8 安装。
2024-12-26 14:43:18
436
原创 分布式事物各方案常见使用场景
2PC/3PC:依赖于数据库,能够很好的提供强一致性和强事务性,但延迟比较高,比较适合传统的单体应用,在同一个方法中存在跨库操作的情况,不适合高并发和高性能要求的场景。 TCC:适用于执行时间确定且较短,实时性要求高,对数据一致性要求高,比如互联网金融企业最核心的三个服务:交易、支付、账务。 本地消息表/MQ 事务:适用于事务中参与方支持操作幂等,对一致性要求不高,业务上能容忍数据不一致到一个人工检查周期,事务涉及的参与方、参与环节较少,业务上有对账/校验系统兜底。 Saga 事务:由于 Saga 事
2024-12-06 18:17:25
406
原创 Spring Bean初始化流程
3.2.1、Spring自带的默认postProcessor,比如:CommonAnnotationBeanPostProcessor 实现了Java原生注解的处理逻辑如 @PostConstruct。3.2.2、用户自定义的(实现BeanPostProcessor接口的类)3.2.3、Spring默认指定了PostProcessor之间的顺序。1、实例化Bean(应该是从@Bean方法中获取,@Bean方法里面包含new这个类型的代码)2、依赖注入(所依赖的Bean要经历相同的流程)、调用Setter。
2024-11-26 17:03:08
312
原创 Zookeeper实现分布式锁、Zookeeper实现配置中心
新建一个maven项目ZK-Demo,然后在pom.xml里面引入相关的依赖。包括跨进程、跨机器、跨网络导致共享资源不一致的问题。分布式锁主要用于在分布式环境中保证数据的一致性。2. Zookeeper分布式锁的核心代码实现。1.Zookeeper分布式锁的代码实现。
2024-11-26 13:48:55
502
原创 ConcurrentHashMap中什么时候用CAS,什么时候用Synchronized
简单来说,CAS用于在数组中插入新的节点,synchronized用于在链表或红黑树中添加或删除节点。ConcurrentHashMap在JDK1.8中使用了CAS和synchronized来实现线程安全。
2024-11-19 13:05:20
336
原创 RocketMQ 消费队列的写入跟commit log的写入是否同步进行的
关系,该线程会不断地将没有构建索引的消息从commit log中取出,将物理偏移量、消息长度、tag写入文件。值得一提的是,消息队列文件的写入跟commit log不同,commit log的写入有很多刷盘策略,而consumeQueue每条消息解析完毕都会刷盘,而且采用的是。消费队列的写入跟commit log的写入是同步进行的吗?答案是否定的,RocketMQ会启动一个独立的线程来异步构建消费队列(构建索引文件也是这个线程),跟写入commitLog的线程是。简单描述下流程:构建索引的线程为。
2024-11-18 16:04:48
179
原创 Kafka中ACKS LSO LEO LW HW AR ISR OSR解析
在ACKS策略配置为-1的时候,需要等待所有ISR(In sync replica)集合中的副本将消息写入消息日志(Log)后才会给生产者(Producer)返回确认。ISR(In sync replica)正常同步的副本和OSR(Out sync replica)非正常同步的副本是指从副本的两种状态,有周期性任务将副本按这个状态进行进行划分。AR(Assigned replica)已分配的副本指主题(Topic)创建时设置的副本,所有副本包括主(Leader)和从(Follower)都归属AR。
2024-11-18 13:31:13
984
1
原创 http与https有哪些区别
综上所述,HTTP和HTTPS在协议安全性、连接方式、证书管理、连接状态、端口号、资源消耗和兼容性等方面存在明显的区别。HTTPS连接在数据传输过程中始终保持加密状态,即使用户与服务器之间的连接在传输过程中被截断,也不会影响数据的加密状态。HTTPS是HTTP的安全版,它使用了SSL/TLS协议来加密数据传输,保证数据在传输过程中的安全性。HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,而HTTP则不需要证书。因此,在使用HTTPS时,需要配置证书,而HTTP则不需要。
2024-11-14 21:47:39
294
原创 CompletableFuture指定ThreadPoolTaskExecutor自定义线程池
/阻塞队列//线程空闲后的存活时长//Cpu核数//核心线程数量大小//线程池最大容纳线程数//线程前缀//核心线程数//最大线程数//等待队列//线程池维护线程所允许的空闲时间,单位为秒// 线程池对拒绝任务(无线程可用)的处理策略。
2024-11-09 16:46:49
246
原创 【RabbitMQ】之高可用集群搭建
1、默认集群原理1-1、RabbitMQ 集群简介单台 RabbitMQ 服务器处理消息的能力是有瓶颈的,而且可靠性还无法保证,所以需要通过集群来提高消息的吞吐量和提高数据可靠性。由于 RabbitMQ 本身是基于 Erlang 编写,而 Erlang 语言天生具备分布式特性(通过同步 Erlang 集群各节点的 erlang.cookie 来实现)。因此,RabbitMQ 天然支持集群,并且还能通过水平扩展节点的方式提高吞吐量。
2024-11-07 17:59:19
1307
原创 redis 五种数据结构使用场景举例
有的redis,可以解脱出来,对于那些只有一组消费者的消息队列,使用redis可以非常轻松搞定,需要注意的是,redis的消息队列不是专业的消息队列,它没有非常多的高级特性(如消息优先级),没有ack保证,如果对消息的可靠性有着极高要求,那么它就不适合使用。但在并发量高时,每次都与redis交互,redis的资源也有限。redis的zrem方法是多线程多进程争抢任务的关键,它的返回值决定了当前实例有没有抢到任务,因为loop方法可能会被多个线程,多个进程调用,要通过zrem来决定唯一的属主。
2024-11-06 17:20:01
1214
原创 rabbitMQ RabbitTemplate 发送消息
当消息转发失败后就会触发ReturrnsCallback,会将消息返回给生产者,同时会返回与消息转发失败的相关信息(包含在参数returned内),可对此采取后续处理。消息发送确认机制:消息由producer发送后,确认其是否到达broker,又是否被exchange转发至对应queue的机制。前者的实现依靠ConfirmCallback机制,后者的实现依靠ReturrnsCallback机制。该机制分为两部分:producer---broker,exchange---queue。
2024-11-06 13:29:52
607
原创 @KafkaListener注解中containerFactory属性的作用
在这个示例中,我们定义了一个 ConcurrentKafkaListenerContainerFactory Bean,并在 @KafkaListener注解中通过 containerFactory 属性引用了它,从而为监听器提供了自定义的配置。:通过 containerFactory,你可以为 Kafka 消费者配置提供自定义设置,例2如消费者客户端的属性,如 bootstrap.servers、key.deserializer 等。:可以配置监听器以使用特定的线程池,这对于管理并发和响应时间非常关键。
2024-11-05 20:50:05
842
原创 like百分号加前面一定不走索引吗
正常来讲,我们都知道在mysql的like查询中,百分号加在关键词后面是走索引的,比如 select * like "张三%",而百分号在前面是不走索引的,比如 select * like "%张三",但也有例外。不一定,根据索引的底层原理,a字段是确定值,b字段才会走索引。但在刚才的sql中,由于a已经走了索引,c走不走索引无法通过key看出来,而只能通过extra中的信息来看,如果extra出现了filesort说明没有用到索引。like如果走了索引,或者范围查询后面的字段还走不走索引?
2024-11-05 16:41:31
598
原创 MySQL索引失效的场景
条件一:查询的结果集,超过了总行数 25%,优化器就会认为没有必要走索引了。条件二:回表查询可能会导致优化器认为不走索引的效率更高。回表即无法使用覆盖索引(查询的字段并不是全部在索引的列中),需要根据索引查询的字段(可能是主键,有待查证)再去表中去取数据。索引的失效场景:①联合索引不满足最左匹配原则(前提是不走优化器,优化器会优化这类sql语句)。即建立的索引与 where 语句中查询的条件顺序不一致。②索引列参与运算、索引列参使用了函数、类型隐式转换。③错误的 like 使用。例如%放在了字符串的前面,
2024-11-05 16:35:59
295
原创 【数据库】elasticsearch
但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。磁盘上的每个段都有一个相应的.del文件。在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。在创建索引时,可以指定主分片的数量,一旦索引创建完成,主分片的数量就不能再更改。副本分片与主分片分布在不同的节点上,当主分片所在的节点出现故障时,副本分片可以接管主分片的工作,确保服务的连续性。
2024-11-05 16:15:32
1066
原创 MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
2024-11-05 15:56:31
1250
原创 MySQL的四种事务隔离级别
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。比如A向B转账,不可能A扣了钱,B却没收到。1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
2024-11-04 11:06:13
286
原创 Nginx中 配置文件 nginx.conf 详解
proxy_max_temp_file_size :当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系;紧跟在 location 后面的是 location 模块监听的 url 地址,也就是 location 块的匹配规则,只有匹配正确的地址才会进入该 location 块,可以使用正则表达式进行匹配(~ 表示区分大小写,~* 表示不区分大小写);
2024-11-02 23:06:17
3171
原创 nginx的proxy_next_upstream使用中的一个坑
事后我使用openresty,写了些简单的hello world来测试nginx的这个proxy_next_upstream, 完全没有问题呀,可是线上的这个服务就是不行,真的想砸了电脑的心都有了。至于为什么我用openresty写的试验会成功,而线上的这个服务一直失败的原因,实则是因为我试验的接口是GET访问的,而线上的服务是POST访问的。今天线上系统出了点问题,机房的电信出口突然不通了,原本以为能自动切换的nginx配置,居然没有生效,导致了业务告警,手工紧急处理了才解决了。
2024-11-02 22:49:57
609
1
原创 Nginx 报错400 Request Header Or Cookie Too Large
2、你可以右击网上邻居-属性-找到你的本地连接-右击属性-常规选项卡里有个下拉此连接使用项目,选择INTERNETF协义(TCP/IP)下面点击属性选自动获得,最好查一下当地的DNS填进去,如果是局域网你可以在主DNS上填写你的网关地址,如192.168.1.1或192.168.0.1。//这里默认是4K,改大一点就好了。2、由request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起的。
2024-11-02 22:47:13
1517
原创 nginx上传文件超过限制大小、响应超时、反向代理请求超时等问题解决
定义从FastCGI服务器读取响应的超时时间。超时仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。如果FastCGI服务器在此时间内没有传输任何内容,则连接将关闭。设置向FastCGI服务器传输请求的超时时间。超时仅在两个连续的写入操作之间设置,而不是针对整个请求的传输。如果FastCGI服务器在此时间内未收到任何内容,则连接将关闭。超时仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。如果代理服务器在此时间内没有传输任何内容,则连接将关闭。定义与FastCGI服务器建立连接的超时时间。
2024-11-02 22:45:15
788
原创 springboot 整合 modbus4j
*** @Method* @Return*/@Getter@Setter@Slf4j//在线标识//异常时间//redis/*** 初始构造方法*//*** 发送消息* @return*/try {log.warn("PLC读取寄存器数据 ------> 位置:{},结果:{}", startOffset, null!= response?
2024-11-02 22:35:52
553
原创 RabbitMQ 存储机制
在将消息从 Delta 转移到 Q3 的过程中,是按照索引分段读取的,首先读取某一段,然后判断读取的消息的个数与 Delta 中消息的个数是否相等,如果相等,则可以判定此时 Delta 中已无消息,则直接将 Q2 和刚读取到的消息一并放入到 Q3 中;即使是持久化的消息,在被写入磁盘的同时也会在内存中驻留一份备份。惰性队列会将接收到的消息直接存入文件系统中,而不管是持久化的或者是非持久化的,这样可以减少了内存的消耗,但是会增加 I/O 的使用,如果消息是持久化的,那么这样的 I/O 操作不可避免,
2024-11-01 12:25:46
2342
1
原创 Java内存模型
(Java Memory Model,JMM)定义了Java程序中各种变量(尤其是共享变量)的访问规则和可见性,规定了不同线程之间如何通过内存进行交互。
2024-10-31 21:42:49
123
原创 HTTP 中 POST 提交数据的四种方式详解
以上四种方式都是常见的POST提交数据的方式,选择适当的方式取决于具体的需求和数据类型。在实际开发中,根据不同的场景和后端服务器的要求来选择合适的方式进行数据的提交和处理。HTTP协议中,POST方法用于向服务器提交数据。在POST请求中,可以使用多种方式将数据传递给服务器。
2024-10-31 19:53:46
901
原创 Nacos的整体架构
保护阈值存在的意义在于当服务A健康实例数/总实例数 < 保护阈值时,Nacos会把该服务所有的实例信息(健康的+不健康的)全部提供给消费者,消费者可能访问到不健康的实例,请求失败,但这样远比造成雪崩要好。如果所有的实例都是临时实例,当雪崩出现时,Nacos的阈值保护机制是不是就没有足够的(包含不健康实例)实例返回了,其实如果有部分实例是持久化实例,即便它们已经挂掉,状态为不健康,但当触发自我保护时,还是可以起到分流的作用。它的优点就是可以实时的监控到实例的健康状态,便于后续的告警和扩容等一系列处理。
2024-10-31 19:44:16
682
原创 Spring Cloud中RabbitMQ配置属性表
默认是true(与参数acknowledge-mode有关系)spring.rabbitmq.listener.simple.transaction-size: 指定一个事务处理的消息数量,最好是小于等于prefetch的数量.spring.rabbitmq.listener.simple.retry.max-interval: 最大重试时间间隔。spring.rabbitmq.listener.simple.retry.max-attempts: 最大重试次数。
2024-10-31 18:54:56
719
原创 org.springframework.context.ApplicationContextException: Failed to start bean ‘documentationPluginsB
一、报错信息。
2024-10-30 12:54:05
2010
原创 SpringBoot整合JWT
一. JWT简介1. 什么是JWT?JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证;应用场景如用户登录。JWT详细讲解请见 github:https://github.com/jwtk/jjwt2. 为什么使用JWT?
2024-10-30 12:41:03
3532
2
原创 springboot启动类的三大注解
SpringBootApplication:这是启动类上最重要的注解,它表示这个类是Spring Boot应用的入口。它包含了三个注解的组合:@Configuration、@EnableAutoConfiguration和@ComponentScan。@EnableAutoConfiguration:这个注解告诉Spring Boot根据项目的依赖配置来自动配置Spring应用。@RestController:这个注解表示该类是一个控制器类,并且其中的方法返回的是RESTful风格的数据。
2024-10-29 12:44:38
157
原创 MySQL事务及实现原理
原子性(Atomicity)事务中的所有操作要么全部成功,要么全部失败回滚。如果有一个操作失败,则整个事务都应该回滚到最初状态。例如,假设我们有一个银行转账系统。当我们从一个账户转账到另一个账户时,需要确保资金的安全和正确性。如果转账过程中任何一个步骤失败,例如金额不足或接收方账户不存在,则必须回滚到最初状态,确保事务的原子性。一致性(Consistency)在事务执行过程中,数据库必须始终保持一致状态。在事务执行的任何时刻,数据库必须满足一组事务的约束条件。例如,假设我们有一个订单系统。
2024-10-22 16:22:47
1228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人