- 博客(202)
- 收藏
- 关注
原创 Golang 之 Context 源码解析(1.20+)
value context的递归调用在查找值,即执行 Value 操作时,会先判断当前节点的 k 是不是等于用户的输入 k,如果相等,返回结果,如果不等,会依次向上从子节点向父节点,一直查找到整个 ctx 的根。同时,这就是value context不能自底向上传递值的原因。这四个With函数,接收的都有一个parent参数,就是父Context,我们要基于这个父Context创建出子Context的意思,这种方式可以理解为子Context对父Context的继承,也可以理解为基于父Context的衍生。
2025-05-23 15:30:40
868
原创 计算机网络——Session、Cookie 和 Token
在 Web 开发中,和是实现用户会话管理和身份验证的核心技术。它们既有联系,也有明显区别。以下从定义、原理、联系、区别和应用场景等方面详细解析。
2025-05-22 20:40:38
868
原创 网络存储S3 与 MinIO对比
例如 Amazon S3、MinIO,将数据作为“对象”(Object)存储,每个对象包含数据、元数据和唯一标识符(如 URI),适合海量非结构化数据(图片、视频、日志等)。Amazon S3(Simple Storage Service)是 AWS 在 2006 年推出的首个公有云对象存储服务,定义了行业标准的对象存储 API。MinIO 是 2014 年发布的开源对象存储系统,完全兼容 Amazon S3 API,专为云原生环境(如 Kubernetes)设计,强调轻量化和高性能。
2025-05-16 14:18:18
896
原创 k8s之Kubebuilder 的设计哲学
简单来说,Kubebuilder 希望开发者像写普通 Go 程序一样编写 Operator,,目的是减少维护成本、提高可读性,同时保持灵活性。(如 CRD 生成),而非引入新的复杂度。Kubebuilder 的设计哲学强调。
2025-05-14 15:39:11
854
原创 计算机网络——TCP端口问题
TCP 和 UDP 可以绑定相同端口,因为它们是独立的协议,内核通过协议号区分。多个 TCP 进程不能绑定相同 IP 和端口,但不同 IP 可以绑定相同端口。通配 IP 0.0.0.0 与具体 IP 绑定会冲突。重启服务时可能因 TIME_WAIT 状态报错,可通过 SO_REUSEADDR 解决。客户端端口可以复用,只要四元组不完全相同。客户端 TIME_WAIT 过多可能导致端口耗尽,可通过 tcp_tw_reuse、缩短超时时间或调整端口范围解决。一个主机可以有多个 IP 地址,原因包括多网卡、虚拟接
2025-05-13 17:03:18
1064
原创 计算机网络——TLS与SSL协议深度解析
不是传统意义上的某一层,而是位于传输层和应用层之间的安全层更接近应用层,因为它的配置和管理通常由应用程序控制提供端到端安全,而不依赖网络基础设施灵活支持多种应用协议提供透明的加密服务不干扰底层网络传输实现细粒度的安全控制正是这种设计使SSL/TLS成为互联网安全通信的事实标准。
2025-05-12 18:44:17
1091
原创 计算机网络——Nginx负载均衡配置指南:四层与七层负载均衡实践
四层负载均衡:适合低延迟、高性能要求的TCP/UDP服务七层负载均衡:适合需要应用层智能路由的HTTP服务安全配置:必须重视隐私保护和访问控制性能优化:需要根据实际业务特点进行针对性调优实际部署时应结合业务需求、流量特点和系统资源情况,选择合适的负载均衡策略,并通过持续监控不断优化配置。
2025-05-12 18:29:26
1184
原创 k8s之LoadBalancer Service 解析
Cluster IP (10.233.50.2):External IP (显示为 ):服务暴露了多个端口,每种端口有不同的含义:Service Port (如9091/TCP):TargetPort (如9091/TCP):NodePort (如19650/TCP):当前服务暴露了4个端口组:每组格式为:通过Cluster IP:通过服务DNS名 (在同一个命名空间):集群外部连接通过NodePort (当外部IP未分配时):通过LoadBalancer IP (当外部IP分
2025-05-12 18:22:05
717
原创 k8s之Kueue 中的抢占策略详解
抢占策略通过- 队列组内资源回收- 队列组内资源借用时的抢占- 集群队列内部的抢占如果不设置这些策略,默认都是不开启抢占功能。
2025-05-10 15:58:17
605
原创 k8s之Kueue 核心概念解析
ResourceFlavor 是 Kueue 中资源类型的抽象描述,它定义了计算节点的特性和约束条件,相当于为集群中的资源打上分类标签。metadata:spec:gpu-type: a100 # 匹配节点标签- key: gpu # 定义节点污点tolerations: # 自动添加的容忍度- key: gpu。
2025-05-10 15:57:30
1029
原创 计算机网络之从Socket到UDS
Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,提供了一组编程接口(API),用于实现网络通信。Socket 编程是网络应用开发的基础,支持多种协议和通信方式,如 TCP 字节流通信、UDP 数据报通信以及本地进程间通信。UNIX Domain Socket(UDS)是一种高效的进程间通信机制,专为同一主机上的进程通信设计,绕过网络协议栈,直接在内核中完成数据传输,效率高于传统网络 socket。UDS 支持全双工通信、丰富的 API 及文件系统集成,广泛应用于 X Window 系统、
2025-05-10 11:05:18
1028
原创 计算机网络——四层与七层负载均衡详解
二层(MAC层):基于MAC地址转发三层(IP层):基于IP地址转发四层(传输层):基于IP+端口转发七层(应用层):基于URL、HTTP头等应用信息转发高性能要求:如游戏服务器、视频流媒体。非HTTP协议:如MySQL、Redis、RDP。全局负载均衡(GSLB):基于IP/Port的跨数据中心调度。
2025-05-09 18:53:47
794
原创 Golang日志重定向到Windows事件日志
日志重定向是指将应用程序生成的日志消息从默认的输出位置(通常是控制台)转移到其他位置或系统的过程。文件系统(日志文件)数据库远程日志服务器(如ELK、Splunk等)操作系统日志系统(如syslog、Windows事件日志)第三方日志服务(如Loggly、Datadog)日志重定向是构建可维护、可观测系统的重要技术。通过理解其原理和掌握实现方法,开发者可以根据项目需求灵活地配置日志系统。无论是简单的文件重定向,还是复杂的分布式日志收集,核心思想都是通过自定义处理器来控制日志的最终去向。
2025-05-09 13:29:26
831
原创 Linux之匿名管道和命名管道
匿名管道,它的通信范围是存在父子关系的进程。因为管道没有实体,也就是没有管道文件,只能通过fork来复制父进程 fd文件描述符,来达到通信的目的。对于命名管道,它可以在不相关的进程间也能相互通信。因为命令管道,提前创建了一个类型为管道的设备文件,在进程里只要使用这个设备文件,就可以相互通信。不管是匿名管道还是命名管道,进程写入的数据都是缓存在内核中,另一个进程读取数据时候自然也是从内核中获取,同时通信数据都遵循先进先出原则,不支持Iseek之类的文件定位操作。特性命名管道(FIFO)普通文件。
2025-05-08 18:42:26
775
原创 linux服务之 .service文件
用于定义如何启动、管理和监控系统服务(如后台程序、守护进程等)。定义如何将服务安装到系统启动目标。定义服务的元信息和依赖关系。,需要将其配置为系统服务。文件分为三个部分(以。定义服务运行的具体行为。
2025-05-08 15:23:44
520
原创 GoFrame之Logger全解析Golang
/ 初始化自定义logger开闭原则:通过配置化支持扩展,无需修改代码单一职责:每个logger实例功能独立依赖倒置:依赖接口而非实现约定优于配置:提供合理的默认值通过深入理解这些设计思想,开发者可以更高效地利用GoFrame的logger模块构建健壮的日志系统,满足从开发调试到生产部署的各种场景需求。
2025-04-30 18:46:32
563
原创 k8s之Zone
维度说明核心目标实现故障隔离和高可用性关键标签调度策略存储限制动态卷需与 Pod 同 Zone,分布式存储可跨 Zone网络优化优先同 Zone 流量路由(Service通过合理利用 Zone,可以显著提升 Kubernetes 集群的容灾能力和稳定性。
2025-04-29 13:09:08
825
原创 k8s之kueue中的workload 和 kubeflow中的TFJob
组件作用与对方的关系TFJob运行 TensorFlow 分布式训练被Workload封装,受 Kueue 调度Workload管理作业的排队和资源分配持有TFJob的元数据,控制其何时执行。
2025-04-25 14:22:15
721
5
原创 k8s之ServiceAccount详解
为工作负载提供身份标识通过 RBAC 实现精细的访问控制支持安全的服务间通信管理外部资源访问凭证实现最小权限原则隔离不同工作负载提供可审计的服务身份增强集群整体安全性理解 ServiceAccount 与 Pod、Secret、RBAC 等组件的关系,对于设计安全的 Kubernetes 架构至关重要。随着 Kubernetes 的发展,ServiceAccount 机制也在不断改进,如 TokenRequest API 的引入,使得身份管理更加安全和灵活。
2025-04-23 18:08:15
1104
原创 k8s之RoleBinding详解
RoleBinding 是 Kubernetes RBAC 体系中的关键组件,它通过将角色与主体关联来实现细粒度的权限控制。实现最小权限原则隔离不同环境和工作负载提供审计跟踪能力支持多租户场景理解 RoleBinding 与 Role、ClusterRole、ServiceAccount 等资源的关系,是设计健壮的 Kubernetes 权限系统的基础。
2025-04-23 18:05:19
1091
原创 go-playground/validator库详细解析
是一个基于标签的结构体验证器,它允许你通过结构体标签定义验证规则,然后自动验证结构体字段的值是否符合这些规则。// 假设我们有一些有效的国家代码// ...Username string `validate:"required" label:"用户名"`Email string `validate:"required,email" label:"电子邮件"`// 注册自定义翻译器// 注册默认翻译// 注册自定义字段名翻译。
2025-04-23 13:18:15
1055
原创 Go Validator 自定义验证系统详解
/ 验证器函数// 翻译函数return t})业务规则封装:将业务规则(如优先级范围)封装在验证器中复用性:一次定义,多处使用清晰的错误信息:通过翻译系统提供用户友好的错误提示与结构体解耦:验证规则不直接写在业务代码中本文通过实际代码示例展示了如何在 Go 中构建一个完整的自定义验证系统。这种模式特别适合需要复杂业务规则验证的场景,能够保持代码的整洁性和可维护性。验证器初始化配置自定义验证规则定义验证错误翻译处理结构体验证标签使用统一的验证错误处理。
2025-04-22 17:36:43
490
原创 产品背景知识:基于P2P的文件分发系统
P2P是去中心化资源共享模式。基于P2P的文件分发系统(如Dragonfly)通过节点互助提升效率,适合大规模场景。Dragonfly作为企业级方案,在P2P基础上引入智能调度和混合架构,平衡性能与可控性。
2025-04-22 11:02:17
420
原创 k8s之kueue详细解析
定义:描述集群中可用的异构资源类型,通过标签/污点机制与物理节点建立映射关系核心功能:关键配置属性:版本兼容性:校验机制:2. ClusterQueue(集群队列)资源池化模型:定义跨命名空间的全局资源配额池,支持多级资源借用策略架构设计:高级配置参数:队列策略对比:资源借用规则:租户隔离机制:命名空间维度的虚拟队列,实现资源配额二次分配配置示例:运行特征:单元化设计:Kubernetes 原生 Job 的增强抽象,支持多框架集成优先级继承模型:是否Job/Pod PriorityClass是否
2025-04-21 15:38:54
882
原创 k8s之kueue简介
资源公平性成本效益和多租户隔离。其设计充分体现了Kubernetes原生组件的扩展哲学——在不颠覆现有体系的前提下,通过API扩展实现能力增强。对于正在构建AI训练平台或混合批处理系统的团队,Kueue提供了从资源配额、作业调度到成本优化的完整解决方案。随着v1版本的临近和生态集成的深化,Kueue有望成为云原生批处理的事实标准。
2025-04-21 15:07:07
1018
原创 k8s之hostPath详解
hostPath是Kubernetes中一个强大但需要谨慎使用的功能。它提供了直接访问宿主机文件系统的能力,适用于特定场景如日志收集、节点监控等。然而,由于其潜在的安全风险和可移植性限制,在生产环境中应谨慎评估是否真的需要hostPath,并始终遵循最小权限原则和安全最佳实践。
2025-04-14 15:00:20
778
原创 Redis Cluster 深度解析
数据分区是在集群创建的时候完成的。数据分区(Data Partitioning)是分布式系统的核心设计之一,其本质是将数据集划分为多个子集分配到不同节点上。Redis 作为分布式缓存/数据库,主要通过三种分区策略实现数据分布。节点取余(Modular Hashing)是最简单的分区策略:工作流程:优势:致命缺陷:一致性哈希(Consistent Hashing)将哈希空间组织为环形(通常0~2³²-1):2. 数据定位机制计算数据键的哈希值在环上顺时针查找第一个节点该节点即为数据归属节点3
2025-04-14 11:03:58
1047
原创 Redis 哨兵机制深度解析
Redis Sentinel(哨兵)是 Redis 官方提供的高可用性解决方案,主要用于监控 Redis 主从架构中的实例状态,并在主节点发生故障时自动进行故障转移,确保服务持续可用。
2025-04-14 10:46:47
1059
原创 Redis 主从复制详细解析
Redis的主从复制是一种重要的数据复制机制,用于实现数据备份、读写分离等功能,但在实际应用中会面临一些问题,以下是对上述文档中主从复制相关问题及解决方案的详细解释:
2025-04-11 16:43:45
735
原创 Redis 高可用方案简介
Redis 除了单机部署外,还可以通过主从复制、哨兵模式和集群模式来实现高可用。主从复制:允许一个 Redis 服务器(主节点)将数据复制到一个或多个 Redis 服务器(从节点)。这种方式可以实现读写分离,适合读多写少的场景。哨兵模式:用于监控主节点和从节点的状态,实现自动故障转移。如果主节点发生故障,哨兵可以自动将一个从节点升级为新的主节点。集群模式:Redis 集群通过分片的方式存储数据,每个节点存储数据的一部分,用户请求可以并行处理。
2025-04-11 16:07:11
864
原创 Redis 持久化机制详解
Redis 是内存数据库,数据存在内存中,如果断电或崩溃,内存数据会丢失。持久化就是把内存数据保存到硬盘,重启后能恢复数据。:AOF重写时,先用RDB格式保存当前数据快照,再追加后续命令。:像拍照一样,定期把内存数据整体保存到一个压缩的二进制文件(:记录所有写操作命令(如。),保存到文本文件(
2025-04-11 15:54:20
840
原创 Redis 基础篇深度解析
Redis(Remote Dictionary Service)是一种基于键值对的 NoSQL 内存数据库,但远超简单键值存储(如 HashMap)。其核心特点包括:与 MySQL 对比:对比 String 存储对象:String:序列化整个对象(如 JSON)存为一个键,修改需全量更新。Hash:可单独修改字段(),更高效。(3)List(列表)底层实现:快速链表(ziplist + linkedlist)。应用场景:消息队列( + )。最新文章列表(,限制长度 )。
2025-04-11 15:02:17
766
原创 阻塞 I/O 模型和IO多路复用
Socket 是进程间通信的一种特殊方式,能够实现跨主机间的通信。在网络通信前,客户端和服务器都需要各自创建一个 Socket,它就如同一个“口子”,数据的读取和发送都通过这个“口子”进行,类似于一根网线连接客户端和服务端。创建 Socket 时,可以指定网络层的 IPv4 或 IPv6 协议,以及传输层的 TCP 或 UDP 协议,本文重点介绍基于 TCP 的 Socket 编程。特性selectpollepoll文件描述符存储固定长度的BitsMap(有个数限制)
2025-04-11 14:54:02
1064
原创 Asynq 深度剖析:Go 语言分布式任务队列的卓越实践
Asynq 是由 Ken Hibino 开发的高性能分布式任务队列库,专为 Go 语言生态量身定制。它融合了 Redis 的强大数据结构与 Go 的并发特性,提供了媲美 Celery(Python)、Sidekiq(Ruby)的功能,同时具备更简洁的 API 和深度优化的性能。计算重试时间存入 asynq:retry。归档至 asynq:archived。BRPOPLPUSH至进行中队列。Hash存储任务数据。
2025-04-11 13:52:57
842
原创 Golang中的WorkerHandler讲解
此代码构建了一个完整的后台任务管理系统,运用库来处理异步任务与定时任务。该系统涵盖了异步任务处理器、定时任务调度器,可处理用户触发的即时操作以及系统的周期性维护任务。
2025-04-11 11:06:07
691
原创 Golang的Server服务器初始化二——启动多网络服务
middleware.CommonInterceptor, // 通用拦截器(如日志、耗时统计)middleware.AuthenticationInterceptor, // 认证拦截器(如JWT验证)拦截器的作用在 gRPC 方法执行前后插入自定义逻辑,实现以下功能:日志记录:记录请求参数、响应时间和错误信息。认证鉴权:验证请求头中的 Token 或证书。限流熔断:控制请求速率或拒绝超载流量。请求校验:检查参数合法性。执行顺序拦截器按定义顺序执行(先,后。
2025-04-11 10:26:56
1133
原创 Dockerfile超详细解释
ARG用于定义构建时的变量,可以在构建时通过参数覆盖。构建阶段使用 Go 镜像作为基础设置 Go 环境编译代码生成二进制文件运行阶段使用轻量级的 OpenEuler 镜像配置运行时环境从构建阶段复制二进制文件设置启动命令。
2025-04-10 14:06:28
1524
orbslam3在ros节点运行报错
2024-05-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人