- 博客(911)
- 资源 (57)
- 问答 (5)
- 收藏
- 关注

原创 知识学习之道
1、看懂了和能自己写下来不是一回事,看懂了未必能写下来,写下来和能和别人讲述清楚又不是一回事,能自己写下来未必能跟别人讲明白,能跟别人讲明白是最高境界;2、书读百遍,其意自现,无论是书籍还是技术文档,一定要多读,并且学而时习,每一次学习一般都会有新的理解。...
2020-10-06 10:36:53
347

原创 软件开发之道
1.务必仔仔细细看清该技术的技术文档,切忌概览;2.对于较难理解的,一定要多看,这个多看不仅仅指一遍遍的阅读技术文档或代码,而且也可以理解为不止某一天看,因为有些知识需要消化,当时看过之后未必能够消化掉,因为需要多看几次、多看几天,还有一个原因就是,在学习时有时会陷进去,而此时可以先放下,理清思绪,或者暂时先不理,等到有时间再处理;3.对于某些难以理解的算法,借助画图来理解是一种有效的辅助...
2019-09-10 10:37:46
613

原创 软件开发准则
数据库1.数据表、数据字段一定一定一定要加注释;2.严禁使用数据库保留字段(user、name、type就是保留字段),如果要使用,必须加上符号`,例如:`user`(英文状态下Esc下面的键即可打出符号`);Java1.接口中要打印前端传入的参数和返回的数据,方便查看日志、恢复数据。2.日志打印用日志工具类打印,不要用System.out.println()打印,因为在服务...
2019-05-08 14:58:47
703
原创 MinIO中的纠删码是什么
纠删码是一种数学编码方法,通过将原始数据分割成多个片段(称为数据块),并生成额外的校验块(也称为冗余块或奇偶校验块),以实现数据冗余和容错。它的核心思想是:在丢失部分数据块或校验块的情况下,仍然可以通过剩余的块重建原始数据。与副本机制的区别传统副本机制(如 Kafka 的多副本)直接复制完整数据,存储开销高(例如 3 副本需要 3 倍存储空间)。纠删码通过数学计算生成校验块,存储开销更低(例如 4+4 配置只需 2 倍空间),但需要计算开销来重建数据。
2025-04-04 19:32:28
352
原创 Apache BookKeeper Ledger 的底层存储机制解析
Journal:顺序写入事务日志,保证持久性,存储在 journalDirectory。:异步存储账本数据,分布在 ledgerDirectories 的 .log 文件中。索引:记录条目偏移量,存储在 indexDirectories。分布式:数据按 ensembleSize 分布在多个 Bookie,副本数由 writeQuorum 控制。这种设计结合了高吞吐量(顺序写入)、低延迟(异步存储)和容错性(多副本),非常适合分布式日志存储需求。
2025-04-03 18:17:28
651
原创 Kafka、RocketMQ、Pulsar对比
Pulsar 和 RocketMQ 更倾向于 mmap 的灵活性,Kafka 的 sendfile 在大吞吐量场景下更高效。:Pulsar 的分层架构提供了更高的灵活性和扩展性,而 Kafka 和 RocketMQ 的单体架构更简单但扩展性受限。:Pulsar 提供更灵活的消费模型,Kafka 强调高吞吐量的流式处理,RocketMQ 在事务支持上更强。:Pulsar 的分段和分层存储使其在扩展性和数据保留上优于 Kafka 和 RocketMQ。
2025-04-02 09:42:24
289
原创 Kafka和RocketMQ零拷贝对比
在 Apache RocketMQ 和 Apache Kafka 中,零拷贝(Zero Copy)是一种优化数据传输的技术,旨在减少数据在用户空间和内核空间之间的拷贝,从而提升性能。两者的实现方式有所不同,分别基于操作系统的不同特性。RocketMQ 主要使用 mmap(内存映射)结合 write 的方式实现零拷贝,适用于业务消息的小文件传输和持久化场景。两者都利用了操作系统的零拷贝特性,但设计目标不同:Kafka 追求吞吐量,RocketMQ 强调低延迟和可靠性。
2025-04-02 09:27:51
599
原创 Java基于sendfile实现零拷贝
在 Java 中实现基于 sendfile 的零拷贝功能,通常需要利用 NIO(New I/O)提供的 FileChannel 和 SocketChannel,通过 FileChannel.transferTo() 方法来完成。这个方法底层会尝试利用操作系统的 sendfile 系统调用(在支持的系统如 Linux 上),实现从文件到 Socket 的零拷贝传输,从而避免用户空间和内核空间之间的多次数据拷贝。
2025-04-02 08:15:04
257
原创 Calico如何实现固定ip
Calico 是 Kubernetes 中常用的 CNI(Container Network Interface)插件之一,它通过其 IPAM(IP Address Management,IP 地址管理)功能可以实现 Pod IP 的固定。Calico 固定 Pod IP 的核心机制依赖于其对 IP 地址的分配控制和注解(Annotation)的使用。
2025-04-02 08:06:43
721
原创 rocketmq零拷贝技术底层实现
零拷贝是指在数据传输过程中,尽量避免 CPU 在用户空间和内核空间之间、以及内核空间内部进行不必要的数据拷贝,从而减少上下文切换和 CPU 开销,提升 I/O 性能。RocketMQ 通过零拷贝技术优化了消息的存储和网络传输效率。RocketMQ 的零拷贝通过 mmap + write 实现,利用内存映射技术将磁盘文件映射到共享内存,避免了用户空间和内核空间之间的数据拷贝。结合 Java NIO 的 MappedByteBuffer,RocketMQ 在消息存储和传输中实现了高效的 I/O 操作。
2025-03-27 00:10:34
748
原创 kafka零拷贝技术的底层实现
sendfile 是一种操作系统提供的系统调用(system call),用于在两个文件描述符(file descriptor)之间高效传输数据。它最初由 Linux 内核引入(从 2.1 版本开始),旨在优化文件数据从磁盘到网络的传输过程。sendfile 的核心优势是零拷贝(zero-copy),即避免用户空间和内核空间之间的多次数据拷贝,从而提升性能。out_fd:目标文件描述符,通常是网络套接字(socket)。in_fd:源文件描述符,通常是磁盘文件。
2025-03-26 23:55:00
732
原创 docker启动kafka报错
在容器内不能使用localhost或127.0.0.1,因为这会连接容器内的zk,而容器内没有zk,所以要使用内网ip或让kafka和zk在同一个网络内。
2025-03-25 21:12:52
87
原创 开发一个go模块并在其他项目中引入
命令初始化 Go 模块,模块名一般使用 GitHub 仓库的完整路径,格式为。go项目引入其他模块的时候,模块必须打成tag才能引入。文件或者其他必要的代码文件。替换成你的 GitHub 用户名,注意,必须指定需要引入的具体包才行。在项目根目录下,使用。替换成你的项目名称。
2025-03-15 10:27:57
320
原创 如何将一个项目推送到gitlab
若本地项目还不是 Git 仓库,要先将其初始化为 Git 仓库。命令将 GitLab 上的项目仓库地址添加为本地仓库的远程仓库。命令把本地仓库的内容推送到远程仓库。初次推送时,要指定远程仓库名称(通常是。命令把项目中的文件添加到暂存区。,具体取决于你的配置),并且使用。添加文件到暂存区后,使用。)和本地分支名称(通常是。替换为实际的分支名称。
2025-03-11 23:11:01
294
原创 istio-proxy是什么时候设置的代理规则?
在所有主容器启动之前:根据 Kubernetes 的生命周期,Init 容器必须在所有主容器(包括业务容器和 istio-proxy)启动之前完成。早于 istio-proxy 运行:IPTables 规则设置完成后,istio-proxy 才会启动并开始监听流量。Istio 的 IPTables 规则是由 istio-init Init 容器在Pod 启动的 Init 阶段早于所有主容器(包括 istio-proxy 和业务容器)启动。在 istio-init 容器运行并完成后。
2025-03-04 18:20:44
781
原创 掌控 Istio Sidecar 启动顺序:深入解析 holdApplicationUntilProxyStarts
holdApplicationUntilProxyStarts: true 的原理是通过 Istio 的注入器,在 Pod 创建时动态修改配置,利用 Kubernetes 的容器生命周期管理,确保业务容器在 Sidecar 容器(istio-proxy)完全启动并就绪后再启动。其核心是注入一个隐式的依赖检查机制,可能基于健康端点或启动命令的包装。这种方法在 Istio 层面封装了复杂性,用户只需添加注解即可实现需求。
2025-03-04 18:16:56
355
原创 istio使用wasmplugin拉取镜像报错:cannot fetch Wasm module oci://10.120.1.233:8443/service-mesh/wasmdemo:v1.0?
出现这个问题是因为harbor的证书无法认证导致的。
2025-02-24 09:19:57
190
原创 Caused by: java.lang.IllegalArgumentException: Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘
下面配置中,使用exclude = {DataSourceAutoConfiguration.class}排除了数据库自动配置,因此启动会报错。
2025-02-15 09:49:01
196
原创 go oom没有日志如何排查
查看 Docker 容器的退出代码如果容器因为 OOM 被杀死,退出代码会是137(通常由SIGKILL信号引起)。你可以查看容器的退出代码来确认是否是由于 OOM 导致的。
2025-01-12 10:43:50
201
原创 docker run一个镜像如何指定最大可使用的内存大小、cpu大小
-memory或-m:限制容器的最大内存使用。--cpus:限制容器的最大 CPU 使用数量。:设置容器最大可用的交换空间(swap)。:设置容器的 CPU 权重,控制容器在 CPU 资源竞争中的优先级。和:更精细地控制容器的 CPU 使用时间。这些参数可以帮助你确保容器不会过度消耗系统资源,影响其他进程的运行。
2025-01-12 10:04:13
1011
原创 Go oom分析(一)——使用pprof线上分析
确保在程序中加入以下代码,不一定要使用init方法,也可以在任意位置添加如下代码,在需要的时候运行即可。是 Go 自带的性能分析工具,用于检查内存使用、CPU 时间和 Goroutines 数量。如果数量持续增加,可能存在 Goroutine 泄漏问题。,查看哪些函数分配了最多的内存。
2025-01-11 15:22:34
710
原创 istio-proxy oom问题排查步骤
cluster数量太多会导致istio-proxy占用比较大的内存,此时需检查是否dr资源的host设置有配置为*若采样率设置过高,在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。检查telemetries资源中的采样率。检查iop中的采样率,
2025-01-10 17:52:43
441
原创 时间复杂度o(N)是什么意思?
O(N)表示算法的运行时间随输入规模N的增大而线性增长。通常用于描述需要逐个访问、处理每个元素的算法(如遍历数组、链表等)。这种时间复杂度的算法在大规模数据时运行较慢,但比O(N^2)或更高的复杂度算法更具可扩展性。
2025-01-04 11:22:00
534
FiddlerSetup.zip
2019-07-16
OBS-Studio
2018-12-22
kibana-6.4.2-x86_64
2018-10-22
kibana-6.4.2-windows-x86_64
2018-10-22
kibana-6.4.2-linux-x86_64
2018-10-22
centos7修改语言环境支持中文总失败
2018-03-24
struts2 Session生命周期
2017-12-14
php创建类的方法 php菜鸟一枚 请问这行代码是什么意思?
2017-05-01
Android中如何无损保存BitMap文件?
2017-03-10
Java如何调用打印机打印本地文档
2016-09-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人