- 博客(26)
- 资源 (7)
- 收藏
- 关注
原创 Loki分布式存储及过期策略实现
在项目启动初期,考虑到 ELK 的资源消耗较重,我们选用了更为轻量的 Loki 作为分布式日志存储方案。Loki 支持使用 filesystem 本地文件系统进行存储,也可对接第三方对象存储服务,如亚马逊 S3、谷歌 GCS 以及阿里云 OSS 等。Loki Memberlist - Ring 采用类似 Gossip 协议的去中心化集群状态管理机制,用以替代 Consul 或 etcd 这类传统的 KV 存储,实现服务发现与组件状态同步。现在配置任意一个节点,另外一个节点都可以访问到数据。
2025-03-18 20:48:21
169
原创 使用Spring AI调用AI模型
Spring AI是Spring推出的用于快速集成AI功能。该项目从著名的Python项目(如LangChain和LlamaIndex)中汲取灵感,经过多个版本迭代,逐渐集成了OpenAI、Google、Amazon、Baidu等大语言模型平台。
2025-03-05 20:46:51
621
原创 Go语言扩展包x/sync使用指南
singleflight 是一个用于防止重复函数调用的机制,确保对于同一个键(key),在同一时间内只有一个函数执行,其他请求会等待该函数执行完成并共享结果。这可以大量减少对比如访问数据库操作次数,减轻数据库压力提高性能。
2025-02-14 21:00:48
843
原创 Go语言sync包使用指南
本文围绕 Go 语言中 sync 包展开,对其各类同步原语的使用方法进行介绍。 sync.Mutex Mutex用于实现互斥锁,用于保护多个 goroutine 并发访问的共享资源。它可以防止数据竞争
2025-02-11 20:38:53
890
原创 Kubernetes 使用自定义资源(CRD)扩展API
K8s CRD 即 Kubernetes CustomResourceDefinition,是 Kubernetes 提供的一种扩展机制,允许用户在 Kubernetes 集群中定义和使用自定义的资源类型。通过定义 CRD,用户可以在 Kubernetes 集群中创建、读取、更新和删除自定义资源对象,就像使用原生的 Pod、Service 等资源一样。本文主要介绍如何使用kubebuilder快速创建自定义资源类型。
2025-01-09 20:59:17
455
原创 基于 kubeadm 安装 Kubernetes 集群的完整步骤
执行完kubeadmin init后,配置kubectl执行环境,根据提示执行命令,将/etc/kubernetes/admin.conf复制到$HOME/.kube/config下。要使k8s 容器间能够相互通信,还需要安装网络插件,Flannel 是 Kubernetes(K8s)中常用的网络插件之一,主要用于提供容器间的网络连接。使用以下内容在指定的config_path路径下创建docker.io/hosts.toml文件,创建后的文件路径为。如果不存在,您可以在默认配置文件中添加以下配置。
2024-12-23 10:11:21
821
原创 MQTT知识要点
MQTT (Message Queuing Telemetry Transport) 是一种轻量级的发布/订阅消息协议,专为低带宽环境M2M而设计。是物联网(IoT)最常用的消息传递协议。
2024-12-09 20:14:20
1188
1
原创 Java 垃圾回收机制(GC)概览
Java垃圾收集、堆和运行时编译器默认选择jdk1.9开始,默认使用G1收集器,GC Threads的最大数量受堆大小和可用CPU资源限制初始堆大小为物理内存的1/64最大堆大小为物理内存的1/4分层编译器,同时使用C1和C2JVM 垃圾收集器可以为配置优先满足两个目标之一:最大暂停时间(maximum pause-time) 和应用程序吞吐量(application throughput)
2024-11-15 20:02:50
1112
原创 探究Nacos:实例权重变更为何延迟生效
最近在通过Jekins实现无中断发布时,发现调整Nacos注册中心服务实例的权重1 -> 0时,客户端需要等待30s以上才不会调到权重为0的服务。
2024-11-05 16:21:18
753
原创 MYSQL优化知识点
索引合并访问方法检索多个range扫描的行并将其结果合并为一个。索引合并只合并单个表的索引扫描,而不合并跨多个表的扫描。可以使用索引合并的示例。
2024-10-04 09:10:04
1042
原创 go channel的使用
channel是goroutine之间通信的管道,可以将值从一个goroutine发送到channel,另一个goroutine从channel接收到这些值。
2024-09-29 20:56:50
792
原创 Redis常见知识点
Redis字符串存储字节序列,包括文本、序列化对象和二进制数组。默认情况下 单个Redis字符串最大值不能超过512m大多数字符串操作都是 O(1),这意味着它们非常高效。但是,请谨慎使用SUBSTR、GETRANGE和SETRANGE命令,因为它们的复杂度可能为 O(n)。这些随机访问字符串命令在处理大型字符串时可能会导致性能问题。
2024-09-24 20:39:49
1710
原创 etcd入门指南:分布式事务、分布式锁及核心API详解
etcd client v3使用gRPC进行远程过程调用,定义了交互过程中protobuf数据结构。
2024-09-14 20:59:36
1448
原创 Spring WebFlux实践与源码解析
如下来自官网Spring MVC和Spring WebFlux技术栈的区别。可以看到Spring MVC主要是基于Servlet API使用同步阻塞IO架构,每来一个请求都需要启动一个线程进行处理。这种架构对于大量I/O密集型的请求,需要同时启动大量的线程来处理请求,消耗更多的资源。而Spring WebFlux使用的是全流程的异步非阻塞的架构,处理I/O任务不需要阻塞等待,只需少量的线程,就能处理大量的请求,能够极大提升系统吞吐量。
2024-09-11 18:23:32
944
原创 RabbitMQ常用知识点梳理
如上图所示,同一个回调队列,服务器将响应消息发送到回调队列,通过correlation id关联请求和响应。
2024-09-06 20:53:00
1269
1
原创 Go Context使用及源码解析
context包提供了一种在Go程序中不同组件之间传递请求范围的值、取消信号和截止时间的方式。context包的设计目的是为了解决在Go的并发模型中,尤其是在goroutines之间,如何安全、高效地传递控制信息的问题。当 Context 被取消时,从其派生的所有 Context 也将被取消。
2024-08-30 19:04:55
1209
原创 TCP协议详解
Socket,通常称为"套接字",Socket(套接字)是一个抽象层,它提供了网络通信的接口,使得应用程序可以通过Socket来发送和接收数据。TCP 协议的实现细节被封装在操作系统的网络栈中,而 Socket 是操作系统提供给应用程序的接口,用于访问这些协议。Socket API 通常是协议无关的,这意味着它们可以用于不同的网络协议,如 TCP、UDP、IP 等。Java提供了 java.net.Socket 类来实现 TCP 通信。
2024-08-24 22:00:51
1391
原创 HTTP/2协议详解
HTTP/1.0 只允许在给定的 TCP连接上,一次发出一个未完成的请求。HTTP/1.1添加了请求流水线,但这只能部分解决请求并发问题,并且仍然受到应用程序层队首阻塞(application-layer head-of-line blocking)的影响。因此,HTTP/1.0 和 HTTP/1.1 客户端与服务器使用多个连接来处理并发请求。此外,HTTP 字段通常重复且冗长,不仅会造成不必要的网络流量,还会导致初始 TCP 拥塞窗口快速填满。
2024-08-22 20:49:20
1266
原创 gRPC协议详解及其在Go语言中的使用指南
gRPC Channels提供了与指定主机和端口上的 gRPC 服务器的连接。它在创建客户端存根时使用。客户端可以指定通道参数来修改 gRPC 的默认行为,例如开启或关闭消息压缩。通道具有状态,包括连接状态和空闲状态。对于简单的客户端和服务端架构,通常一个 Channel 对应一个 TCP 连接,并通过该连接处理所有请求。在复杂的场景下,一个 Channel 可能会管理多个 TCP 连接。
2024-08-19 21:44:00
1989
原创 Protocol Buffers协议说明及在Go中使用
在某些场景中,你可能需要处理未知的 Protobuf 消息类型,比如构建一个通用的消息处理系统。当需要在不同版本的 Protobuf 消息之间进行转换,或从一种消息格式转换为另一种消息格式时,protoreflect 可以用来动态读取和设置字段值,从而实现消息的转换。它也可以用于记录复杂的 Protobuf 消息,以便更好地理解和分析消息内容。如果你需要自定义 Protobuf 消息的序列化逻辑(比如实现自定义的序列化格式),protoreflect 提供了对消息内部结构的访问,可以帮助你实现这一功能。
2024-08-13 22:16:30
1215
原创 WebSocket协议详解及使用Go实现WebSocket服务端
WebSocket支持消息的分段传输,分片的主要目的是允许在消息开始时发送大小未知的消息,而无需缓冲该消息。示例:对于作为一个文本消息分成三个片段发送的情况,第一个片段的Opcode将是0x1,FIN位被清除;%x9 denotes a ping Ping帧 用于心跳检测 收到一个ping帧,必须发送一个Pong帧作为响应,除非已经接收了一个Close帧。掩码标志,如果设置为1,表示需要对数据做掩码处理,出于安全考虑,WebSocket协议规定所有从client到server的数据都要进行掩码处理。
2024-08-09 20:43:09
1334
struts2-core-2.0.11.jar
2011-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人