- 博客(332)
- 资源 (12)
- 收藏
- 关注
原创 K8S的服务注册
本文主要用来介绍K8S的服务注册和发现,算是笔者对这部分知识的一个学习笔记。一、服务注册每个 Kubernetes 服务都会自动注册到集群 DNS 之中。注册过程大致如下:1.Servic...
2021-08-28 18:42:52
3100
1
原创 Go代码质量检测资料整理:7大工具让你的代码无可挑剔
代码质量不是一蹴而就的,而是靠工具+规范+流程共同保障。这7款工具覆盖了从格式、风格、正确性到安全的方方面面,合理组合使用,可以显著提升Go项目的质量。今天,笔者整理了7款Go开发者必备的质量检测工具,覆盖从开发到上线的全流程,助你写出高质量代码。在Go语言开发中,写出能运行的代码只是第一步。· 📈 降低维护成本:减少技术债务,让代码更易读、易改。· 🚀 提升性能:发现低效代码,优化资源使用。· SA类:死代码、逻辑错误、资源泄漏。
2026-03-25 20:25:05
92
原创 Access-Control-Expose-Headers介绍
如果服务器返回了任何自定义的响应头(如 X-Total-Count、Authorization、X-User-Id),浏览器会将其屏蔽,不暴露给 JavaScript。服务器在预检响应中也可以包含 Access-Control-Expose-Headers,告知浏览器在实际请求中哪些头部可以被读取。在身份验证场景中,服务器可能在响应头中返回新的 Authorization 或 X-Refresh-Token,前端需要读取并存储。:该头既可以在实际响应中返回,也可以在预检(OPTIONS)响应中返回。
2026-03-24 22:35:43
245
原创 envoy扩展技术Envoy External Processing
External Processing (ext_proc) 是 Envoy 提供的一个 HTTP 过滤器,它允许将请求和响应的处理逻辑委托给一个外部 gRPC 服务。envoy是基于C++开发的,虽然提供了很完善的功能实现,但是还是会存在一些定制化的功能不支持的情况,而直接二次开发envoy 的门槛比较高,所以envoy提供了ext这种扩展技术。· 若仅需修改 Headers,设置 request_body_mode: NONE 和 response_body_mode: NONE。
2026-03-22 09:04:06
332
原创 自定义 Host 头访问 HTTPS 服务时的网关处理逻辑
如果 SNI 是 baidu.com,网关会转发给 baidu.com 的后端,即使 Host 头是 abc.in.com,后端收到后可能无法正确处理(因为后端可能依赖 Host 头)。此时可能出现“绕过”现象:外网用户通过 baidu.com 的入口,却访问到了本该只对内网暴露的 abc.in.com 服务(如果 abc.in.com 也在该网关的配置中)。网关的视角:看到来自客户端的 TCP 连接,目标 IP 是网关自身的 IP(如果网关就是 baidu.com 的入口),或者经过 NAT 转发。
2026-03-20 21:04:34
435
原创 我对Ai Coding的几点认知
Ai Coding来势汹汹,特别是2025年底之后,个人觉得这东西已经不在是玩具,真的可以帮助开发人员提效,并且随着龙虾模式的推出,已经能看出来Ai Coding在重复性,标准化比较清晰的产品上面产出能力已经远远超过了资深程序员。比如传统的银行系统,通讯系统,批量使用的嵌入式系统,靠近底层的操作系统类产品,与硬件绑死的驱动类产品,我们这里指的是在原有的基础上做迭代开发,不是重新写一套。,这些产品诞生的比较早,代码语言,设计方式都是比较早的,Ai 学习这些东西比较吃力,因为资料非常有限。
2026-03-19 09:22:54
295
原创 ebpf的可观测性利器obi
3. OpenTelemetry Collector Receiver:从 v0.5.0 版本开始,OBI 可以作为 Collector 的一个 Receiver 组件运行,将数据送入 Collector 强大的处理管道,进行过滤、采样、加密后,再分发到一个或多个后端。OBI 不侵入应用进程,而是作为一个独立的、运行在用户空间的守护进程,负责加载和管理内核中的 eBPF 程序。支持 Java (JDK 8+)、.NET、Go、Python、Ruby、Node.js、C、C++ 和 Rust。
2026-03-17 12:37:26
354
原创 eBPF程序性能监控与优化利器bpftop
bpftop正是这一理念的实践产物。bpftop是一个由Netflix开源的命令行工具,旨在为eBPF程序的性能监控与优化提供实时、动态的可视化视图。它能够显示系统所有运行中eBPF程序的平均执行时间、每秒处理的事件数以及估算的CPU使用率等关键指标,并以类似top命令的交互式界面或随时间变化的图表形式呈现。随着Netflix在生产环境中大规模部署基于eBPF的各类系统(如网络观测、安全监控等),工程师们发现需要一种能够精确量化eBPF程序开销的方法,以便在发挥eBPF强大能力的同时,避免对系统造成过载。
2026-03-16 21:19:00
234
原创 eBPF的高效构建依赖验证工具mkcheck2
mkcheck2的研究论文显示,通过采用eBPF,系统调用追踪的开销相比传统的ptrace方法降低了高达99.7%。mkcheck2的核心创新在于结合了eBPF(扩展伯克利数据包过滤器)的系统调用追踪能力与增量分析技术,从根本上解决了传统依赖验证工具的两大痛点:高运行时开销和全量分析的效率问题。这些eBPF程序将采集到的信息存储在内核的eBPF Maps中,并通过perf_buffer或ring_buffer机制高效地传递给用户空间的分析引擎。在大型软件项目中,维护正确的依赖规格说明是一个重大挑战。
2026-03-15 21:55:29
359
原创 eBPF 实用命令行工具详解
这些工具大多来自 BCC 项目,部分为独立项目。· Linux 4.1+(使用 tracepoint block/block_rq_issue 和 block/block_rq_complete)· Linux 4.5+(使用 tracepoint syscalls/sys_enter_open 及 sys_enter_openat)· 监控系统中建立的 TCP 连接,查看本地和远程地址、端口、发送/接收的数据量、持续时间等。· 查看每一次磁盘 I/O 的详细信息,包括进程、设备、扇区、大小、延迟等。
2026-03-14 19:07:29
287
原创 eBPF在云原生领域最成功的应用之一Cilium
假设要让所有带有role=frontend标签的Pod访问带有role=backend标签的Pod,传统的基于IP的防火墙需要在每一个运行backend Pod的节点上维护包含所有frontend Pod IP地址的访问控制列表。这个身份是一个简单的数字标识符,存储在Cilium内部的身份库中。3. 基于身份的执行:在接收端节点,Cilium的eBPF程序会解析数据包,提取出发送者的身份,然后仅根据这个身份(而非IP)与预先加载到内核中的网络策略进行匹配,快速决定是允许还是拒绝该数据包。
2026-03-09 09:43:10
260
原创 ebpf之bpftrace介绍
你可以把它想象成一个给 Linux 系统各个角落(函数调用、系统事件等)挂上“钩子”的工具,钩子触发时,可以按照你的意愿提取参数、返回值或执行自定义的计数、统计操作。pid(进程ID)、tid(线程ID)、comm(进程名)、nsecs(纳秒时间戳)、kstack(内核栈)、arg0...argN(函数参数)、retval(返回值)。内核中的 BPF 验证器会严格检查代码的安全性(如是否存在无限循环、非法内存访问)。· count()、sum(x)、avg(x)、min(x)、max(x):聚合函数。
2026-03-05 21:19:20
354
原创 ebpf之bcc介绍
ext4slower / btrfsslower / xfsslower / zfsslower:追踪特定文件系统(如ext4、XFS)的读、写、打开、同步等操作,并仅打印超过指定阈值的慢操作,帮助识别应用感知的延迟。· 自己动手开发:BCC的安装包通常还提供一个 bcc-doc 包(或类似的示例目录),里面包含了从 hello_world.py 开始的各种开发示例,供你学习如何编写自定义的BCC工具。· 功能:追踪块设备I/O层的每一个请求,打印进程、起始时间、延迟、扇区、大小等信息。
2026-03-05 09:48:07
356
原创 Istio Ambient Mesh 介绍
随着Ai coding的落地,笔者认为mesh下沉到宿主机层面,并暴露更加简单的能力给到Agent使用,会成为必然方向,而Ambient mesh就会成为大趋势,所以笔者计划推动一次架构升级。· 工作机制:它监听 Pod 的生命周期,并在宿主机上配置路由和 iptables 规则,或者配置 eBPF 程序,将应用程序 Pod 的流量转发到本节点的 ztunnel。· 安全覆盖层(四层治理):提供一个基础的、节点共享的零信任隧道(ztunnel),负责处理 L4 的流量加密(mTLS)、遥测和简单授权。
2026-03-04 22:35:41
272
原创 python自动化修改代码技术monkey patch
Monkey Patch(猴子补丁)是一种在运行时动态修改类或模块的技术。它允许我们替换、添加或修改已有的属性、方法,从而改变代码的行为,而无需修改原始源代码。看名字就知道是一种hack技术,不过只要应用得当,确实也是一个利器。本篇文章是笔者针对不同语言对代码进行自动注入的第三篇,目的是为了解决基础设施代码自动注入到业务代码的技术探讨,比如不在需要业务开发人员在业务代码中写类似全链路追踪这类功能的代码逻辑。Monkey Patch 会让代码行为变得隐式,增加调试难度,尤其是跨模块使用时。
2026-03-03 09:34:57
267
原创 go代码自动注入技术介绍
go build -toolexec="/my/instrument toolexec" 时,go 命令不会直接运行 compile,而是运行 /my/instrument toolexec,并将原始工具(如 compile)的路径及其参数作为参数传递给它。通过解析参数,它能获知当前编译的包路径(-p 标志)、目标文件(-o)、临时目录以及需要编译的所有 .go 文件列表。// 假设第一个参数是原始工具路径,如 /usr/lib/go/pkg/tool/linux_amd64/compile。
2026-03-02 21:19:16
324
原创 自动注入代码技术之java agent
Java Agent 是 Java 平台提供的一种工具包,允许开发者在 Java 虚拟机(JVM)启动后或运行时,修改已有程序的字节码,从而实现方法级别的增强或监控。当 JVM 加载类时,Agent 可以通过 java.lang.instrument 包提供的 API,拦截类加载过程,修改其字节码后再交给 JVM 执行。而这里采用的关键技术就是Java agent, 就我们目前使用的情况来看,这类字节码增强非常强大,不过线上使用的稳定性方面要额外关注,特别是attach时候,对cpu和mem的影响。
2026-03-02 12:28:29
315
原创 大批量的Connection: close请求会打爆服务器
即使你的业务代码在逻辑上忽略了或移除了这个头部,但底层的网络库(如Go的net包、Java的Socket)已经根据标准HTTP/1.1的语义做出了判断:既然客户端要求关闭,那么在响应结束后,就应该主动关闭这个连接。它维护了一堆建立好的连接,当有新的请求到来时,直接从池子里拿出一个来用,避免了重复建立TCP连接(三次握手)和可能的安全协商(TLS握手)的开销。当携带有 Connection: close 的请求到来时,即便使用的是连接池中的连接,请求完成后,该连接也会被强制关闭并从池中移除。
2026-02-28 09:08:39
428
原创 ebpf的关键技术xdp介绍
它提供了一种在内核中安全、高效运行沙箱程序的能力,包括指令集、验证器、即时编译器(JIT Compiler)和用于数据交互的eBPF映射(Maps)。它定义了一个特定的挂钩点(即网卡驱动中的xdp点),并规定了这个点上eBPF程序可以执行的动作(如XDP_DROP、XDP_PASS等)。· Katran:Facebook开源的基于XDP的四层负载均衡器,展示了XDP在大规模生产环境中的能力。简单来说,XDP是eBPF的一个关键挂钩点(Hook),而eBPF是XDP程序的执行引擎。
2026-02-27 15:48:06
264
原创 ebpf替换iptables做流量劫持
目前看到社区的性能压测提升20%左右,实话讲如果流量不大的话,比如qps不上万,其实没必要替换,反之建议替换。不过按照笔者的技术判断,ebpf是大趋势,还是需要做谈讨。本人落地的istio是通过iptables做定制化流量劫持的,目前计划往ambient模式演进,劫持流量计划用ebpf做替代,已便提升性能。
2026-02-26 10:45:48
317
原创 代码分析利器CodeQL介绍
污点跟踪(Taint Tracking)则是数据流分析的一种特殊形式,它关注“不可信数据”(污点)如何从源(Source)传播到汇(Sink),并在传播过程中是否经过有效的清理(Sanitizer)。CodeQL 的标准库提供了强大的污点跟踪模块,用户可以轻松地定义自己的源、汇和清理规则,从而发现各类注入漏洞(如 SQL 注入、XSS、命令注入等)。污点追踪(Taint Tracking)是静态分析中的一项核心技术,用于追踪程序中不可信数据的传播路径,从而发现潜在的安全漏洞。我们也可以手动匹配函数签名。
2026-02-25 21:51:56
456
原创 Envoy与Istio HTTP流量故障转移机制介绍
假设一个电商应用,包含用户服务(user-service)和订单服务(order-service),部署在多个地域(us-west1, us-west2, us-central1)。通过以上配置和策略,Envoy和Istio能够为HTTP流量提供企业级的故障转移保障,确保业务在复杂分布式环境中的高可用性。重试是Envoy处理瞬时故障的首要机制。VirtualService定义了HTTP请求的路由规则,是故障转移的核心配置。Envoy作为数据平面代理,通过多层级机制实现HTTP流量的智能故障转移。
2026-02-12 20:01:36
510
原创 分布式系统高可用架构核心机制:故障转移、离群点检测与集群聚合
例如,Oracle数据库的聚集(Cluster)是一种存储表数据的可选方法,将具有同一公共列值的行存储在一起,减少I/O操作次数。离群点检测与故障转移的联动机制十分明确:当离群点检测算法识别出异常节点后,系统可自动触发故障转移流程,将异常节点从服务池中剔除,并将流量重新分配到健康节点。故障转移系统通过持续的心跳检测机制监控主备节点状态,一旦发现主节点不可用,便迅速激活备用节点接管服务,整个过程可在秒级甚至毫秒级完成,对用户透明无感知。,实时识别异常节点,为故障转移提供触发信号。
2026-02-12 19:30:00
416
原创 istio从0到1:如何解决同一个应用不同功能的路由聚合问题
这个方案的核心是引入一个“配置聚合层”,它负责从数据库(或配置中心)读取针对同一应用的所有独立路由功能配置,按照预设的优先级和策略进行合并,最终生成一个完整的、下发到Istio的VirtualService。除此之外,istio的路由功能是在envoy的out bound这个上面实现的,也就是说每次的路由变更必须准确的变更到所有来源应用,也就是down streams上面才行,否则就会存在流量有损。1. 独立存储:金丝雀、环境分组、多活等每个功能的路由规则,都作为独立配置项存储(例如在DB中),彼此解耦。
2026-02-11 09:21:21
465
原创 网关针对api周期的管理思考
对于域名来讲往往是统一规划好的,哪些域名可以使用,那些不能使用,从申请到使用的生命周期相对来说简单很多,不过当中涉及到的dns切流是一个值得研究的点,因为它涉及到了切流的快慢,以及入口网络的延迟,这类问题绝大部分云厂商已经提供了基本解决方案,比如:httpdns的使用。协议的使用,对于网关来讲可能涉及到协议栈的适配,以及证书管理比如https,如何更快的处理这部分是需要好好研究的,不过对于目前的开源网关来讲都做的还不错,像ng类的,envoy类的。api是后端应用提供给前端使用的最小逻辑单位。
2026-02-10 23:34:40
322
原创 istio从0到1:如何解决分布式配置同步问题
istio的控制面istiod包装了virtual service和destination rules ,他们是应用粒度的,而istiod和envoy之间的交互又被拆分成了xds,也就是lds,rds,cds这些,特别是rds和cds,一旦配置下发的顺序不对,就会出现流量有损。同时,istio管控的数据面envoy是分布式的,通常情况下是成千上万的,而istiod的每次批次变更都是类似广播的方式下发到所有的envoy节点,一旦有些节点没有及时下发就会存在流量问题。(这个在后续文章中会单独介绍。
2026-02-05 20:39:36
432
原创 go response.Body.close()导致连接异常处理
Go 的 `http.Transport` 默认启用连接复用(HTTP Keep-Alive)。- `io.Copy(io.Discard, resp.Body)` 会读取并丢弃所有剩余数据。- 此时再调用 `Close()`,内核的 TCP 缓冲区已被清空,连接可安全放回连接池复用。_, err = io.Copy(io.Discard, resp.Body) // 重点!body, err := io.ReadAll(resp.Body) // 完全读取内容。// 主动丢弃残留数据,确保连接可复用。
2026-02-05 07:33:27
438
原创 性能分析工具比较pprof、perf、valgrind、asan
在C++开发中,内存管理和性能优化是核心挑战。本文将专门针对C++环境介绍这些工具的来源、使用场景、技术实现、适用开发阶段,并进行差异性比较,最后提供针对线上环境的CPU和内存排障操作方式。· 编译选项: -fsanitize=address -fno-omit-frame-pointer -g -O1。· 编译选项: -lprofiler -ltcmalloc -g -fno-omit-frame-pointer。· 编译选项: -g -fno-omit-frame-pointer -O2。
2026-02-04 09:02:09
359
原创 性能分析工具:pprof使用介绍
本文介绍一下如何在C++中使用pprof进行性能分析。pprof是Google的性能分析工具,主要用于CPU和内存分析。本文属于工具介绍篇,目的是对日常使用工具做个整理归类,方便使用时进行查看。pprof是一个强大的性能分析工具,特别适合分析C++程序的性能瓶颈。· 检查ProfilerStart/Stop是否被正确调用。// 设置采样频率(默认100次/秒)# 方法2:在代码中控制(更灵活)// ... 线程工作。# 使用pprof的web界面。2. profile文件为空。# 方法1:使用环境变量。
2026-02-04 07:58:25
398
原创 istio从0到1:iptables设置
└─ 规则1:-p tcp → REDIRECT --to-ports 15006(重定向)└─ 规则1:-p tcp → REDIRECT --to-ports 15001(重定向)└─ 规则2:--dport 8090 → ISTIO_IN_REDIRECT(自定义链)
2026-02-02 20:00:00
990
原创 istio从0到1:产品落地过程的问题集锦
feign.client.config.xxxclient.read-timeout 是 Spring Cloud Feign 中用于配置特定 Feign 客户端(其中 xxxclient 是你定义的 Feign 客户端名称)读取响应数据的超时时间的属性(ms为单位)。当连接池中的空闲连接数达到这个限制时,如果再有新的连接请求并且没有可用的空闲连接,连接池可能会选择关闭一些最久未使用的空闲连 接,以便为新的连接请求腾出空间。然而,这个参数并不是所有HTTP客户端库都提供的标准配置选项。
2026-01-29 20:19:13
346
原创 <span class=“js_title_inner“>istio从0到1:产品落地过程的问题集锦</span>
feign.client.config.xxxclient.read-timeout 是 Spring Cloud Feign 中用于配置特定 Feign 客户端(其中 xxxclient 是你定义的 Feign 客户端名称)读取响应数据的超时时间的属性(ms为单位)。当连接池中的空闲连接数达到这个限制时,如果再有新的连接请求并且没有可用的空闲连接,连接池可能会选择关闭一些最久未使用的空闲连 接,以便为新的连接请求腾出空间。然而,这个参数并不是所有HTTP客户端库都提供的标准配置选项。
2026-01-29 20:19:13
255
原创 软中断和网络之间的关系
net.ipv4.tcp_limit_output_bytes = 262144 # TCP输出限制。net.core.netdev_max_backlog = 10000 # 更大的backlog队列。# in(中断)高达50000/秒,系统占用(sy)80%,备注:为了更好展示,格式做了调整。net_rx_action() { // 软中断处理函数。网络数据包到达→硬中断→软中断 → 协议栈处理 → 应用层。· 主要任务:实际的协议栈处理(TCP/IP处理)
2026-01-22 20:58:58
555
转载 网关基础:Cookie和跨域
可访问:www.example.com、api.example.com、example.com。credentials: 'include', // 包含Cookie。'SameSite=Lax', // 防止 CSRF。// 设置 Domain 为根域名,所有子域名都可访问。
2026-01-15 19:13:22
31
转载 Tcp涉及到网络阻塞的参数介绍
导致延迟增加的原因:连接关闭后保持TIME_WAIT状态,占用端口资源。导致延迟增加的原因:接收方延迟发送ACK,等待反向数据捎带或超时。导致延迟增加的原因:检测死连接时的探测间隔,期间连接可能不可用。导致延迟增加的原因:接收窗口为0时的探测间隔,每次探测间隔递增。导致延迟增加的原因:连接空闲后验证拥塞窗口,可能减少窗口大小。导致延迟增加的原因:SYN连接建立重传次数,每次重传间隔递增。导致延迟增加的原因:连接空闲后重新慢启动,拥塞窗口增长缓慢。导致延迟增加的原因:延迟更新接收窗口通告,导致发送方等待。
2026-01-13 20:30:00
50
原创 istio从0到1落地系列之二:你要构建运维面,那是你救命的东西
笔者落地的项目,实现了业务无感知注入sidecar,无感知接管流量,出问题可以一键降级,冷热升级sidecar两种方式,除此之外所有涉及到业务受影响的操作,都支持单应用,批量应用,单应用的单pod粒度操作的操作模式。继续前面的章节,本章节主要来讲mesh运维面的构建,当然这里只会讲构建思路,不会讲细节,并且这些是作者基于经验和研究做的总结,可以理解为如果再做一次,作者会这么来做。后面要做的事情就是如何让业务无感知的接入mesh,如何接入业务的流量到mesh,如何升级数据面版本,流量出问题如何降级。
2025-11-18 19:55:01
284
原创 istio从0到1落地系列之一:开始前你需要关注哪些事情
本人有幸花了3年时间,在一家上市公司将istio从0到1落地下去,并且提供了几个核心的功能给到业务方使用,大大提高了他们的效率。如果你是特意搜到了这篇文章,并且已经在这个行业内做事,恭喜你,你正处在一个核心并且高危的职位上面。毫不夸张的说你的一个不小心,可以让公司瘫痪,甚至可以送走你的技术主管,搞不好CTO都会受到影响。下面是我根据自己落地istio的经验整理的一系列看法和方案,本篇文章主要讲istio开始落地初期,你应该如何选型,以及那些事事是你必须要关注的。
2025-11-17 23:03:40
320
原创 容器里面访问localhost存在不通的情况
最近用envoy gateway发现跨容器采集这里面的metric指标总是失败,curl 却是可以通的。localhost往往是容器里面的,并不是pod级别的,如此就导致网路不通。替换成127.0.0.1的时候,就可以访问通了。
2025-11-17 08:02:15
257
原创 内核网络相关参数梳理
是否允许重用 TIME_WAIT 状态的连接(1:允许,0:禁止)。是否启用 H.323 协议的 NAT 支持(1:启用,0:禁用)。是否启用 TCP 选择性确认(SACK)(1:启用,0:禁用)。是否启用 TFTP 协议的 NAT 支持(1:启用,0:禁用)。是否启用 FTP 协议的 NAT 支持(1:启用,0:禁用)。是否启用 SIP 协议的 NAT 支持(1:启用,0:禁用)。是否启用 Netfilter 日志功能(1:启用,0:禁用)。是否接受 ICMP 重定向消息(1:接受,0:不接受)。
2025-11-17 08:00:23
471
原创 envoy压测
压测信息: envoy版本: 1.23.2-dev istio版本:1.15.2 envoy只打开了access log,没有配置任何VS和DR,去掉了jeager和stat-filter插件,流量通过iptables接管到envoy。 pod层面做的压测,资源为 1c2g的sidecar配比,业务容器是1c2g,响应比较快,request的大小是多少,response就返回多少。 网络是k8s...
2024-04-14 20:47:19
539
1
高质量C++(C) 编程指南
2009-08-16
vim用户手册
2013-03-20
笔试题集锦(C,C++)
2010-02-03
五子棋程序(C++)
2009-08-14
wxWidgets参考手册查询
2009-11-23
WindowsAPIdq.chm(中文版)
2009-08-13
mysee客户端的配置文件
2009-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅