- 博客(21)
- 收藏
- 关注
原创 MCP 热门应用场景
MCP (Model Context Protocol,模型上下文协议) 是一个很棒的点子,是由 Anthropic 在 2024 年底推出的一种开放协议,用于标准化应用程序向大语言模型提供上下文的方式。可以将 MCP Server 想象为是LLM的扩展坞,那么 MCP 协议成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化方式。
2025-04-09 20:33:08
222
原创 Apache BookKeeper核心技术解析:高可用读写协议、类结构与容错设计
在分布式系统中,数据的高可用性与一致性是核心挑战。Apache BookKeeper作为高性能、强一致的分布式日志存储系统,通过独特的读写协议、灵活的类结构设计以及高效的容错机制,为这一问题提供了可靠的解决方案。通过解析这些设计细节,读者将深入理解BookKeeper如何平衡性能、一致性与容错能力,为构建可靠分布式存储系统提供实践参考。
2025-03-02 23:28:15
698
原创 Pulsar 元数据服务设计
在分布式系统中,元数据如同导航地图,指引着各个组件准确无误地工作。Pulsar 作为一款采用存算分离架构的分布式消息队列,其核心组件包括负责存储服务的 BookKeeper 和承担计算任务的 Broker。为了确保这些组件的高效协同运作,一个稳定可靠的元数据存储服务显得尤为重要。本文将深入探讨 Pulsar 元数据服务的设计理念与实现细节。
2025-02-16 17:15:53
1012
原创 Pulsar 集群级故障转移
在灾难恢复或计划迁移的场景下,我们需要把消息队列的流量平滑的切换到另一个集群。但是由于消息队列的客户端都是长连接,不能按照我们熟知的切域名的方式简单实现,需要保证切换过程平滑,以及切换过程中,数据不丢不重,据了解开源版本的Kafka目前没有提供这样的功能,Pulsar 支持故障转移功能,需要多端配合,可以按照以下步骤实现。
2025-02-15 10:56:24
421
原创 Kafka 的选盘策略
Kafka 在创建 topic 选择磁盘时,会选择分区数最少的磁盘,后续不会再移动分区。也不会根据大小或I/ O速率进行平衡。创建topic的过程,涉及到了几个核心的组件和流程:分区状态机、副本状态机、LeaderAndIsrRequest 请求
2024-12-08 23:31:43
351
原创 企业级 Zookeeper 集群监控方案
Kafka 和 Pulsar 都使用了 Zookeeper 做元数据管理服务。这些组件都提供了服务本身的可视化监控,但是对 Zookeeper 的监控,并没有受到应有的重视。这篇文章分享一种实现 Zookeeper 集群监控的方法,期望能起到抛砖引玉的效果。
2024-11-24 18:30:38
663
原创 bookKeeper recover 时部分 ledger 无法恢复
下线1个 bookie 节点:t6-test-pulsar-bookie-4.t6-test-pulsar-bookie.t6.svc.cluster.local:3181。broker 配置如下所示,客户端写成功1个副本就返回。过了很久,还有部分 ledger 未恢复且无进展。autorecovery 进程一直在运行。Pulsar 版本:3.0.6。Ledger 元数据如下。
2024-11-10 09:41:13
299
1
原创 Pulsar 核心组件原理
Pulsar 提供了一个高效、可扩展且可靠的分布式消息传递平台,适用于大规模的现代应用环境。它通过独特的设计和组件优化,解决了计算和存储分离的优势,同时也面临着特定环境下的实施挑战。
2024-07-21 18:09:33
858
原创 SQL面试题复盘
这样是不对的,结果是只有account列取的最小,其他列取的不是对应account所在行的记录,为每个user_name第一条记录。看到这个题目,细心的同学可能已经发现,是按客户分组取金额最小。MYSQL的group by是不稳定的,5.6和5.7版本执行结果有差别——
2023-06-16 11:00:15
98
原创 MySQL基础
依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL。追求大致的平衡,导致树的高度较高,在内存中性能高。这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。区别:聚簇索引叶子节点保存数据的值,非聚簇索引叶子节点保存指向数据的指针。AVL树:自平衡二叉树,增删元素时,需要多次旋转,性能差。B+树:只有叶子节点存放数据,相邻叶子节点有连接。如果索引包含所有要查询字段的值,则叫覆盖索引。
2023-06-06 16:24:49
77
原创 Java后端常见面试题
Java后端常见面试题线程池SpringMQMySQLRedis线程池线程池参数如何设置?线程编排框架解决了什么问题?SpringBean的生命周期?SpringBoot默认MySQL连接池?MQRabbitMQ和Kafka的区别?Kafka如何实现零拷贝?MySQLMySQL有哪几种日志文件?(binlog、redolog、undolog)MySQL Explain执行结果中,type结果的枚举。RedisRedis分布式锁实现方式持久化的方式
2023-05-26 08:55:52
630
1
原创 Java并发
corePoolSize: 核心线程数;如果不设置AllowCoreThreadTimeOut=true,则不会被销毁,即使处于闲置状态maximumPoolSize: 最大线程数;= 核心线程数 + 非核心线程数keepAliveTime, unit: 非核心线程的闲置后的生命周期BlockingQueue: 阻塞队列;线程池提交任务时先会创建核心线程,如果核心线程不够了,则会将任务塞到队列中;如果队列也满了,则开始创建非核心线程处理任务;
2023-05-24 15:42:18
98
1
原创 Java基础
参考:6个数字类型(byte 8,short 16,int 32,float 32,double 64,long 64),1个字符类型(char 16),1个bool类型。参考:一个类可以实现多个接口,只能继承一个类。接口中成员变量是public statistic final的,抽象类中的成员变量可以被子类覆盖重写。接口是对类行为约束,实现了某个接口就有了对应的行为,抽象类主要用于代码复用,强调所属。Java的八种基本数据类型,每个占多少个字节?Java 中抽象类和接口的区别?Java 的三大特性。
2023-05-22 23:21:19
80
1
原创 CompletableFuture线程编排
asyncTool作者总结的线程编排场景假设要编排的任务都是带出参入参的,并且耗时都是1S,从taskA到taskH,每个都是类似下面的代码1) ABC串行输出:2)ABC并行结果3)A结束BC并行结果4)BC都执行完毕后执行AA依赖BC的执行结果,且A依赖的任务数量不能超过2个,超过2个必须得用allOf当A的前置依赖超过2个时,用此方法5)BC任意一个执行完后执行A和上面4)一样,先来只有2个任务,且依赖参数传递的结果:超过2个任务的情况结果:6)图6中复杂场景A先
2023-04-18 00:09:55
356
原创 Synchronized实现原理
Synchronized用的锁,每个对象天生都带着一个对象监视器,存在Java对象头中的Mark Word字段,Monitor是在操作系统底层实现的,本质上依赖操作系统的Metlx Lock,Mutelx Lock的切换需要从用户态到内核态,非常耗时。申明方法和代码块,效果不一样锁对象:具体对象、类对象。
2023-04-09 16:24:52
109
原创 Spring IOC之Bean作用域探究
singleton : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。prototype : 每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同的 Bean 实例。request (仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
2023-04-09 16:16:39
87
原创 分布式集群场景化方案
Cron表达式复习(1):表示匹配该域的任意值。假如在Minutes域使用, 即表示每分钟都会触发事件。(2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。(3)-:表示范围。例如在Minutes域使用5-
2022-04-05 23:19:52
1393
原创 Tomcat Web服务器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Tomcat Web服务器前言工作中遇到的问题分析总结前言提示:这里可以添加本文要记录的大概内容:tomcat的简单介绍,自己实现一个简易的tomcat。Tomcat Coyote ⽀持的 IO模型与协议工作中遇到的问题分析1、 service中定义了静态成员变量localdate,期望每次调用service时重新new一个对象,结果只实例化了一次。联想到单例模式也有用静态关键词修饰的,顺便探究一下service类的声明.
2022-03-29 23:22:34
1081
原创 ConcurrentHashMap源码
ConcurrentHashMap源码前言一、基础知识1.Java基础数据类型、字节、位2、transient关键字二、源码方法总结前言作为Java集合中线程安全的Map结构,本篇文章主要从源码出发,探究相比HashMap,ConcurrentHashMap是如何保证线程安全的。一、基础知识1.Java基础数据类型、字节、位在源码中出现以下代码: static final int HASH_BITS = 0x7fffffff; // usable bits of normal node
2022-02-20 18:35:14
348
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人