- 博客(662)
- 资源 (24)
- 收藏
- 关注
原创 linux系列文章
linux文章汇总VIMbashMakefileubootu-boot编译过程分析linuxLinux系统编程Linux/UNIX网络编程
2019-11-09 22:07:43
953
原创 linux开发常用工具集
工具集 – linuxMarkdown 编辑器 – TyporaGit版本管理软件 – SmartGitDiff 比较软件 – Meld Diff 差异查看器代码编辑器 – Source Insight代码查看 – Visual Studio Code抓包 – WireShark截图软件-- Shutter串口软件 – PUTTY桌面壁纸软件 – Wallch浏览器 – ...
2019-03-05 22:51:24
795
原创 kube-prometheus之alertmanager全
kube-prometheus中的Alertmanager包含8个核心配置文件,主要用于配置告警管理服务。其中: alertmanager-podDisruptionBudget.yaml定义Pod中断预算,确保集群操作时至少1个Alertmanager实例可用。 alertmanager-secret.yaml存储Alertmanager核心配置,包括全局参数、抑制规则和路由策略。 alertmanager-service.yaml暴露Alertmanager服务,同时包含serviceMonitor配置
2025-11-07 11:31:59
651
原创 源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
BigCache是Go语言实现的高性能内存缓存库,其核心设计通过分片(1024个shard)降低锁竞争,使用环形缓冲区(ringbuffer)存储数据,配合无指针的哈希索引规避GC扫描。采用覆盖写+时间窗口淘汰策略,而非传统LRU/LFU。数据需序列化为[]byte存储,带来编解码开销但避免GC压力。适合大吞吐量场景,需权衡序列化成本与GC优化收益。
2025-10-15 13:59:06
234
1
原创 深入理解连接跟踪(conntrack)
Linux 连接跟踪(conntrack)是内核用于跟踪网络连接状态的核心机制,为状态防火墙和 NAT 提供支持。它通过 Netfilter 框架拦截数据包,记录 TCP/UDP/ICMP 等协议连接信息(如 NEW、ESTABLISHED 状态),并维护连接状态数据库。用户可通过 conntrack -L 查看跟踪条目。Netfilter 是内核层实现,而 iptables 是其用户空间配置工具。现代方案如 Cilium 已实现独立于 Netfilter 的连接跟踪机制。该技术本质是网络会话的"
2025-10-14 16:02:35
170
原创 k8s pod的volume实现原理
本文深入解析了 Kubernetes Pod 的核心机制。Pod 是最小调度单元,包含共享网络、存储和生命周期的容器组。关键实现原理包括:通过 pause 容器建立共享命名空间;所有容器共享相同网络IP和端口;通过 Volumes 实现存储共享;具有原子性的生命周期管理(同时启停)。文章还详细介绍了 InitContainer 和普通容器的启动顺序差异,并通过 YAML 示例和代码片段(kubeGenericRuntimeManager.SyncPod)说明 Pod 的创建流程,包括网络设置、容器启动顺序等
2025-10-11 10:07:29
404
原创 kube-prometheus监控服务发现
kube-prometheus 的配置看似复杂,实则遵循模块化设计。其核心服务发现机制通过三大 CRD 实现: ServiceMonitor - 监控 Service 背后的 Pod PodMonitor - 直接监控特定 Pod Probe - 监控外部服务端点 这些资源由 Prometheus Operator 动态转换为 Prometheus 的抓取配置,实现声明式监控管理。文件虽多,但都是围绕基础组件(如 Alertmanager)和监控目标(如 nodeExporter)的标准 K8s 资源组合。
2025-09-30 18:22:25
1063
原创 kube-prometheus setup
本文介绍了使用Helm屏蔽中间过程后,基于jsonnet生成的manifest部署kube-prometheus的准备工作。主要涉及manifests/setup目录下的CRD资源文件和命名空间配置文件,其中以0开头的文件包含各类监控相关的CRD定义,而namespace.yaml则创建了monitoring命名空间并配置了Pod安全策略警告。执行kubectl create -f manifests/setup命令即可将这些资源应用到Kubernetes集群中,为后续部署kube-prometheus组件
2025-09-30 17:38:33
211
原创 kube-prometheus
摘要: kube-prometheus 是 Kubernetes 生态中主流的监控解决方案,集成 Prometheus、Alertmanager、Grafana 等核心组件,通过 Prometheus Operator 实现声明式管理。其优势包括开箱即用的监控规则、自动服务发现(ServiceMonitor)、预置仪表盘及告警功能。部署支持 Jsonnet 或 Helm 方式,提供节点、Pod、API Server 等全方位指标监控。生产环境需注意资源消耗、持久化及高可用配置,适合需要灵活自建监控的场景。官
2025-09-30 17:12:49
1077
原创 Kubernetes 的本质:一个以 API 为中心的“元操作系统”
Kubernetes 本质上是一个以 API 为中心的"元操作系统",其核心在于 API + 控制器模式 + 可扩展性。它通过分层的 API 资源模型(内置资源如 Pods/Services 和自定义资源 CRD)构建了一个统一的控制平面,类比于数据库系统:API 是 SQL,etcd 是存储引擎,CRD 如同用户自定义表。Kubernetes 的控制器模式实现了事件驱动的调谐循环,而 RBAC 则对所有 API 提供精细访问控制。这种架构使 Kubernetes 成为构建和管理分布式系
2025-09-29 15:57:24
777
原创 使用go代码实现判断系统大小端
该代码实现了一个判断系统是否为小端序(little-endian)的Go函数。通过创建一个int16变量(值为1),检查其内存首字节是否为0:若为0则为大端序,否则为小端序。函数利用unsafe.Pointer直接访问内存,通过比较NativeEndian与binary.LittleEndian返回布尔值。该方案是检测系统字节序的经典方法,适用于需要处理二进制数据的场景。
2025-08-07 13:36:09
301
原创 gorm: CRUD
本文介绍了GORM中的CRUD操作,重点讲解Create和Query功能。在Create部分,详细说明了如何创建数据记录,包括Select/Omit指定字段、批量插入、Hooks回调、Map创建、关联数据创建等。还介绍了默认值设置和Upsert冲突处理机制,通过OnConflict实现在主键冲突时的不同更新策略。Query部分简要提及了GORM提供的First/Take/Last等查询方法。全文通过丰富的代码示例展示了GORM框架在数据库操作中的灵活性和强大功能。
2025-08-07 10:45:59
414
原创 gorm:初识gorm
Gorm是一个Go语言开发的ORM库,简化数据库操作,支持多种主流数据库。它通过面向对象方式处理数据,无需直接编写SQL,提供高级查询、事务管理等功能。安装简单,与Gin等框架集成方便。文章演示了使用Docker启动PostgreSQL数据库,并通过Gorm连接、创建表结构及进行CRUD操作的基本流程。Gorm.Model预定义结构体包含ID、时间戳等常用字段,可嵌入自定义模型实现一致性和内置功能。
2025-08-06 16:45:56
441
原创 初识prometheus
Prometheus是云原生时代广泛采用的监控系统,具有多维数据模型、PromQL查询语言、拉取式采集等特点。其核心组件包括Prometheus Server、Exporters、Pushgateway和Alertmanager,支持服务发现、告警管理和可视化集成(如Grafana)。通过下载运行Prometheus并配置监控目标,用户可以快速上手。在Kubernetes环境中,推荐使用kube-prometheus项目实现生产级监控方案。掌握Prometheus及其生态工具已成为云原生监控领域的重要技能。
2025-08-03 22:45:19
818
原创 Ubuntu24.04换源方法
本文介绍了如何为Ubuntu系统配置国内软件源镜像以提升下载速度。首先通过sudo vim命令打开软件源列表文件,然后添加阿里云、清华、中科大和163等国内镜像源配置,每个源都包含标准软件包分类和安全更新通道。配置完成后执行sudo apt update更新软件包索引,即可享受更快的下载体验。
2025-07-30 14:14:44
1011
原创 BPF-CO-RE(一次编译,随处运行)
BPF CO-RE(一次编译,随处运行)是一种现代BPF应用程序开发方法,支持程序无需修改即可跨不同内核版本和配置运行,避免了传统BCC框架需要在目标机器上运行时编译的问题。本文详细介绍了BPF CO-RE的核心功能和libbpf实现,重点讲解了数据读取机制(如bpf_core_read、BPF_CORE_READ等)及其可重定位特性,帮助开发者编写更高效、可移植的BPF程序。文章还区分了字符数组与字符指针的处理差异,并通过实例演示了复杂内核数据结构的读取方法,为开发者提供了实用指导。
2025-07-29 19:53:41
922
原创 深入理解 Go 中的字节序(Endianness)检测代码
高位字节在前,低位字节在后。如0x0102存储为常见于网络协议(如 TCP/IP)定义一个全局变量,它实现了接口(即支持PutUint16Uint16等方法)。后续将根据系统实际字节序赋值为或。功能说明字节序检测通过读取int16=1的内存布局判断系统字节序接口用于后续的二进制数据操作直接访问内存地址,实现底层判断提供友好的 API 查询当前系统是否为小端。
2025-06-11 09:13:44
854
原创 协程如何优雅地退出
技术作用创建可取消的上下文,用于通知协程退出协程监听此通道,以接收退出信号主 goroutine 等待所有子 goroutine 完成退出监听系统中断信号,触发优雅退出流程通过结合context和WaitGroup,我们可以很好地管理协程的生命周期,确保它们在程序退出时能够优雅地关闭。这种方式不仅适用于简单的服务程序,也可以扩展到复杂的微服务架构中,是 Go 开发者必须掌握的核心技能之一。
2025-06-10 09:46:37
775
原创 数据库的并发控制
但对于数据库而言,客户端可以以任意顺序获取锁,因此数据库必须检测并解决死锁,这是一个图问题。在乐观并发控制中,事务在冲突时无法继续,这对应用程序来说并不友好,因为它们只能不断重试。涉及I/O操作,我们可以通过在等待I/O时释放锁来进一步优化,以允许其他事务进入,并让只读事务退出。然而,单个写者仍然不足,因为事务的生命周期由客户端控制,可能任意延长。在现实中,这些步骤可以并行运行,因此需要序列化共享的KV结构。这种方法的用处有限,因为写者之间没有并发能力,且长时间运行的事务会导致读者和写者互相阻塞。
2025-05-05 22:13:42
938
原创 数据库的原子事务
简单的做法是一次迭代并逐个删除键,但这会将整个表读入内存并在删除前反复更新节点,做了一些无用的工作。在我们的案例中,所有内容使用单一的B+树,我们可以实现一个范围删除操作,无需查看即可释放具有特定范围的所有叶节点。:在任何排序的数据中,邻近的键可能共享一个公共前缀。:写时复制在一次更新中从叶节点到根节点复制节点,这对于多键更新来说不是最优的,因为中间树的节点在一个事务内分配、更新一次然后被删除。另一种方法是通过日志实现原子性,在写时复制树中,更新由根指针捕获,而在原地更新中,则需要日志来捕获更新。
2025-05-05 22:11:19
1030
原创 数据库的范围查询
下一步将是添加二级索引,这实际上就是额外的表结构,用于加速某些类型的查询。例如,一个二级索引可以用来快速查找符合特定条件的所有记录,而不需要遍历整个主表。为了确保正确的顺序,正半部分与负半部分交换,这仅仅是翻转最高有效位。我们的B+树处理的是任意字节的字符串键,但列可以是其他类型的数据,如数字,而且键可以是多个列。为了在节点内找到当前键的兄弟键,需要知道当前键的位置。另一种方法是选择一个特殊的序列化格式,使得生成的字节能够反映排序顺序。有两种编码带有长度的字符串的方式,一种是在前面添加长度,这需要解码;
2025-05-05 22:03:53
861
原创 于键值(KV)的表
const (TYPE_BYTES = 1 // 字符串(任意字节)TYPE_INT64 = 2 // 整数;64位有符号TYPE_BYTES表示字符串类型,可以存储任意字节。TYPE_INT64表示整数类型,使用64位有符号整数。// 用户定义的部分Name string // 表名Types []uint32 // 列类型Cols []string // 列名PKeys int // 主键列的数量// 前 `PKeys` 列是主键// 不同表的自动分配的 B 树键前缀。
2025-04-28 00:04:44
924
原创 空闲列表:回收和再利用
高效的内存管理:自由列表能够自我维护,并且支持快速分配和释放页面。与写时复制的兼容性:通过追加写入的方式避免覆盖数据,减少了崩溃恢复的复杂性。灵活性:可以选择外部链表或嵌入式链表,根据性能和存储需求进行权衡。这种设计为数据库系统中的磁盘空间管理提供了一种优雅的解决方案。在这一节中,我们详细讨论了自由列表(Free List)的实现方法。自由列表是一种用于管理未使用页面的数据结构,它通过链表的形式组织页面编号,并支持高效的分配和回收操作。以下是对自由列表实现的逐步分析和总结。自由列表接口设计。
2025-04-24 23:34:01
960
原创 仅追加KV数据库
在本章中,我们将创建一个基于文件的键值存储(KV Store),其核心是一个**写时复制(Copy-on-Write, CoW)B+ 树**。这种设计的目标是实现数据的持久性和原子性。
2025-04-23 00:12:30
1086
原创 B+树节点与插入操作
所有的B+树节点大小相同,这是为了后续使用自由列表机制。即使当前阶段不处理磁盘数据,一个具体的节点格式仍然是必要的,因为它决定了节点的字节大小以及何时应该分裂一个节点。
2025-04-20 21:57:41
1004
原创 B树的异常恢复
叶节点存储实际数据所有的实际数据都存储在叶节点中,这使得查询路径更加一致和简单。内部节点仅存储引导键内部节点的键用于划分子树的范围,帮助快速定位目标数据所在的叶节点。高度平衡B+树的高度始终保持平衡,确保查找、插入和删除操作的时间复杂度为Ο(log 𝑁)。高效的范围查询由于所有叶节点通过指针链接在一起,范围查询变得非常高效。例如,查询[4, 9)范围内的所有数据时,只需遍历相关的叶节点。空间利用率高每个节点可以存储多个键和子节点,减少了树的高度,从而降低了磁盘访问次数。扩展B树。
2025-04-20 21:56:47
1096
原创 数据库基础-B+树
日志结构存储(如LSM-tree)通过合并操作摊销了更新成本,并通过多级结构进一步优化了写放大效应。高效的写入性能:更新被缓冲在小文件中,避免频繁重写整个数据集。可控的写放大效应:通过多级合并,减少不必要的磁盘写入。灵活性:可以根据具体应用场景调整层级数量,权衡写放大效应和查询性能。B+树B+树适用于需要频繁更新的场景,但在磁盘上的更新效率较低,并且空间复用的问题需要额外处理。LSM-treeLSM-tree 解决了许多上一章提到的挑战,例如如何高效更新基于磁盘的数据结构以及如何复用空间。
2025-04-19 23:00:38
1063
原创 容器技术解析:容器网络
随着云计算的发展,基础资源层的弹性伸缩问题得到了解决。然而,PaaS层应用如何随基础资源层的变化而快速、批量部署成为新的挑战。容器技术应运而生,它不仅提供了轻量级的虚拟化方案,还极大地简化了软件交付流程。本文将探讨容器技术的核心概念及其网络实现机制。
2025-04-17 21:00:54
1003
原创 从物理机到虚拟化:构建更灵活的数据中心
在当今快速发展的信息技术领域,传统的本地服务器面临着诸多挑战。本文将探讨这些问题,并介绍通过虚拟化技术,特别是 qemu-kvm 和 TUN/TAP 技术,如何解决这些难题,从而为数据中心带来更高的灵活性和效率。
2025-04-16 16:48:40
449
原创 数据库的基本原则
SQL几乎成为了数据库的代名词,但它实际上只是数据库的一个用户界面,并不是数据库的核心。通过KV接口,你可以获取、设置和删除单个键值对,更重要的是,可以以排序顺序列出一系列键。为了实现持久性,可以使用。手机使用SQLite而非其他格式(如JSON)存储数据的原因在于,数据库系统提供了更高级的数据完整性和可靠性保证,尤其是在处理异常情况时。:这是一种常用的组织和存储数据的方式,特别适合于磁盘上的数据结构。以下是一些关键的原则,它们构成了数据库系统的基础,并且可以帮助你通过实践来学习如何构建一个简单的数据库。
2025-04-16 00:03:08
746
原创 TCP 和 UDP 的区别
特性TCPUDP连接方式面向连接无连接可靠性可靠(重传、排序、去重)不可靠(可能丢失或乱序)数据模式字节流数据报拥塞控制有无适用场景文件传输、HTTP 等实时音视频、DNS 等import ("fmt""net"if err!= nil {
2025-04-14 15:37:35
1305
原创 ubuntu24.04LTS安装向日葵解决方案
但是会报libgconf-2-4缺失的问题,而这个库24.04软件源里面是没有的,你需要使用如下命令。输入如下命令安装,将具体版本修改成自己下载的版本。
2025-04-13 11:38:54
1910
原创 go语言内存泄漏的常见形式
例如,有时我们可能会让 Go 程序的主 Goroutine 挂起,以避免程序退出。因为,虽然go中并未对字符串时候共享底层内存块进行规定,但go语言编译器/运行时默认情况下允许字符串共享底层内存块,直到原先的字符串指向的内存被修改才会进行写时复制,这是一个很好的设计,既能节省内存,又能节省CPU资源,但有时也会导致"内存泄漏"。例如如下代码,一旦调用demo就会导致将近1M内存的泄漏,因为s0只使用了50字节,但是会导致1M的内存一直无法被回收,这些内存会一直持续到下次s0被修改的时候才会被释放掉。
2025-04-12 22:43:05
1285
原创 ICMP 协议深度解析
ICMP就像网络的神经系统,通过毫秒级的信号传递维持着互联网的生命体征。理解其工作原理,是掌握网络故障排查的基石。通过接收"需要分片"差错报文(Type=3,Code=4),动态调整数据包大小。源站抑制报文(Type=4)自动触发发送端降速,防止网络拥塞。(互联网控制报文协议)是IP协议体系的"哨兵系统",专用于。利用TTL递减触发ICMP超时报文,绘制完整传输路径。携带故障包"证据",便于源端精准定位问题。通过ICMP请求/应答判断主机可达性。
2025-04-07 19:52:46
616
Sqlite3.pdf
2019-06-30
strtok的赞歌.pdf
2020-04-19
GDB就该这样用
2019-05-04
C++基础课程讲义.pdf
2020-09-26
Getting Started with LevelDB-Andy Dent
2023-08-15
Technical Overview of LoRa and LoRaWAN-TÜV Rheinland
2023-08-15
The Robert C. Martin Clean Code Collection - Martin, Robert C-.m
2023-08-15
Alice and Bob: A History Of The World’s Most Famous Couple
2023-08-07
IPC进程间通信
2019-05-03
在ubuntu上配置ftp服务器的说明文档,亲测可用(图片)
2018-08-26
福昕阅读器--linux最新版
2020-11-14
配置samba服务器的配置文件备份
2018-08-25
最新GeoLite2资源整合.zip
2020-10-03
dbeaver-ce_7.2.4_amd64最新版本|dbeaver-ce_7.2.4_amd64.deb
2020-11-14
自己参考网上的资源配置的vim编译器配置文件
2018-08-25
bsearch.zip
2020-04-18
RFC2616中文翻译-有待改进.odg
2020-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅