
中间件
文章平均质量分 59
中间件
抓手
这个作者很懒,什么都没留下…
展开
-
Spring Cloud ReactorServiceInstanceLoadBalancer 自定义负载均衡
然后在启动类加上注解,多个微服务在数组继续添加@LoadBalancerClient。原创 2025-03-28 16:55:20 · 359 阅读 · 0 评论 -
使用Hystrix实现请求合并,降低服务器并发压力
batchMethod,请求合并方法scope,请求合并方式,REQUEST:请求范围,GLOBAL:全局范围,默认com.netflix.hystrix.HystrixCollapser.Scope.GLOBALMAX_REQUESTS_IN_BATCH 最大请求合并数量,默认Integer.MAX_VALUETIMER_DELAY_IN_MILLISECONDS 请求合并间隔毫秒值,默认10ms注意,达到请求合并间隔毫秒值,没达到最大请求合并数量时,也会进行请求合并原创 2023-10-26 18:31:54 · 649 阅读 · 0 评论 -
Pulsar订阅模式类型SubscriptionType
独占模式(Exclusive)只允许有一个Consumer加入Subscription ,有其他Consumer试图订阅都会报错,如果该Consumer出现故障了就会停止消费。Pulsar默认是独占模式(Exclusive)。共享模式(Shared)允许多个Consumer加入同一个Subscription,如果Consumer连接异常,就由其他Consumer来接受消息。灾备模式(Failover)当存在多个Consumer时,按字典顺序排序,第一个Consumer被初始化为唯一接受消息的原创 2022-10-24 15:29:03 · 1285 阅读 · 0 评论 -
Spring Boot整合Pulsar生产和消费消息 简单示例代码
@PostConstruct public void initPulsarProducer() throws PulsarClientException { // 构造Pulsar client PulsarClient client = PulsarClient.builder() .serviceUrl(url) .build(); // 创建生产者producer原创 2022-10-11 15:18:43 · 1928 阅读 · 1 评论 -
微服务注册中心的注册表如何更好的防止读写并发冲突
Eureka通过注册表的多级缓存结构防止读写并发冲突;Nacos通过CopyOnWrite机制解决读写并发冲突;Zookeeper使用分布式共享锁实现分布式协调服务解决读写并发冲突:原创 2022-08-19 11:33:42 · 757 阅读 · 0 评论 -
RocketMQ NameServer如何保证数据最终一致
NameServer是RocketMQ的命名服务(路由中心、注册中心),提供更新和发现Broker服务的功能,是几乎无状态节点,可集群部署。NameServer节点之间互不通信,路由变化也不会马上通知客户端(生产者和消费者)。既然NameServer的节点之间互不通信,变更也不发送通知,那又是如何保证数据最终一致的呢?.........原创 2022-08-18 16:26:37 · 1555 阅读 · 0 评论 -
Nacos 概念介绍 配置模型
命名空间用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之⼀是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如数据库配置、限流阈值、降级开关)隔离等。如果在没有指定 Namespace 的情况下,默认使用 public 命名空间。...原创 2022-08-17 17:22:47 · 422 阅读 · 0 评论 -
Spring Cloud Hystrix 线程池隔离参数配置
hystrix: command: default: execution: isolation: thread: # 请求超时时间 timeoutInMilliseconds: 30000 circuitBreaker: # 断路器请求量阈值,在时间窗口内达到阈值进行短路,默认20个 requestVolumeThreshold: 20 #原创 2022-07-25 18:25:56 · 1911 阅读 · 0 评论 -
规则引擎Drools的使用
package demoimport com.xzh.drools.entity.DemoEntityrule "demo" when $demo:DemoEntity(name contains "小明") then $demo.setRemark("哈喽" + $demo.getName()); System.out.println("规则执行 ---> " + $demo.getRemark());end...原创 2022-07-25 14:23:54 · 886 阅读 · 0 评论 -
Netty知识点总结
Netty是一个NIO客户端服务器框架,可快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。“快速简便”并不意味着最终的应用程序将遭受可维护性或性能问题的困扰。Netty经过精心设计,结合了许多协议(例如FTP,SMTP,HTTP以及各种基于二进制和文本的旧式协议)的实施经验。结果,Netty成功地找到了一种无需妥协即可轻松实现开发,性能,稳定性和灵活性的方法。......转载 2022-07-22 17:57:29 · 318 阅读 · 0 评论 -
Redis数据丢失问题
DBA/RD误操作执行flushall/flushdb这类命令。过期键被删除。淘汰策略删除数据。因客户端缓冲区内存使用过大,导致大量键被LRU淘汰。主库故障后自动重启,可能导致数据丢失。网络分区的问题,可能导致短时间的写入数据丢失。异步复制导致的数据丢失。脑裂导致的数据丢失。...原创 2022-07-22 14:21:02 · 5339 阅读 · 0 评论 -
RocketMQ Topic/Group/Tags介绍
Topic是RocketMQ里对消息的一级归类。RocketMQ支持发布和订阅模型,通过Topic完成消息的发布和订阅。消息生产者将消息发送到Topic中,而消息消费者则通过订阅该Topic来消费消息。原创 2022-07-20 10:08:40 · 9631 阅读 · 0 评论 -
最新微服务组件选型
注册中心/配置中心/负载均衡/服务调用/服务容错/服务网关/链路追踪/消息队列原创 2022-07-19 09:55:54 · 1045 阅读 · 0 评论 -
Nacos注册表是怎么解决读写并发冲突的
Nacos在更新实例列表的时候,采用CopyOnWrite思想,将传入的实例列表List ips与旧的实例列表比对,分别得出需要添加、更新、和删除的实例,然后做一些相关的操作,得到最终新实例列表并替换原来的旧实例列表。.........原创 2022-07-13 14:33:53 · 1296 阅读 · 1 评论 -
Nacos配置文件获取不到 动态刷新失效问题解决
注意是基于什么环境使用的Nacos配置中心,在Spring 、Spring Boot 、SpringCloud 下的使用方式略有区别。原创 2022-07-12 17:08:33 · 5518 阅读 · 0 评论 -
Nacos临时实例和永久实例的区别以及健康检查机制
临时实例只是临时存在于注册中心中,会在服务下线或不可用时被注册中心剔除,临时实例会与注册中心保持心跳,注册中心会在⼀段时间没有收到来自客户端的心跳后会将实例设置为不健康,然后在⼀段时间后进行剔除。永久实例在被删除之前会永久的存在于注册中心,且有可能并不知道注册中心存在,不会主动向注册中心上报心跳,那么这个时候就需要注册中心主动进行探活。...原创 2022-07-08 11:00:36 · 7890 阅读 · 4 评论 -
Zookeeper、Eureka、Consul、Nacos对比
Zookeeper 是⼀款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长⼀段时间里,它是国人在提起 RPC 服务注册中心时心里想到的唯⼀选择。Eureka 借着微服务概念的流行,与 SpringCloud 生态的深度结合,也获取了大量的用户。Consul 在设计上把很多分布式服务治理上要用到的功能都包含在内,可以支持服务注册、健康检查、配置管理、Service Mesh 等。Nacos 携带着阿里巴巴大规模服务生产经验,试图在服务注册和配置管理这个市场上,提供给用户⼀个新的选择。...原创 2022-07-07 17:59:48 · 3824 阅读 · 1 评论 -
Nacos一致性协议 CP/AP/JRaft/Distro协议
Nacos因为要支持多种服务类型的注册,并能够具有机房容灾、集群扩展等必不可少的能力,在单个集群中同时运行CP协议和AP协议两种协议。在决定使用CP还是AP⼀致性时,使用⼀个代理,通过可控制的规则进行转发。目前的⼀致性协议实现,⼀个是基于Raft的CP⼀致性,⼀个是基于自研协议Distro的AP一致性。...原创 2022-07-04 09:43:16 · 4508 阅读 · 0 评论 -
Raft 协议
初始状态,所有节点都是跟随者。当集群中没有领导者时,等待超时时间最小的节点会因为没有等到领导者心跳信息,发生超时。超时自荐,此时该节点就会增加自己的任期编号,并推举自己为候选人,先给自己投一票,然后向其他节点发送请求投票RPC消息,请它们选举自己为领导者。选举投票,其他节点接受到候选人的RPC消息时,并且在编号为1的任期内,没有投过票,那么就把选票投给该候选人,然后增加自己的任期编号。新领导产生,候选人在选举超时时间内赢得了大多数的选票,那么它就会成为本届任期内新的领导者。正常状态,领导者将周期性原创 2022-06-30 16:51:17 · 443 阅读 · 0 评论 -
k8s Docker使用nacos配置中心
3.k8s&Docker配置Dockerfile run.shdevops-config.yml4.项目配置文件bootstrap.yml5.Jenkins配置原创 2022-06-23 16:49:22 · 1541 阅读 · 0 评论 -
Kafka实现精确一次(exactly once)发送消息的原理
语义介绍At-least-once(最少一次):如果生产者从Kafka broker接收到一个确认(ack)并且ack = all,这意味着消息已经被写入Kafka topic一次。然而,如果生产者ack超时或收到一个错误,它可能会重试发送消息,假设消息没有写入Kafka topic,如果broker在它发送ack之前失败,但在消息被成功写入Kafka topic后,此重试将导致消息被写入两次,因此将不止一次地传递给最终使用者。这种方法可能会导致消息重复和错误的结果。At-most-once(最多一原创 2021-11-22 13:56:33 · 4729 阅读 · 3 评论 -
Redis高可用架构设计以及常见问题分析
Redis的使用非常简单,只需要安装配置一下就能轻松上线,短时间不会出现什么问题,但是随着时间推移,Redis实例增多,客户端调用繁杂,真正的问题开始出现,整个关系就变得非常乱。Redis从使用角度来讲是需要像应用服务一样去治理的。下面先看一段日常开发过程中常见的对话:开发:Redis为啥不能访问了?运维:刚刚服务器内存坏了,服务器自动重启了。开发:为什么Redis延迟这么久?运维:大哥,不要在Zset里面放几万条数据,插入排序的后果很严重啊!开发:写进去的key呢,为什么不见了?运原创 2021-07-29 11:57:02 · 2438 阅读 · 13 评论 -
ZooKeeper是强一致性的吗
ZooKeeper是弱一致性,能保证最终一致性。但是也可以支持强一致性,需要通过sync()方法与Leader节点同步后可保证当前节点数据与Leader一致。原创 2021-05-12 16:21:59 · 1662 阅读 · 4 评论 -
Kafka两种配置文件方式
1.yml配置文件(简单配置)spring: kafka: bootstrap-servers: ip:端口 consumer: group-id: group-test enable-auto-commit: true auto-commit-interval: 1000ms auto-offset-reset: latest key-deserializer: org.apache.kafka.common.seria原创 2021-05-10 17:27:02 · 5348 阅读 · 9 评论 -
Redis事务机制
Redis的事务很鸡肋,并不能保证原子性,也不支持回滚。Redis使用MULTI、EXEC、DISCARD、WATCH命令来实现事务功能。Redis事务是一组命令的集合,事务中的所有命令都被序列化加入队列并按顺序执行,事务执行期间不会被中断。使用Redis事务三个步骤:开始事务(MULTI) 命令入队 执行事务(EXEC)/ 撤销事务(DISCARD)WATCH通过CAS实现,用来监视某个key,如果监视的key被其他客户端修改,EXEC将会放弃执行事务队列中的所有命令。WATCH只能在.原创 2021-04-19 08:53:13 · 616 阅读 · 6 评论 -
Redisson分布式锁的原理 锁续期 看门狗 死锁问题
使用Redis锁,会有业务未执行完,锁过期的问题,可以采用Redisson锁解决。Redisson锁有两种模式1.固定有效期的锁:超过有效期leaseTime后,自动释放锁。 public void lock(long leaseTime, TimeUnit unit) { try { this.lockInterruptibly(leaseTime, unit); } catch (InterruptedException var原创 2021-04-08 13:42:30 · 7351 阅读 · 6 评论 -
Eureka实现原理和自我保护机制简单介绍
Eureka是在Java语言上,基于Restful API开发的服务注册与发现组件,由Netflix开源。Eureka遵循AP原则。目前Eureka仅开源到1.X版本,2.X版本已经宣布闭源。Eureka采用的是Server/Client的模式进行设计:Server扮演了服务注册中心的角色,为Client提供服务注册和发现的功能,维护着注册到自身的Client的相关信息,同时提供接口给Client获取到注册表中其他服务的信息。 Client将有关自己的服务的信息通过一定的方式登记到Server上,原创 2021-03-31 15:30:28 · 620 阅读 · 0 评论 -
Consul的基本概念和实现原理
Consul是由HashiCorp基于Go语言开发的,用于微服务下的服务治理,采用Raft算法保证服务的一致性,采用主从模式的设计可横向扩展,集群间通过RPC调用(HTTP和DNS)。Consul主要特点:服务发现、健康检查、Key/Value存储、安全服务通信、多数据中心。Consul的应用场景:服务发现、服务隔离、服务配置。...原创 2021-03-31 11:55:43 · 3181 阅读 · 13 评论 -
Redis的对象和数据结构
Redis数据库的键值对(key-value)都是由对象(object)组成。对象总共有5种:字符串对象(string) 列表对象(list):有序链表,value能重复,可通过下标取元素,可在头/尾进行插入或删除。使用场景: 哈希对象(hash):HashMap 集合对象(set):不重复、无序、不能通过下标取元素。 有序集合对象(zset)而对象则是由6种主要数据结构创建:简单动态字符串(SDS):相比C字符串,SDS做了优化:直接获取字符串重读、避免缓冲区溢出、空间预分配。 链原创 2021-03-29 23:32:01 · 459 阅读 · 0 评论 -
RocketMQ事务消息
RocketMQ4.3.0开始支持事务消息RocketMQ事务消息的实现原理基于两阶段提交和定时事务状态回查来决定消息最终是提交还是回滚。整个流程:1.生产者开启本地事务,在事务内完成相关业务数据落库,同步发送prepare消息到Broker。...原创 2021-03-24 22:35:53 · 333 阅读 · 0 评论 -
ZooKeeper的ZAB协议原理
ZAB(Zookeeper Atomic Broadcast)是为ZooKeeper设计的崩溃恢复原子广播协议,也称为zk原子广播协议。它保证ZooKeeper集群数据的一致性和命令的全局有序性。集群角色Leader:一个集群同一时间只会有一个Leader,它会发起并维护与各Follower及Observer间的心跳。所有的写事务必须要通过Leader完成再由Leader将写操作广播给其它服务器。 Follower:一个集群可同时存在多个Follower,它会响应Leader的心跳。Followe原创 2021-03-23 18:26:08 · 445 阅读 · 1 评论 -
ZooKeeper的基本概念
用途ZooKeeper主要服务于分布式系统,提供分布式数据一致性解决方案。可以用ZooKeeper来做:注册中心、分布式锁、命名服务、集群管理、负载均衡、配置管理等。Hadoop、HBase、Dubbo都有用ZooKeeper。数据结构Zookeeper提供的命名空间与标准的文件系统非常类似,一个名称就是一个由“/”分割的路径序列,其层级结构为:...原创 2021-03-22 14:10:41 · 417 阅读 · 1 评论 -
rpc调用过程原理分析以及Dubbo、Feign调用过程
RPC简介RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC调用流程图客户端方法:服务调用方所调用的接口客户端代理:将接口封装成代理对象,并序列化请求参数、反序列化响应结果,使用远程传输协议调用服务端,(例如:Socket、Netty、RMI、HTTP等)。远程网络调用:采用远程传输协议进行通信实现数据的传输。服务端代理:服务端收到远程请求后,将二进制的数据反序列化为请求对象,然后调用本地接口返回响应数据并序列化结果发送出去。服务端方法:..原创 2021-03-11 14:16:15 · 1317 阅读 · 4 评论 -
Netty高性能的原因
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。Netty的应用:Dubbo、RocketMQ、HadoopNetty的性能为什么高呢?异步非阻塞通信 零拷贝 内存池 高效的reactor线程模型 无锁化的串行设计概念 高效的并发编程 高性能的序列化框架 灵活的TCP参数配.原创 2021-03-09 14:58:29 · 469 阅读 · 1 评论 -
RocketMQ高并发高吞吐量的原理
路由中心(NameServer)NameServer通过集群部署,为追求简单高效NameServer彼此之间互不通信。NameServer与每台Broker服务器保持长连接,并间隔30s检测Broker是否存活,如果检测到Broker宕机,则从路由注册表中将其移除。但是路由变化不会马上通知消息生产者,降低NameServer实现的复杂性,在消息发送端提供容错机制来保证消息发送的高可用性。消息生产者(Producer)消息生产者集群部署。本地缓存topic路由信息,如果本地路由表中未缓存t原创 2021-03-04 14:47:52 · 3787 阅读 · 1 评论 -
redis知识点总结
1、基本类型及底层实现1.1、String用途:适用于简单key-value存储、setnx key value实现分布式锁、计数器(原子性)、分布式全局唯一ID。底层:C语言中String用char[]数组表示,源码中用SDS(simple dynamic string)封装char[],这是是Redis存储的最小单元,一个SDS最大可以存储512M信息。struct sdshdr{ unsigned int len; // 标记char[]的长度 unsigned int fre转载 2021-03-02 15:51:57 · 371 阅读 · 1 评论 -
Redis的高级用法 应用场景
1. 记录帖子的点赞数、评论数和点击数 (hash)。2. 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。3. 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。4. 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。5. 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。6. 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。7. 如果帖子 ID 是整数自增的,可以使用原创 2021-01-04 11:21:00 · 383 阅读 · 0 评论 -
Hystrix的执行流程和原理
Hystrix是Netflix开源的一款容错框架。Hystrix[hɪst'rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。Hystrix工作原理图(来源:https://github.com/Netflix/Hystrix/wiki/How-it-Works)说明:1.构建一个HystrixCommand或者HystrixObservableCommand对象,将请求包装到Command对象中。2.执行命令。3.判断当前请求是否有缓存,如果在缓存中就直接返.原创 2020-10-29 17:14:38 · 1107 阅读 · 2 评论 -
客户端负载均衡-Ribbon
Ribbon 是由 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 的客户端的行为。Ribbon 属于客户端负载均衡。为 Ribbon 配置服务提供者地址后,Ribbon 就可基于某种负载均衡算法,自动的帮助服务消费者进行请求。同时 Ribbon 默认为我们提供了很多负载均衡算法,例如:轮询、随机算法等。选择服务实例的过程:各组件介绍:ILoadBalancer:定义一系列的操作接口,比如选择服务实例。public interface ILoadBalanc.原创 2020-10-28 18:02:50 · 472 阅读 · 1 评论 -
新一代Java模板引擎Beetl使用
pom <!-- beetl --> <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl</artifactId> <version>2.9.10</version> </dependency>工具类.原创 2020-07-15 16:26:34 · 2427 阅读 · 2 评论