- 博客(294)
- 收藏
- 关注
原创 moby-dockerd-启动流程详解
本文详细解析了Docker守护进程(dockerd)的启动流程架构和实现细节。主要内容包括: 三层架构设计 进程层(cmd/dockerd/main.go):处理基础进程操作 CLI装配层(daemon/command/docker.go):构建cobra命令树 服务层(daemon/command/daemon.go):核心daemon启动流程 13阶段启动流程 从环境检查到API服务启动的完整过程,重点包括: 文件系统准备 containerd初始化 HTTP服务器框架搭建 daemon核心对象创建 路
2026-07-01 23:11:13
294
原创 通用服务可用性治理手段
本文探讨了RPC调用中的幂等接口设计与重试机制。主要内容包括:1) 网络超时的三种场景及幂等接口的必要性,天然读接口幂等,写接口需特殊设计;2) 四种幂等实现方案(Redis分布式锁、数据库防重表、Token机制、CAS版本控制);3) 重试策略(退避算法)与风险控制,强调需设置最大重试次数(建议重试请求比<10%),对非关键服务、已重试请求和过载情况应避免重试。文章通过数据库操作示例说明幂等性原理,指出合理设计可避免重试风暴,保障系统稳定性。
2026-06-29 23:11:06
191
原创 高并发写场景:异步写与写聚合
本文探讨了应对高并发写请求的四种技术方案:1)数据分片扩容虽然能提升系统扩展性,但存在服务器成本高、扩容响应慢的局限;2)异步写通过请求暂存、后台处理的方式解决系统吞吐不足问题,适用于支付接口调用等场景;3)秒杀系统采用消息队列实现抢购异步化,缓解数据库压力;4)写聚合技术(如Kafka批量发送、AliSQL行锁优化)能显著减少实际写操作次数。这些方案各有适用场景,需根据业务特点选择组合使用,在性能提升与成本控制间取得平衡。
2026-06-28 09:43:54
196
原创 高并发写场景:数据分片之数据库分库分表
摘要:分库分表是解决数据库性能瓶颈的两种主要方法。分库将数据拆分到多个数据库,提高并发处理能力;分表将数据拆分到多个表,解决单表数据量过大问题。拆分方式包括垂直拆分(按业务或字段划分)和水平拆分(按数据规则分布)。水平拆分需选择合适的数据路由算法(如范围分区、哈希分区或一致性哈希)以避免数据倾斜和热点问题。扩容可采用从库升级法,平滑增加分库数量。分库分表需根据业务场景(数据量、并发量)选择合适的拆分策略。
2026-06-25 23:30:56
248
原创 高并发读场景总结:CQRS
本文介绍了CQRS(命令查询职责分离)模式及其在微服务架构中的应用。CQRS通过分离数据读写操作,使用不同存储系统分别处理写请求和读请求,并通过消息队列同步数据变更。文章详细阐述了CQRS的架构实现,包括写存储处理变更、消息队列传递变更、读存储更新数据的过程,并列举了数据库主从复制和Redis缓存两种典型场景。同时分析了搜索场景和多表关联查询场景下的具体应用方案,指出CQRS模式下需要选择适合读写特性的不同存储系统,并强调了该模式只能保证最终一致性的特点。
2026-06-23 09:12:20
221
原创 分布式缓存
本文对比了本地缓存与分布式缓存的特性,重点分析了Redis作为分布式缓存的优势(数据类型丰富、持久化、高可用、分布式能力)。详细介绍了Redis缓存使用流程,提出设置合理过期时间的重要性。针对缓存三大问题给出解决方案:布隆过滤器防穿透、随机过期时间防雪崩、先更新数据库再删缓存的更新策略。最后指出删除缓存失败时应采用重试机制确保一致性。文章系统性讲解了缓存技术的关键要点与实践方案。
2026-06-17 09:18:53
232
原创 高并发读:本地缓存
本文摘要: 文章系统介绍了缓存优化策略及缓存击穿问题解决方案。首先阐述了缓存的基本原理和三种常见淘汰策略:FIFO(先进先出)、LFU(最不常用)和LRU(最近最少使用)的优缺点。然后重点解析了W-TinyLFU策略,该策略结合LFU和LRU的优势,通过分区域管理(WindowLRU和SegmentLRU)和Count-Min Sketch近似算法实现高效缓存。最后讨论了缓存击穿现象及其解决方案,特别介绍了Golang的SingleFlight同步原语,通过合并重复请求来减轻数据库压力。文章通过理论分析和代
2026-06-14 10:32:00
257
原创 消息中间件
消息中间件通过生产者-消费者模式实现异步通信,典型应用如邮件系统。其核心价值体现在三方面:1)异步化处理(将非核心业务异步执行,降低响应时间);2)流量削峰(平滑处理突发流量);3)服务解耦(通过消息队列消除服务间强依赖)。Kafka作为分布式消息系统,采用主题(Topic)-分区(Partition)架构,通过ZooKeeper管理集群元数据,实现负载均衡和故障恢复。其高可用性依靠多副本机制,采用ISR(同步副本集合)平衡数据一致性与性能。当Broker故障时,Controller会基于ZooKeeper
2026-06-13 19:21:36
463
原创 存储层技术:其他NoSQL数据库和RPC
本文系统介绍了四种主流NoSQL数据库(文档、列式、全文搜索、图数据库)的特点及适用场景,并分析了NewSQL数据库融合SQL与NoSQL优势的创新思路。随后深入解析RPC服务原理,阐明其通过序列化/编解码技术实现远程方法调用的机制,对比RPC与HTTP服务的层级关系,指出RPC框架通过代理模式屏蔽网络细节,使开发者能像本地调用一样执行远程过程。全文呈现了现代分布式系统中数据存储和服务通信的核心技术演进路径。
2026-06-10 22:02:05
332
1
原创 存储层LSM Tree
LSMTree是一种高效处理高并发写入的键值存储模型,兼顾查询性能,是BigTable、HBase等NoSQL数据库的核心结构。其核心原理是利用磁盘顺序读写(优于随机读写)的特性,通过MemTable(内存有序结构)、ImmutableMemTable(只读过渡状态)和SSTable(持久化有序文件)的分层设计实现高效写入与查询。数据写入时先更新MemTable并记录WAL日志,达到阈值后转为SSTable文件,并通过分层合并(Leveled Compaction)消除冗余。查询时按数据新旧程度依次检索各层
2026-06-07 07:30:05
293
原创 存储技术Redis
Redis特点及高可用架构解析 Redis具有内存存储、丰富数据类型、分布式支持和单线程原子性等特点。其高可用架构包括: 主从模式:通过全量/增量复制实现数据同步 哨兵模式:引入Sentinel节点自动选举新Master 集群模式:采用哈希槽分片(16384个槽位),使用Gossip协议通信,支持节点动态加入和故障转移 中心化架构:通过Twemproxy/Codis等中间件实现代理分片,其中Codis包含CodisServer、CodisProxy、Zookeeper和Dashboard等组件 不同架构各具
2026-06-06 08:45:20
259
原创 存储层技术MySQL
MySQL高可用架构综述 MySQL作为开源关系型数据库,具备易用性、高性能和可定制性等优势,广泛应用于各类场景。为确保服务可靠性,MySQL支持多种高可用架构: 主从模式:基础架构,通过异步/半同步复制实现数据同步,存在数据丢失风险 MHA方案:成熟解决方案,10-30秒内完成自动故障转移,最大程度保证数据一致性 MMM架构:双主模式,通过虚拟IP实现故障切换,支持读写分离 MGR集群:基于Paxos协议,支持单主/多主模式,提供强一致性和高容错性 各方案在数据一致性、故障恢复时间和复杂度等方面各有特点,
2026-06-03 09:17:30
220
原创 接入LVS+Nginx和服务发现
本文介绍了基于LVS和Nginx的负载均衡架构设计。LVS作为四层负载均衡器提供高性能转发,Nginx作为七层负载均衡器实现业务路由。架构采用DNS轮询扩展LVS性能,Keepalived+VIP实现高可用,形成完整的接入层解决方案。同时阐述了服务发现机制,包括地址注册/发现、健康检查(主动探活和心跳探活)以及变更推送策略,并讨论了推送风暴的应对方法。文章提供了完整的系统架构图和详细的技术实现方案。
2026-05-31 16:50:48
310
原创 接入层LVS
本文介绍了Nginx和LVS在高并发场景下的应用及LVS的四种转发模式。Nginx作为应用层代理服务器性能有限,需集群部署并由LVS作为四层负载均衡器协调。LVS工作于网络层,性能更高,支持NAT、FULLNAT、TUN和DR四种转发模式:NAT模式需修改IP地址且所有流量经过DS;FULLNAT优化了NAT,不要求同局域网但会丢失客户端IP;TUN模式通过IP隧道转发,响应不经过DS;DR模式通过改写MAC地址转发,性能最佳但要求同局域网。四种模式在部署复杂度、性能和支持场景上各有特点,需根据实际需求选择
2026-05-31 10:19:36
271
原创 接入层Nginx
早期互联网直连架构存在可用性、扩展性差及安全隐患。Nginx 作为七层反向代理,可实现请求路由与负载均衡,搭配相关模块支持配置热更新,有效解决原有架构缺陷,提升系统性能与安全性。
2026-05-28 09:14:59
453
原创 DNS和HTTP DNS
本文介绍了互联网社交应用Friendy的单机房架构及DNS解析机制。架构包含DNS服务器、LVS负载均衡、Nginx集群、业务服务器、RPC服务、存储层等组件,形成完整的服务链路。重点解析了DNS系统的层级结构(根、顶级、权威、本地域名服务器)和递归查询过程,并指出传统DNS存在延迟、劫持等问题。为解决这些问题,提出了HTTPDNS方案,通过HTTP协议直接获取最优IP地址,具有低延迟、防劫持、精准调度等优势。最后给出了HTTPDNS实践中的容灾策略,包括降级机制和兜底IP方案,确保服务可靠性。
2026-05-25 09:33:39
513
原创 Go依赖管理
Go依赖管理经历了从GOPATH到Go Modules的演进。GOPATH模式下代码须放在固定src目录,存在无版本控制、依赖不一致、无法区分多版本三大弊端。Go Modules通过go mod命令和GO111MODULE、GOPROXY、GOSUMDB、GOPRIVATE等环境变量,实现了版本管理、代理加速、防篡改校验和私有模块支持,成为现代Go项目的标准依赖管理方案。
2026-05-23 20:37:47
437
原创 Go pprof性能剖析
Go语言内置的pprof工具是性能分析的利器,支持CPU、内存、阻塞和锁竞争等多维度分析。它提供两种使用方式:通过net/http/pprof包实现Web可视化分析,或通过runtime/pprof生成profile文件进行命令行分析。pprof能生成火焰图直观展示性能瓶颈,其中横轴表示函数抽样数,纵轴显示调用栈深度。开发者可通过top、web等命令快速定位热点代码,结合火焰图识别"平顶"函数进行优化。该工具还支持内存泄漏检测和goroutine阻塞分析,是Go程序性能调优的核心工具。
2026-05-22 09:36:50
445
原创 Go语言加密算法
本文系统介绍了密码学中的Hash算法和加密算法。Hash算法具有单向性、输入敏感性和抗碰撞性等特点,常见算法包括MD5、SHA系列和RIPEMD等。对称加密算法使用相同密钥进行加解密,如DES、3DES和AES,具有高效性但密钥管理困难;非对称加密算法使用公钥/私钥对,如RSA和ECC,安全性更高但计算复杂。文章详细说明了各类算法的实现原理、特点和应用场景,并提供了Go语言的具体实现示例,包括密钥生成、数据加解密等核心操作。最后介绍了椭圆曲线加密(ECC)的优势和实现方法。
2026-05-20 10:04:41
484
原创 GoFrameMap转换详解
本文详细解析了Go语言中gconv.Map()方法的实现原理。该方法通过递归处理将各种数据类型转换为map[string]any格式,主要处理流程包括:1) 获取转换选项参数;2) 对输入值进行类型判断,处理JSON字符串、基础map类型等特殊情况;3) 使用反射处理复杂类型(struct/array/map等),通过递归调用实现嵌套结构的转换;4) 支持通过struct tag自定义字段映射关系。转换过程考虑了指针解引用、错误处理、空值处理等多种边界情况,最终输出标准化的map结构。该实现展示了Go反射机
2026-05-17 11:56:46
391
原创 GoFrame类型转换详解
本文详细介绍了GoFrame框架中的gconv模块提供的多种类型转换方法,包括Int()、Uint()、Float32()、Bool()、String()、Bytes()、Ints()、Floats()和Interfaces()等。这些方法通过接收任意类型(any)参数,利用反射机制和类型断言实现灵活的类型转换。文章深入分析了各方法的源码实现,展示了如何处理不同输入类型(如基本类型、切片、字符串等)的转换逻辑,包括错误处理和特殊情况的处理方式。这些转换方法为Go开发提供了便捷的类型转换工具,支持从简单类型到
2026-05-16 20:07:51
391
原创 Go语言常见并发模式
本文介绍了Go语言中常用的6种并发设计模式:1)屏障模式,通过通道同步阻塞聚合多个goroutine结果;2)未来模式,采用异步处理方式,主goroutine不等待子goroutine结果;3)管道模式,模拟生产流水线,通过多道工序处理数据;4)扇出扇入模式,实现多路复用通道数据;5)协程池模式,控制goroutine数量以减少资源消耗;6)发布-订阅模式,实现消息的发布与订阅解耦。每种模式都提供了典型应用场景和代码示例,展示了Go语言在并发编程中的灵活性和高效性。这些模式为解决实际开发中的并发问题提供了有
2026-05-14 09:19:56
388
原创 负载均衡详解
负载均衡技术是分布式系统中的关键组件,用于优化资源使用、提高吞吐量并确保高可用性。文章介绍了负载均衡的基本概念、发展历程以及常见实现方式,包括基于DNS、反向代理和NAT的技术方案。重点分析了四种核心算法:轮询调度(简单轮流分配)、随机算法(概率均衡)、一致性哈希(地址固定映射)和键值范围(按数值区间分配),分别阐述了其实现原理、代码示例及优缺点。随着互联网业务复杂度提升,负载均衡从早期DNS方案演进为专用软硬件解决方案,有效解决了单点故障和性能扩展问题,成为现代系统架构中不可或缺的基础设施。
2026-05-11 23:07:08
576
原创 分布式详解
分布式系统是由多台计算机通过网络协同工作完成任务的系统。其核心目标是通过廉价机器集群处理单机无法胜任的计算存储任务,在成本与性能间取得平衡。系统设计面临三大挑战:节点异构性、高故障率和网络不确定性。关键技术包括分片与复制机制提升性能与可靠性,以及一致性协议(如Paxos/Raft)解决数据同步问题。典型架构包含负载均衡、分布式缓存、RPC通信、服务注册发现等组件,支持水平扩展和高可用。CAP定理揭示了分布式系统需要在一致性、可用性和分区容错性之间权衡,而FLP定理则证明完全异步系统中共识问题无确定性解法。现
2026-05-10 11:41:33
605
原创 MySql常见ORM
摘要: ORM(对象关系映射)是连接关系型数据库和对象模型的中间件技术,通过映射实现数据库表与程序实体的关联。它解决了传统硬编码方式维护困难、缺乏弹性等问题,遵循简单性、传达性和精确性三大原则。文章详细介绍了GORM和Beego ORM两种Go语言ORM框架的使用方法,包括数据库连接、CRUD操作、事务处理等核心功能,并比较了它们的异同。两种框架都支持原生SQL查询和事务处理,其中GORM采用自动迁移表结构,而Beego ORM需要手动注册模型。ORM技术有效降低了系统耦合度,实现了业务逻辑与数据逻辑的分离
2026-05-08 09:36:44
469
原创 Go使用MySql
本文介绍了在Go语言中使用database/sql包操作MySQL数据库的常用方法。主要内容包括:1) 数据库连接配置,包括连接池设置;2) 基本CRUD操作,如查询(Query/QueryRow)、插入(Exec)等;3) 预处理语句(Prepare)的使用及其优势;4) 事务处理(Begin/Commit/Rollback);5) 错误处理技巧,特别是NULL值和特定错误的处理;6) 使用注意事项,如资源管理、大整数处理等。文章还提供了连接池监控、存储过程调用等进阶内容,适合需要高效安全操作MySQL的
2026-05-05 09:17:00
413
原创 Go Socket编程
Socket是网络通信中的关键端点,作为应用层与传输层间的桥梁。文章详细介绍了Socket的基本概念和工作原理,重点讲解了Go语言中TCP/UDP Socket的实现方式。通过net包提供的Dial()、Listen()等函数,开发者可以便捷地建立网络连接。文中包含TCP/UDP服务端和客户端的完整代码示例,展示了消息收发的基本流程,并特别说明了UDP无连接的特性。最后提供了语雀文档地址供读者深入参考,全面覆盖了Socket编程的核心知识点。
2026-05-04 09:56:39
434
原创 Go Web基础和Http演进
本文介绍了Go语言处理HTTP请求的核心机制。通过net/http包可快速创建服务器,使用HandleFunc()注册路由和处理器。详细解析了请求处理流程:从客户端请求到多路复用器分发,再到处理器执行逻辑并返回响应。深入探讨了Request结构体、URL解析、请求头和主体处理,以及ResponseWriter接口原理。同时对比了HTTP/1.1的局限性,介绍了HTTP/2基于SPDY协议的改进和Go中的实现方式。最后展望了HTTP/3采用QUIC协议解决队头阻塞问题的创新设计,包括0-RTT连接、多路复用、
2026-05-02 19:05:17
628
原创 Go反射应用技巧
Go语言反射机制解析 摘要:本文介绍了Go语言中的反射机制原理与应用。反射允许程序在运行时动态调用对象的方法和属性,主要通过reflect包实现。文章阐述了接口与反射的关系,详细讲解了TypeOf和ValueOf函数的使用方法,包括已知类型和未知类型的处理方式。同时分析了反射的性能问题,提出了反射三大法则:接口变量与反射对象的相互转换规则,以及修改反射对象的可写性要求。最后提供了反射在实际编程中的应用示例和注意事项。
2026-05-02 10:43:29
452
原创 数组和切片实战
本文介绍了Go语言中数组操作的常用方法:1)检查值是否存在数组中,通过遍历逐个比较;2)查找元素位置,使用reflect包获取数组值后遍历查找;3)查找最大/最小值,通过循环比较交换;4)随机打乱数组,采用Fisher-Yates洗牌算法;5)删除重复元素,使用双指针原地修改;6)一维数组排序,利用sort包接口实现;7)二维数组排序,实现sort.Interface按指定列排序;8)三维数组生成,使用make和循环嵌套创建。文章提供了完整的代码示例和执行结果,展示了Go语言处理数组的多种技巧。
2026-04-26 11:30:39
262
原创 Go字符串实战
本文主要介绍了Go语言中字符串处理的12个实战技巧,包括中文字符串截取、字符串反转、随机字符串生成、大小写转换、CSV数据处理、中文字符提取等功能实现。针对中文处理特别说明了rune类型转换的重要性,避免乱码问题。文章通过代码示例演示了strings、regexp、encoding/csv等标准库的使用方法,涵盖了字符串分割、合并、修剪等常见操作,并提供了加密级随机字符串的实现方案。这些技巧为Go开发者提供了实用的字符串处理参考,特别是对中文等Unicode字符的特殊处理方案。
2026-04-25 22:03:41
427
原创 图解defer
本文详细介绍了Go语言中defer关键字的执行机制和相关特性。主要内容包括:1) defer采用栈结构执行,遵循"先进后出"原则;2) defer在return之后执行,函数返回值先初始化再执行defer;3) 有名返回值与defer的交互,defer可修改返回值;4) defer与panic的关系,包括未捕获异常和捕获异常的不同情况;5) defer中包含panic时的处理逻辑;6) defer函数参数中包含子函数时的执行顺序。文章通过多个代码示例详细展示了各种场景下defer的执行流
2026-04-23 22:56:21
442
原创 图解Go语言逃逸
本文探讨了Go语言中的逃逸分析机制。通过多个代码示例展示了变量何时会从栈逃逸到堆,包括函数返回局部变量指针、interface{}赋值、map操作、slice传递等场景。编译器会根据变量作用域自动决定内存分配位置,当变量作用域超出函数范围时就会发生逃逸。文章详细分析了各种引用类型(指针、切片、map、channel等)在不同操作下可能产生的逃逸现象,并提供了使用go build -gcflags="-m"命令查看逃逸分析结果的方法。这些规则对理解Go内存管理和性能优化具有重要意义。
2026-04-21 23:13:34
428
原创 图解I/O复用并发模型
本文介绍了网络并发模型中的关键概念:流和I/O操作。流是支持I/O操作的内核对象,通过文件描述符进行数据传输。I/O操作包括读写操作,当流满或空时会导致阻塞。文章对比了阻塞等待和非阻塞轮询两种状态,指出阻塞等待不占用CPU但效率低,非阻塞轮询占用资源但能并发处理。为解决阻塞问题,提出了多线程/进程、非阻塞轮询、select和epoll四种方案,重点分析了epoll的水平触发和边缘触发模式的特点:水平触发安全但性能较低,边缘触发高效但可能丢失事件。
2026-04-20 22:37:07
380
原创 图解常见网络I/O复用模型
本文分析了6种服务器并发模型的设计与实现。模型1是单线程串行处理,并发量为1;模型2引入多线程处理业务,支持并发但线程开销大;模型3采用I/O复用机制监听多连接,但业务处理仍串行;模型4加入业务工作池提升业务并行度;模型5通过连接线程池提升读写并行通道;模型6进一步为每个连接创建独立线程,但CPU切换成本高。文章详细比较了各模型的优缺点,指出模型5在并发性能和资源消耗间取得较好平衡,而模型6虽理论性能最优但实际硬件难以支撑。
2026-04-19 23:17:49
408
原创 TCMalloc模型
TCMalloc内存管理机制解析 TCMalloc采用三级缓存架构优化内存分配效率: ThreadCache:线程独享的无锁缓存,处理高频小对象分配 CentralCache:全局共享缓存,需加锁访问,作为ThreadCache的补充 PageHeap:管理大对象内存,直接对接操作系统虚拟内存 核心特点: 小对象(<256KB)优先通过ThreadCache分配,避免锁竞争 中对象(256KB-1MB)由PageHeap直接处理 大对象(>1MB)通过特殊算法分配 采用Span管理连续Page,
2026-04-18 08:36:48
444
原创 图解内存管理
计算机存储呈速度与容量反比的金字塔结构,物理内存有限且直接分配易浪费、冲突。操作系统引入虚拟内存,通过 MMU、页表与 TLB 实现地址映射,支持共享、写时复制和磁盘拓展,结合内存局部性提升效率,保障多进程高效运行。
2026-04-12 10:51:56
425
原创 图解Go1.5屏障机制和Go1.8混合屏障
本文系统性地阐述了垃圾回收中的三色标记算法及其屏障机制。主要内容包括:1)强三色不变式和弱三色不变式的原理差异;2)插入屏障和删除屏障的实现机制及其伪代码描述;3)Go 1.8引入的混合写屏障技术,结合了插入和删除屏障的优点;4)通过多个具体场景详细演示了不同屏障机制的工作流程;5)分析了栈空间和堆空间对象处理的特殊考量。文章采用伪代码和图示相结合的方式,清晰地展现了垃圾回收过程中对象状态的演变过程,特别是如何处理黑色对象引用白色对象的关键问题。最后还提供了相关技术资料的获取途径。
2026-04-11 11:17:14
423
原创 图解Go1.3标记清除和1.5三色标记
Go语言垃圾回收算法演进:从标记清除到三色标记 摘要:本文详细介绍了Go语言垃圾回收算法的演进过程。首先分析了标记清除算法(GoV1.3)的工作流程,包括标记和清除两个阶段,以及STW(Stop The World)机制带来的性能问题。随后介绍了GoV1.5引入的三色标记法,将对象分为白、灰、黑三种颜色,通过并发标记提高性能。文章重点阐述了在三色标记过程中可能出现的对象丢失问题,以及触发这种问题的两个必要条件。最后指出STW虽然能解决安全问题,但会造成资源浪费,为后续优化留下空间。
2026-04-08 22:36:32
335
原创 图解GMP模型
Go语言GMP调度模型解析:全局队列(GlobalQueue)存储待运行Goroutine,P的本地队列优先存储新G,最多256个。P数量由GOMAXPROCS决定,M数量默认10000。调度策略包括线程复用(偷取/移交机制)、并行控制、10ms抢占式调度。创建流程涉及M0(主线程)和G0(调度专用),系统调用时P会转移给新M。该模型通过智能调度实现高效并发,平衡了资源利用与性能。
2026-04-06 15:25:44
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅