<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" 
  xmlns:content="http://purl.org/rss/1.0/modules/content/" 
  xmlns:dc="http://purl.org/dc/elements/1.1/" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
  xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Mark 的滿紙方糖言</title>
    <link>https://blog.mygraphql.com/zh/</link>
    <description>Recent content on Mark 的滿紙方糖言</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <managingEditor>labile.zhu@gmail.com (Mark Zhu)</managingEditor>
    <webMaster>labile.zhu@gmail.com (Mark Zhu)</webMaster>
    <copyright>Mark Zhu ©2026, All Rights Reserved</copyright>
    <lastBuildDate>Thu, 26 Feb 2026 23:12:15 +0800</lastBuildDate>
    
        <atom:link href="https://blog.mygraphql.com/zh/index.xml" rel="self" type="application/rss+xml" />
    
      
      
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      

      
      <item>
        <title>OpenClaw 出口流量管控 - AI Agent 的新安全市场</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/antivirus-for-ai-agents/</link>
        <pubDate>Tue, 24 Feb 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 24 Feb 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/antivirus-for-ai-agents/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/antivirus-for-ai-agents/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;AI Agent 正在从工具演化为执行主体，而安全模型却仍停留在权限与资源层面。真正的风险不在资源访问，而在“意图生成与路径漂移”。本文通过 cgroup + TProxy + TLS SNI 的出口流控实验，分享一种可能的安全增强路径。未来的安全市场，或将围绕“Intent Security”重构，AI Agent 的普及，也许正是下一个安全产业周期的起点。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>AI 焦虑：从 OpenClaw 到黑客帝国 Agent Smith</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-anxiety/modern-ai-matrix/</link>
        <pubDate>Fri, 20 Feb 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 20 Feb 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-anxiety/modern-ai-matrix/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-anxiety/modern-ai-matrix/index.assets/when-you-realize-that-matrix-called-the-bad-guys-agents-v0-177pq3c333jg1.webp&#34; alt=&#34;当你意识到《黑客帝国》里把坏人称为“Agent”，而25年后我们竟然真的发明了他们时，你会作何感想？&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文以《黑客帝国》中的 Agent Smith 为喻，探讨当代 AI Agent 的能力演进与由此产生的焦虑。从 OpenClaw 的自我修复与自我复制能力出发，分析决策权转移、技术门槛与机会公平等问题，得出真正需要面对的不是 AI 本身，而是我们对未知变革的恐惧与选择。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>OpenClaw &#43; 智能家居 &#43; 家庭服务器 = 自由的家庭 AI Agent</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-as-home-lab-admin/</link>
        <pubDate>Fri, 13 Feb 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 13 Feb 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-as-home-lab-admin/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-as-home-lab-admin/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文展示了如何通过自托管的 OpenClaw Skills，对 Home Lab（家庭服务器群）与智能家居进行真 AI 智能化控制。而不受限于小米米家等平台的各种智能限制。通过将家庭服务器群环境、监控系统以及几种 API 封装为结构化的 Skills，AI Agent 可以完成服务器故障排查、以有趣的智能家居灯光方式可视化运维操作，并通过智能音箱汇总报播网站实时新闻。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>openclaw</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>OpenClaw 的设计模型浅析</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-concepts/</link>
        <pubDate>Mon, 09 Feb 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 09 Feb 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-concepts/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-concepts/index.assets/the-matrix-architect.png&#34; alt=&#34;the-matrix-architect&#34;&gt;&lt;/p&gt;
&lt;p&gt;OpenClaw 目前是全球用户规模最大的自托管个人 AI 助手。从 AI Agent 开发者的视角来看，它不仅仅是一个 AI 工具，更是一个&lt;strong&gt;极具参考价值的真实世界 Agent 设计范例&lt;/strong&gt;。它能够帮助我们在构建 Agent 时形成更加成熟、系统化的设计思路。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
            
              <category>openclaw</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>为 OpenClaw 加入 Matrix Channel - 选择孤独真实</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-matrix-channel/</link>
        <pubDate>Fri, 06 Feb 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 06 Feb 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-matrix-channel/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-matrix-channel/index.assets/the-matrix-movie-red-pill.png&#34; alt=&#34;The Matrix 1999 - Take the red pill to stay in Wonderland and see how deep the rabbit hole goes, or the blue pill to wake up and believe what you want.&#34;&gt;&lt;/p&gt;
&lt;p&gt;不可否认，OpenClaw 在一定程度上被过度炒作了。不过，从 &lt;strong&gt;AI Agent 开发&lt;/strong&gt;的角度来看，它确实引入了一种有意思的思路：将 &lt;strong&gt;即时通讯平台&lt;/strong&gt;（如 WhatsApp、Telegram、Matrix 等）作为与 AI Agent 交互的主要入口。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>openclaw</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>OpenClaw / Clawdbot AI 个人助手蹭热度尝鲜</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/moltbot-first-look/</link>
        <pubDate>Wed, 28 Jan 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 28 Jan 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/moltbot-first-look/</guid>
        <description>&lt;p&gt;本文介绍我对 OpenClaw / Clawdbot AI 个人助手的尝鲜使用。有蹭热度嫌疑，喜干货者慎入 :)&lt;/p&gt;
&lt;p&gt;最近大热的 Clawdbot(现改名为 OpenClaw) 是一个人 AI 助手，主打个人 Self-Hosted 的 ai agent。可运行在您自己的设备上的 AI 助手。不管你在哪里，均可以通过国际上常用的 IM 聊天平台（WhatsApp/Telegram/Matrix 等等，但不包括 WeChat）通过聊天与 ai agent 进行互动。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>openclaw</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>家中杂物管理术 - 不断不舍不离 Homebox</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/homebox/</link>
        <pubDate>Tue, 20 Jan 2026 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 20 Jan 2026 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/homebox/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/homebox/index.assets/logo.png&#34; alt=&#34;ogo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文分享如何通过 Homebox —— 一个自托管的家庭物品管理系统，重新整理我的 “杂物生活”，节省时间、减少焦虑，并让全家人都受益。如果你的第一反应是 “就家里那点东西要上系统，至于吗？” 那证明你是个正常人，我以前也是这样的反应。作为一名技术爱好者，我曾长期被家中不断增长的电子设备和零部件小工具所困扰。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>招聘页面岗位订阅 Agent (PoC) - Part 1</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-life-automatic/ai-job-subcribe/</link>
        <pubDate>Mon, 19 Jan 2026 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 19 Jan 2026 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-life-automatic/ai-job-subcribe/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-life-automatic/ai-job-subcribe/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;作为一名求职中的中年码农，由于地域和年龄限制，我的选择空间其实就那么几家。我经常需要反复查看自己感兴趣公司的招聘页面。这一过程既耗时又枯燥，尤其是在需要同时跟踪多家公司职位的情况下。虽然许多招聘网站都提供基于邮件的职位提醒，但这些提醒通常要么依赖于对已提交简历进行不透明的 AI 匹配，要么只是简单的关键词匹配。在这两种情况下，我对实际的匹配条件几乎没有控制权。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>AI</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Agentgateway 代理 MCP 流量初探</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-mcp/</link>
        <pubDate>Sat, 10 Jan 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 10 Jan 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-mcp/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-mcp/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;MCP 作为 AI Agent 生态中重要的协议，Agentgateway 对 MCP 的支持是其核心功能之一。本文记录一些在使用 Agentgateway 代理 MCP 流量时的经验和思考。也是我在调查浏览器连不上 Agentgateway MCP 数天后，总结的经验。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai gateway</category>
            
          
            
              <category>agentgateway</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Agentgateway 实现分析 Part3 - Http Proxy</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part3-http-proxy/</link>
        <pubDate>Thu, 25 Dec 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 25 Dec 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part3-http-proxy/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part3-http-proxy/index.assets/book-cover-mockup.jpg&#34; alt=&#34;book-cover-mockup&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文尝试分析 &lt;a href=&#34;https://github.com/agentgateway/agentgateway&#34;&gt;Agentgateway&lt;/a&gt; 中 Http Proxy 主流程的实现细节。让读者了解 Agentgateway 在 L7 层作为 Http Proxy 的工作原理和实现方式。Agentgateway 本质上是一个 HTTP Proxy ，只是在 HTTP 之上增加了对 AI(LLM/MCP/A2A) 状态化协议的支持。所以分析 HTTP Proxy 层的主流程，就是分析 Agentgateway 的主流程。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai gateway</category>
            
          
            
              <category>agentgateway</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>智能家居集成 AI Agent - agentgateway 与 tracing 实验</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/</link>
        <pubDate>Fri, 12 Dec 2025 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 12 Dec 2025 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/index.assets/1-The-Future-of-AI-Home-Assistants-Smart-Living-with-Voice-and-Automation.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;内容简介：介绍用 AI Agent 控制智能电器的一次实验。尝试通过 agentgateway 代理所有 LLM 与 MCP 流量，实现集中认证、配置、tracing。&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;基于上期的 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/&#34;&gt;HA + 小米智能家居 = 失业宅心灵鸡汤&lt;/a&gt;  基础上。我想试试：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>smart-home</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>home-assistant</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>HA &#43; 小米智能家居 = 失业宅心灵鸡汤</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/</link>
        <pubDate>Fri, 05 Dec 2025 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 05 Dec 2025 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文介绍如何使用 Home Assistant (HA) 集成小米米家智能家居设备，实现基于 Prometheus Alertmanager 的自动化米家开关控制。并结合 HomeKit Bridge，实现 iPhone 位置感知驱动的自动化。&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;缘起：这节写得有点冗长，不喜可跳过。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>smart-home</category>
            
          
            
              <category>xiaomi</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>home-assistant</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosted - 数字世代的归园田居</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/</link>
        <pubDate>Thu, 20 Nov 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 20 Nov 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/index.assets/pi-stack.png&#34; alt=&#34;image-20251112173150998&#34;&gt;&lt;/p&gt;
&lt;p&gt;无论是否愿意，我们大概已经离不开生活的数码化了。想想每天拍多少照片，多少微信消息，多少娱乐媒体，多少社交信息，多少数字化记录的知识或事项。&lt;/p&gt;
&lt;p&gt;如果说 &lt;code&gt;陶渊明&lt;/code&gt;的&lt;code&gt;归园田居&lt;/code&gt;是东晋末年离开繁华喧嚣的生活态度，那么 Self-hosted 大概是数字时代里，远离公有云和现代互联网喧嚣、逃离各种有理或无理的数据监控和广告驱动的一种生活态度。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>AI Agent 总线网关 agentgateway 实现分析 Part 2 - 服务生命周期</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part2-app-lifecycle/</link>
        <pubDate>Tue, 09 Sep 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 09 Sep 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part2-app-lifecycle/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl-part2-app-lifecycle/index.assets/mr-bean.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;本文分析 AI Agent 总线网关 &lt;a href=&#34;https://github.com/agentgateway/agentgateway&#34;&gt;agentgateway&lt;/a&gt; 源码，尝试解释服务生命周期管理相关的组件和协作关系。从服务各组件的启动及初始化，端口监听，到服务终止信号如何在各组件之间传播，以及服务优雅关闭(Drain)相关的实现。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai gateway</category>
            
          
            
              <category>agentgateway</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>AI Agent 总线网关 agentgateway 实现分析 Part 1</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl/</link>
        <pubDate>Fri, 05 Sep 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 05 Sep 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-devops/agent-gateway/agentgateway-impl/index.assets/architecture.svg&#34; alt=&#34;图：agentgateway 代理 Agent 的对外连接，包括 MCP 服务器、AI Agent 和 OpenAPI&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图：agentgateway 代理 Agent 的对外连接，包括 MCP 服务器、AI Agent 和 OpenAPI&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(source: &lt;a href=&#34;https://agentgateway.dev/docs/about/architecture/&#34;&gt;https://agentgateway.dev/docs/about/architecture/&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;本文通过分析 &lt;a href=&#34;https://github.com/agentgateway/agentgateway&#34;&gt;agentgateway&lt;/a&gt; 的源码，初步了解主要初始化过程。希望对想深入学习 agentgateway 实现的读者提供一些大方向上的参考和指引。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai gateway</category>
            
          
            
              <category>agentgateway</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Vibe Coding Is The WORST IDEA Of 2025 - Dave Farley</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/vibe-coding-the-worst-idea-of-2025/</link>
        <pubDate>Fri, 29 Aug 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 29 Aug 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/vibe-coding-the-worst-idea-of-2025/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/vibe-coding-the-worst-idea-of-2025/index.assets/shenzhen-jvdiaosha.png&#34; alt=&#34;摄于我于 2025年8月底的一次深圳桔钓沙之行&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;Dave Farley 否定了 “氛围编程（Vibe Coding）” 概念，强调编程核心在于问题理解与精确表达，指出 AI 编程面临规格、验证与演进三大难题，软件工程仍在进化而非消亡。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-code-assists</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>用 gemini-cli 分析 gemini-cli 自身源码</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/analyzing-gemini-cli-with-gemini-cli/</link>
        <pubDate>Thu, 21 Aug 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 21 Aug 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/analyzing-gemini-cli-with-gemini-cli/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-code-assist/analyzing-gemini-cli-with-gemini-cli/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;本文将介绍如何使用 &lt;code&gt;gemini-cli&lt;/code&gt; 这个命令行工具来分析其自身的源码库。 我们将通过一系列交互式的命令，探索 &lt;code&gt;gemini-cli&lt;/code&gt; 的设计和实现。这种方法不仅展示了 AI 工具的功能，也为开发者提供了一种新的学习和探索方式。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-code-assist</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>像 tcpdump 一样观察本地 AI MCP 的流量</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-devops/peek-mcp/</link>
        <pubDate>Thu, 14 Aug 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 14 Aug 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-devops/peek-mcp/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../../../../../zh/notes/low-tec/trace/peekfd/index.assets/logo.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;简述&#34;&gt;简述&lt;/h2&gt;
&lt;p&gt;本文介绍在 Linux 环境下，如何通过系统级工具 &lt;code&gt;peekfd&lt;/code&gt; 来观察 AI Agent 与本地 MCP Server 的流量。&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;作为一个焦虑与甲抗状态的待业中年。总会担心自己技术落后，而被资本家无情抛弃。特别是当下打开招聘平台，熟识的岗位不断被加上&lt;code&gt;大模型&lt;/code&gt;前缀，好像不学点 AI 都找不到工作了…… 。现在去学 AI 基础科学显然已经不是中年程序员的能力范围了。不如结合自己老本行，去做点科学家们不乐于做的，暂时还是人工完成的 AI 应用基础架构。在技术变革的洪流中，希望还能找到一艘小船可以顺利渡过。有人说过，同是变化，有人看到是危机，有人看到是的却是机遇。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>mcp</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>那个算法尚未统治的时代：90 年代的互联网</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/</link>
        <pubDate>Sun, 10 Aug 2025 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 10 Aug 2025 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/index.assets/logo.png&#34; alt=&#34;image-20250810162604476&#34;&gt;&lt;/p&gt;
&lt;p&gt;人老了，就喜欢偶尔怀旧。把现在和过去作种种或片面，或全面，或主观或客观的对比。以前人们是在村口那棵老榕树下谈论天下大事，指点江山。现在大概是在微信群、朋友圈上高谈宽论。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>old-school</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy/Istio数据面 Buffer 的设计与流控</title>
        <link>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider-update-2025-07-05-buffer/</link>
        <pubDate>Sat, 05 Jul 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 05 Jul 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider-update-2025-07-05-buffer/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider-update-2025-07-05-buffer/index.assets/lotus.png&#34; alt=&#34;image-20250705213536671&#34;&gt;&lt;/p&gt;
&lt;p&gt;和所有网络类型的软件一样，Envoy 很重视 Buffer 相关的设计，因为这关系到性能与资源使用。本文试图说明 Buffer 核心设计以及与之相关的流控设计。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文摘录自我的书&lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/&#34;&gt;《Envoy Proxy 内幕》&lt;/a&gt; 最近的一些更新：&lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/arch/buffer/buffer.html&#34;&gt;Buffer&lt;/a&gt;  。这是 Envoy Proxy 的基础核心。Envoy 是一个 Proxy 拥有高负载低延迟要求。设计上必须考虑暂存网络数据 buffer 对资源的高效利用以及流控。良好的调度设计必须平衡内存与CPU资源消耗(footprint) 。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>envoy</category>
            
          
            
              <category>buffer</category>
            
          
            
              <category>backpressure</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>5 年写作感悟杂谈</title>
        <link>https://blog.mygraphql.com/zh/posts/wrap-up/5-years-of-writing/</link>
        <pubDate>Fri, 27 Jun 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 27 Jun 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/wrap-up/5-years-of-writing/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/5-years-of-writing/index.assets/image-20250627220015890.png&#34; alt=&#34;image-20250627220015890&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;工作 7 年的公司，今天是正式 last day，感谢他给的 work life balance 环境。也受 &lt;a href=&#34;https://en.wikipedia.org/wiki/COVID-19_lockdowns&#34;&gt;COVID-19 lockdown&lt;/a&gt; 那几年  &lt;a href=&#34;https://www.ddc.com.tw/ec/epaper/2021/a/20210825.html#:~:text=%E6%87%89%E8%A9%B2%E6%98%AF%E5%BE%88%E5%A4%9A%E7%9A%84%E3%80%82-,%E9%80%86%E5%A2%9E%E4%B8%8A%E7%B7%A3,-%EF%BC%8C%E6%98%AF%E5%BE%9E%E7%9B%B8%E5%8F%8D&#34;&gt;逆增上緣&lt;/a&gt; 的影响，我于 &lt;a href=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2020-wrap-up/&#34;&gt;2020年10月&lt;/a&gt; 开始我的博客和公众号 &lt;a href=&#34;https://blog.mygraphql.com/&#34;&gt;Mark 的滿紙方糖言&lt;/a&gt;，于 2022年8月开始写第一本书&lt;a href=&#34;https://istio-insider.mygraphql.com/&#34;&gt;《Istio &amp;amp; Envoy 内幕》&lt;/a&gt;，也算是坚持写作 5 年了。虽然中间经常间断。最近，也卖了开了 15 年斯柯达。很多事，都在无常和空之中。follow 这个号久的人也知道，我是个感想过敏的人。所以现在是个记录感想的好时间。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wrap-up</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>career</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>《Envoy Proxy 内幕》- 事件驱动与线程设计</title>
        <link>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider-update-2025-06-26-event/</link>
        <pubDate>Thu, 26 Jun 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 26 Jun 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider-update-2025-06-26-event/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../envoy-insider/index.assets/cover-mock-1024.png&#34; alt=&#34;cover-mock-1024&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文摘录自我的书&lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/&#34;&gt;《Envoy Proxy 内幕》&lt;/a&gt; 最近的一些更新，包括：&lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/arch/event-driven/event-model.html&#34;&gt;事件驱动框架&lt;/a&gt; 与 &lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/arch/thread-model/thread-model.html&#34;&gt;线程模型&lt;/a&gt; 。这些算是 Envoy Proxy 的基础核心了。大家都认为 Envoy 是一个 Proxy 。主要实现定制逻辑的请求转发。这点没错。但与拥有高负载低延迟要求的其它中间件一样。设计上必须考虑负载的调度和流控。良好的调度设计必须平衡吞吐、响应时间、资源消耗(footprint) 。本文主要讲事件、调度、多线程协同相关话题。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>envoy</category>
            
          
            
              <category>book</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的旧书《Envoy Proxy 内幕》</title>
        <link>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider/</link>
        <pubDate>Fri, 13 Jun 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 13 Jun 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/mybooks/envoy-insider/index.assets/cover-mock-1024.png&#34; alt=&#34;cover-mock-1024&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文介绍我的新开源书籍 - &lt;a href=&#34;https://envoy-insider.mygraphql.com/zh-cn/latest/&#34;&gt;《Envoy Proxy 内幕》&lt;/a&gt;。它是一本专注于 Envoy Proxy 机制和实现深入探讨的书。内容主要源于我之前写的《&lt;a href=&#34;https://istio-insider.mygraphql.com/zh-cn/latest/&#34;&gt;Istio &amp;amp; Envoy 内幕》&lt;/a&gt;一书。现在把 Envoy 部分单独抽出来，重新整理成一本书。这样做的目的是为了让读者更专注于 Envoy 的内容，而免受 Istio 的干扰。有些内容也是 Istio 无关或不适用的。所以现在独立成书。&lt;strong&gt;以后《Istio &amp;amp; Envoy 内幕》一书将只更新 Istio 相关的内容。而把 Envoy 相关的内容更新都移到这本书《Envoy 内幕》上。&lt;/strong&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>envoy</category>
            
          
            
              <category>book</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>自家寶藏 - 待业程序员的禪思</title>
        <link>https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/</link>
        <pubDate>Fri, 06 Jun 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 06 Jun 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;这段时间在准备离开工作 7 年的公司了。对于一个中年的程序员，要再次步入久违非舒适区，选择未来的路似乎不像以前那么直接与简单了。IT 技术的路好像已经越走越窄了，而离开 IT 这个选项又等于离开一个已经生活 20 年的圈子，投入一个未知的世界。作为一个小时候种过十多年地的真耕学农民，回归是一个选项吗？或者《光輝歲月》这歌中已经回答了：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>zen</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>ChatBlog - 个人博客AI互动的尝试</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/langchain/rag-tool-chat-history-study/</link>
        <pubDate>Sat, 29 Mar 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 29 Mar 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/langchain/rag-tool-chat-history-study/</guid>
        <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;为博客加入一个 chatbot 是件有趣也实用的事。它/他/她 可以基于博客内容和作者介绍文章，回答读者的一些简单问题。 ChatBlog(chat + blog) 或者是一个有趣有用的个人技术者互动分享模式。本文记录我的探索与实现过程。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>ai</category>
            
          
            
              <category>langchain</category>
            
          
            
              <category>LLM</category>
            
          
            
              <category>ollama</category>
            
          
            
              <category>RAG</category>
            
          
            
              <category>self-hosting</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosted 雜碎 2025</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/</link>
        <pubDate>Sun, 02 Feb 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 02 Feb 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/index.assets/logo-photo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;不知不觉，已经在现在工作的公司度过了 6 年。回望一下， 6 年前入职时的光景好像还在眼前。在离开前，或者适合回顾和思考这段时间的经历。工作上应用的技术一直在这个博客上更新，已经没什么好补充的了。不如写写这 6 年和之前工作的 14 年的区别，说一些好玩的事。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2024 年 Music/Spotify 回顾</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/music/2024-music-wrapped/</link>
        <pubDate>Sun, 08 Dec 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 08 Dec 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/music/2024-music-wrapped/</guid>
        <description>&lt;p&gt;2024 年快要成为过去。2024 年初，我写了《&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2023-wrap-up/&#34;&gt;2024, live like Sisyphus&lt;/a&gt;》 ，不知道是不是 &lt;code&gt;墨菲定律(Murphy&#39;s Law)&lt;/code&gt; 生效，还是自己预感正确，这大概是我近 20 年来最艰难的一年了。还好，有很多有心人，和有声与无声的书本、音乐陪伴我。我这几年一直用 Spotify 来听音乐和 podcast 。前几天，它像以往一样，推送给我 2024 年的音乐回顾。看到这些统计，我是有点触动的。有的事情自己或许猜到大概，但数据说出来的，往往比估计与猜想来得更真实。或者有句话没错：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>music</category>
            
          
            
              <category>song</category>
            
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>码农零基础构建 LLM - Week 1 - 介绍 Large Language Models(LLM)</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/llm/build-llm-from-scratch-101-days/week1-introduce-llm/</link>
        <pubDate>Sat, 23 Nov 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Nov 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/llm/build-llm-from-scratch-101-days/week1-introduce-llm/</guid>
        <description>&lt;p&gt;Hello everybody。这是一系列记述中年危机码农，打算从零开始学习和实践构建 LLM/AI 的故事。他可能学有所成，也可能会半途而废。不管如何，把故事记述下来。像曹雪芹的《石頭記》，叙述了青春的绽放，同时也道出了乾坤的循环：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>machine-learning</category>
            
          
            
              <category>deep-learning</category>
            
          
            
              <category>llm</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>码农零基础构建 LLM - Week 2 - 文本处理</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/llm/build-llm-from-scratch-101-days/week2-working-with-text/</link>
        <pubDate>Sat, 23 Nov 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Nov 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/llm/build-llm-from-scratch-101-days/week2-working-with-text/</guid>
        <description>&lt;p&gt;Hello everybody。这是一系列记述中年危机码农，打算从零开始学习和实践构建 LLM/AI 的故事。学习路线跟随《Build a Large  Language Model  (From Scratch)》 —— SEBASTIAN RASCHKA。本文关于文本处理。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>machine-learning</category>
            
          
            
              <category>deep-learning</category>
            
          
            
              <category>llm</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>可能是最深入全面的图解 Java Virtual Threads</title>
        <link>https://blog.mygraphql.com/zh/notes/java/virtual-threads-jvm-insider-2024-11-17/</link>
        <pubDate>Sun, 17 Nov 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 17 Nov 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/virtual-threads-jvm-insider-2024-11-17/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文尽我所能，用了数月时间，在学习了 Java Virtual Theads 的一些设计和实现理念后，用我所能的精炼文字和画图，去记录我的所学。是我现在能找到的最深入全面的图解 Java Virtual Threads 文章。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>全栈后端架构与运维难题：exhaustion(耗尽) 与 intermittence(间歇)</title>
        <link>https://blog.mygraphql.com/zh/posts/software-architect/design-for-failure/exhaustion-and-intermittence/</link>
        <pubDate>Wed, 13 Nov 2024 10:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 13 Nov 2024 10:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/software-architect/design-for-failure/exhaustion-and-intermittence/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/software-architect/design-for-failure/exhaustion-and-intermittence/index.assets/mr-bean-tank.jpg&#34; alt=&#34;28m00c&#34;&gt;&lt;/p&gt;
&lt;p&gt;我是个后端软件 Troubleshooting(故障解决) 爱好者。更准确地说，对 troubleshooting 已经有点像上瘾般的，难以自制的嗜好。这有时候是件好事，但有时候带出很多工作和生活上的困扰。无论如何，性格决定命运，既然改变不了，不如好好利用。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>architect</category>
            
          
            
              <category>dev-ops</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>WeChat 官方 Linux 版本实现初探 - 珍惜不知情权</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/linux-wechat/</link>
        <pubDate>Sat, 09 Nov 2024 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 09 Nov 2024 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/linux-wechat/</guid>
        <description>&lt;p&gt;还记得多年前，我是我认识的同龄同行业的人中，最后一个开始使用 WeChat 的。或者说，是最不情愿使用的。究其原因，我当年最 “反感” 的有以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这么即时方便的通讯工具，进一步严重模糊了工作和生活的边界&lt;/li&gt;
&lt;li&gt;这种社交方法，明显是更有利于会展示、更重视展示的人，而不是实干而沉默者。&lt;/li&gt;
&lt;li&gt;让有控制话语权的人，或更喜欢利用话语权的人有更多无时无刻都可以全面入侵到生活的可能&lt;/li&gt;
&lt;li&gt;没有了说 “不知道” 的空间。手机社交后，什么信息都是假设你已经知道了，很多时间，我更想得到一个不知情权。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不幸的是，我似乎别无选择，除非不再打算在江湖走了。或者，有一些人和我一样不喜欢这种 “社交”。但我未曾在现实中听过多少不满的声音。或者，我们已经习惯于所谓的 “存在即合理”。又或者，合理值多少钱。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wechat</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java 如何使用 Linux 内存 -《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/mmap-jvm-insider-2024-11-01/</link>
        <pubDate>Fri, 01 Nov 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 01 Nov 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/mmap-jvm-insider-2024-11-01/</guid>
        <description>&lt;p&gt;为了更高的性能、更高的内存利用率、更可靠的异常溢出保护机制，Java 重度重用了 Linux 的内存区 MMap 机制。k8s 容器环境下，内存使用预估也依赖于对它的理解。本文主讲 Java 的内存分区机制。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java Safepoint/Handshake 全面剖析 -《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/safepoint-collaboration-diagrams-jvm-insider-2024-10-28/</link>
        <pubDate>Tue, 29 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 29 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/safepoint-collaboration-diagrams-jvm-insider-2024-10-28/</guid>
        <description>&lt;p&gt;花数月时间，精心制作完成了&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt;的 Safepoint 与 Threads Handshake 两节内容。是我现在能找到的全网最完整细致的 Safepoint 原理与实现分析。以下是节选内容。原文见：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/safepoint.html&#34;&gt;Safepoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/threads-handshake.html&#34;&gt;Threads Handshake&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以这么说，我之前和大分部 Java 程序员，从 2014 年 Java 8 起，就很少再积极跟进 Java 底层的新技术了。原因无非几个：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
            
              <category>safepoint</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>从 JVM 学习路书 到 开源的酒神精神</title>
        <link>https://blog.mygraphql.com/zh/notes/java/jvm-study-road-map/</link>
        <pubDate>Sun, 20 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 20 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/jvm-study-road-map/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;内容概述：从 JVM 学习路书 说到 钻研开源的酒神精神。顺带说说 &lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 的更新内容。摘自我的开源书&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/road-map/road-map.html&#34;&gt;JVM 学习路书&lt;/a&gt; 一节。建议用电脑或平板阅读本书原文，排版、图片、结构、整体阅读体验更友好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java Safepoint/Handshake 剖析求证 - JVM 必要之恶 - TL²;DR</title>
        <link>https://blog.mygraphql.com/zh/notes/java/safepoint-jvm-insider/</link>
        <pubDate>Sat, 12 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 12 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/safepoint-jvm-insider/</guid>
        <description>&lt;p&gt;内容概述：Java Safepoint/Handshake 设计、实现原理剖析与求证 - 摘自我的开源书&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/safepoint.html&#34;&gt;Safepoint&lt;/a&gt; 一节。本文是摘录整合文章。建议用电脑或平板阅读本书原文，排版、图片、结构、整体阅读体验更友好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider在</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>JVM 剖析² 二次方 - Serviceability Agent</title>
        <link>https://blog.mygraphql.com/zh/notes/java/serviceability-agent/</link>
        <pubDate>Thu, 03 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 03 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/serviceability-agent/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;serviceability-agent&#34;&gt;Serviceability Agent&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Serviceability Agent(SA)&lt;/code&gt; 原是 HotSpot 原码库中的 Sun 私有组件，由 HotSpot 工程师开发，用于协助调试 HotSpot OpenJDK。他们随后意识到 SA 可用于支持用户编写 serviceability tools ，因为它可以在运行中的进程以及 Core Dump 文件中检视 Java 对象以及 HotSpot 数据结构。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>JVM 堆栈内存剖析 - 《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/stack-mem-anatomy/</link>
        <pubDate>Sat, 31 Aug 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 31 Aug 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/stack-mem-anatomy/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;由于堆栈是线程运行的 context，是运行引擎的热点核心数据。线程想触达到其它的在 heap 中的对象，几乎都要以这个 context 为根，去多次寻址才能触达 heap 中的目标数据 。可以说，这个 context 就是串联各功能模块的中心，用它可以找到上级函数返回点、入参、本函数的本地变量……了解堆栈上保存了什么数据，怎样保存数据，对了解 JVM 运行引擎、JIT编译、GC 等等功能面有重要的串接作用。就可能知道功能面之间是如何耦合、协作，完成 JVM 的完整功能。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>无处不在的 JNI - 《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/jni-junior/</link>
        <pubDate>Sat, 31 Aug 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 31 Aug 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/jni-junior/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;image-20240902230442134&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;面向技术宅的-jvm-内幕&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/h2&gt;
&lt;p&gt;不知不觉，以 Java 程序员的名义在职场混了 20 有余个年头。年纪渐长，就养成了一个年轻人最讨厌的毛病：总喜欢回望过去。我一直写书和博客，都在思考一个问题。我为什么，为谁在写东西？ 总的回答是，我想留下和分享点东西，意义在于留下和分享的过程。读者当然越多越好，但从不为读者多少而主导自己的写作范围。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy 的 Integration Test(组件整合测试)</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-integration-test/</link>
        <pubDate>Sat, 10 Aug 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 10 Aug 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-integration-test/</guid>
        <description>&lt;p&gt;Envoy 成功原因之一是有严格的项目质量流程控制。如要实现一个新特性或扩展，必须编写组件整合测试用例。本文以 &lt;code&gt;transport_sockets.tcp_stats&lt;/code&gt; 扩展的测试实现为例，说明 Envoy 的 integration test 架构。&lt;/p&gt;
&lt;h2 id=&#34;integration-test-设计&#34;&gt;Integration test 设计&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-integration-test/envoy-integration-test-threads.drawio.svg&#34; alt=&#34;envoy-integration-test-threads.drawio.svg&#34;&gt;&lt;br /&gt;
&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fposts%2Fcloud%2Fenvoy%2Fenvoy-integration-test%2Fenvoy-integration-test-threads.drawio.svg&#34;&gt;用 Draw.io 打开&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>C&#43;&#43;</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>google-test</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy 的单元测试套路</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-unit-test/</link>
        <pubDate>Wed, 07 Aug 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 07 Aug 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-unit-test/</guid>
        <description>&lt;h2 id=&#34;envoy-的单元测试套路&#34;&gt;Envoy 的单元测试套路&lt;/h2&gt;
&lt;p&gt;以下假设已经读过：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/envoyproxy/envoy/blob/main/bazel/README.md#testing-envoy-with-bazel&#34;&gt;Testing Envoy with Bazel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://google.github.io/googletest/primer.html#same-data-multiple-tests&#34;&gt;GoogleTest Primer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;被测试对象&#34;&gt;被测试对象&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/envoyproxy/envoy/blob/3757d99a26c5ad11c096c4ddbbb0f484d6cf3bb9/source/extensions/transport_sockets/tcp_stats/tcp_stats.h#L70&#34;&gt;/source/extensions/transport_sockets/tcp_stats/tcp_stats.h&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TcpStatsSocket&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TransportSockets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PassthroughSocket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;n&#34;&gt;Logger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Loggable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Logger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Network&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransportSocketCallbacks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;callbacks_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/envoyproxy/envoy/blob/3757d99a26c5ad11c096c4ddbbb0f484d6cf3bb9/source/extensions/transport_sockets/tcp_stats/tcp_stats.cc#L77&#34;&gt;/source/extensions/transport_sockets/tcp_stats/tcp_stats.cc&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TcpStatsSocket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;onConnected&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update_period_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;has_value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;timer_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;callbacks_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dispatcher&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTimer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;recordStats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;timer_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enableTimer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update_period_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;timer_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enableTimer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update_period_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;53&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;54&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;transport_socket_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;onConnected&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TcpStatsSocket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setTransportSocketCallbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Network&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TransportSocketCallbacks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;callbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;callbacks_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;callbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;transport_socket_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setTransportSocketCallbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;callbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;77&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;absl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;optional&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;tcp_info&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TcpStatsSocket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;querySocketInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;78&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;tcp_info&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;79&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;memset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;socklen_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;optlen&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;callbacks_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ioHandle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getOption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IPPROTO_TCP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TCP_INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;optlen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// &amp;lt;-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;ENVOY_LOG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;debug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Failed getsockopt(IPPROTO_TCP, TCP_INFO): rc {} errno {} optlen {}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;84&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;               &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errno_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;optlen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;85&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;absl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nullopt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;86&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;87&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;88&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;89&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;mocks&#34;&gt;Mocks&lt;/h3&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;expect_call&#34;&gt;EXPECT_CALL&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Creates an &lt;a href=&#34;https://google.github.io/googletest/gmock_for_dummies.html#setting-expectations&#34;&gt;expectation&lt;/a&gt; that the method &lt;em&gt;&lt;code&gt;method_name&lt;/code&gt;&lt;/em&gt; of the object &lt;em&gt;&lt;code&gt;mock_object&lt;/code&gt;&lt;/em&gt; is called with arguments that match the given matchers &lt;em&gt;&lt;code&gt;matchers...&lt;/code&gt;&lt;/em&gt;. &lt;code&gt;EXPECT_CALL&lt;/code&gt; must precede any code that exercises the mock object.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>C&#43;&#43;</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>google-test</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Istio Ambient 妙用 network namespace 实现跨 pod 集线器</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/ztunnel/crossing-pods-network-namespaces/</link>
        <pubDate>Sat, 03 Aug 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 03 Aug 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/ztunnel/crossing-pods-network-namespaces/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/ztunnel/crossing-pods-network-namespaces/mr-bean.jpg&#34; alt=&#34;mr-bean&#34;&gt;&lt;/p&gt;
&lt;p&gt;所谓 Sidecarless 的 Istio Ambient ，严格来说，是由 &lt;code&gt;sidecar container of pod&lt;/code&gt; 变成 &lt;code&gt;sidecar pod of pods on a worker node&lt;/code&gt;。注意，这里我引入一个词：&lt;code&gt;sidecar pod&lt;/code&gt;  。 要实现同一 worker node 上的 pod 共享一个 sidecar pod，就要解决把所有 pod 的流量导向到 sidecar pod 的问题。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>rust</category>
            
          
            
              <category>ztunnel</category>
            
          
            
              <category>Istio-Ambient</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>一个IP包的旅行 —— K8s 网络之 Calico 浅度解构</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/calico/</link>
        <pubDate>Sun, 28 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 28 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/calico/</guid>
        <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;学习 Kubernetes 就像玩动作游戏，当我高高兴兴地打败了一关的 BOSS 后总以为是大结局了，谁知道后面还有更大的BOSS 出现。 当我以为学习完容器化、Linux cgoup / namespace / docker 后，就可以大结局了，谁知道后面还有 CNI。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloudnative</category>
            
          
            
              <category>cni</category>
            
          
            
              <category>calico</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy Mobile - 终端设备 Istio Sidecar 可行吗</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-mobile/</link>
        <pubDate>Sat, 27 Jul 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 27 Jul 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-mobile/</guid>
        <description>&lt;p&gt;Service Mesh 要是做到全链路到终端设备，就可统一流量从终端设备到最底层服务的控制面。或可为服务治理、流量可视化、边缘计算的流量本地化、响应时间的优化提供帮助。从而提升服务的用户体验。Envoy Mobile 有机会成为终端设备的 Istio Sidecar。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>envoy</category>
            
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>jni</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Imagine: jEnvoy = pid(Java &#43; Envoy) - 脑洞还是脑残</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/jenvoy/</link>
        <pubDate>Sun, 07 Jul 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 07 Jul 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/jenvoy/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/jenvoy/index.assets/imagine-john-lennon.png&#34; alt=&#34;image-20240711235224239&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;人们想要 service mesh 的低代码服务网格，但同时对 CPU 资源消耗与服务延迟的增加忧心重重。于是出现了各种 Sidecar-Less。本文想像一个把 Envoy 嵌入 jvm，作为一个 Servlet Container 的设计，希望达到性能、资源效益、低代码服务网格的平衡。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>envoy</category>
            
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>jni</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linux: 一切皆文件; peekfd: 偷看一切文件读写</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/</link>
        <pubDate>Sat, 06 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 06 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/index.assets/logo.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;h3 id=&#34;内容简介&#34;&gt;内容简介&lt;/h3&gt;
&lt;p&gt;Linux 大部分数据流动，包括进程间通讯，socket…… 均通过文件描述符(fd) 读写实现。在 troubleshooting 时，如果可以偷看到 fd 的流量，那么很多问题可以加速证明/证伪。本文介绍一个老工具 peekfd ，可以在一定环境中完成这个任务。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>inter-process</category>
            
          
            
              <category>fd</category>
            
          
            
              <category>trace</category>
            
          
            
              <category>ptrace</category>
            
          
            
              <category>low-tec</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>小编码，我输给 AI 了 —— 简记一次父子进程互锁的坑，自己挖的</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/inter-process/child-process-wait-die-lock/</link>
        <pubDate>Fri, 05 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 05 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/inter-process/child-process-wait-die-lock/</guid>
        <description>&lt;h2 id=&#34;简述&#34;&gt;简述&lt;/h2&gt;
&lt;p&gt;最近自己挖了一个：父子进程互锁的坑，真是应了一句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Debugging is like being the detective in a crime movie where you are also the murderer.&lt;/p&gt;
&lt;p&gt;- Filipe Fortes&lt;br /&gt;
调试就像是犯罪电影中的侦探，而你也是凶手。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;先说结论吧：可能真是太久没认真写代码了，犯了个低级错误：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>inter-process</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>码农幽默英语排行榜 S1E2</title>
        <link>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/</link>
        <pubDate>Thu, 04 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 04 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/index.assets/somoking-man.png&#34; alt=&#34;Smoke it like Norman Rockwell&#34;&gt;&lt;br /&gt;
&lt;em&gt;Source: Norman Rockwell&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“there is only one true heroism in the world: to see the world as it is, and to love it” ― Roman Rolland&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;「世上只有一種英雄主義，就是在認清生活真相以後，依然熱愛生活。」 — 羅曼．羅蘭&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>english</category>
            
          
            
              <category>fun-english</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>再別科橋 诗两首</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/</link>
        <pubDate>Wed, 03 Jul 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 03 Jul 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/index.assets/guangzhou-ta-lache.jpg&#34; alt=&#34;广州塔下拉斗车&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;广州塔下搬砖望帝景&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;source: 上图来源已经标注&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;再別科橋&#34;&gt;再別科橋&lt;/h2&gt;
&lt;p&gt;悄悄地我走了，&lt;br /&gt;
正如我悄悄地來；&lt;br /&gt;
我最後發了個 farewell，&lt;br /&gt;
作別當天的戰友。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>poem</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>C&#43;&#43; 项目构建工具 Bazel 学习笔记</title>
        <link>https://blog.mygraphql.com/zh/notes/cc/bazel/</link>
        <pubDate>Sun, 30 Jun 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 30 Jun 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cc/bazel/</guid>
        <description>&lt;h2 id=&#34;bazel-概念与对象&#34;&gt;Bazel 概念与对象&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-overview.drawio.svg&#34; alt=&#34;bazel-overview.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-overview.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-overview.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-concept.drawio.svg&#34; alt=&#34;bazel-concept.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-concept.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-concept.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-external-dep.drawio.svg&#34; alt=&#34;bazel-external-dep.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-external-dep.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-external-dep.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;cpp--use-cases&#34;&gt;CPP  use cases&lt;/h2&gt;
&lt;h3 id=&#34;adding-include-paths&#34;&gt;Adding include paths&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://bazel.build/tutorials/cpp-use-cases#add-include-paths&#34;&gt;https://bazel.build/tutorials/cpp-use-cases#add-include-paths&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Sometimes you cannot (or do not want to) root include paths at the workspace root. Existing libraries might already have an include directory that doesn&amp;rsquo;t match its path in your workspace. For example, suppose you have the following directory structure:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>C&#43;&#43;</category>
            
          
            
              <category>build</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>轻量 eBPF&#43;Prometheus&#43;Trace - 微处觀自在</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/bpf-observability/ebpf-exporter/</link>
        <pubDate>Sun, 23 Jun 2024 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 23 Jun 2024 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/bpf-observability/ebpf-exporter/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/bpf-observability/ebpf-exporter/index.assets/logo-mr-bean.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文以 ebpf_exporter 持续跟踪内核 TCP/进程v行为为例，介绍一种基于轻量 eBPF+Prometheus+Trace 的定制系统底层观察和观察数据集成方法。&lt;/p&gt;
&lt;p&gt;本文假设读者已经对 eBPF 理论有一些了解和使用（不一定是开发）。所以这里不会再写什么是 eBPF 、eBPF 如何强大之类推销内容了。如果你见到一个技术文章只说某一个技术的优点，没说缺点，然后拿着这个锤子去打所有见到的事物而不管那是不是个钉子，那么，take care.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>bpf</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的书 - 《Istio &amp; Envoy 内幕》</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-envoy-insider-introduction/</link>
        <pubDate>Sat, 15 Jun 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 15 Jun 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-envoy-insider-introduction/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-envoy-insider-introduction/istio-insider-logo.jpg&#34; alt=&#34;cover&#34;&gt;&lt;/p&gt;
&lt;p&gt;我的新开源书籍 - 《Istio &amp;amp; Envoy 内幕》，刚刚达到了一个里程碑，同时中英版本文同步完成。所以我想介绍一下。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-envoy-insider-introduction/index.assets/istio-insider-on-amazon.png&#34; alt=&#34;image-20240609215735188&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://www.amazon.com/dp/B0D6KZ3RNN&#34;&gt;Istio &amp;amp; Envoy Insider English Edition on Amazon.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-envoy-insider-introduction/index.assets/istio-insider-at-salttiger.com.png&#34; alt=&#34;image-20240615162558601&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://salttiger.com/istio-envoy-%e5%86%85%e5%b9%95/#more-22178&#34;&gt;《Istio &amp;amp; Envoy 内幕》发布于 salttiger.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>book</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>请定量证明这是网络的锅 —— 我思，故 Envoy sidecar 在</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-tcp-stats/</link>
        <pubDate>Wed, 12 Jun 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 12 Jun 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-tcp-stats/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/envoy-tcp-stats/index.assets/Ren%C3%A9_Descartes_i_samtal_med_Sveriges_drottning_C_Kristina.jpg&#34; alt=&#34;File:René Descartes i samtal med Sveriges drottning, Kristina.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Queen Christina of Sweden (left) and René Descartes(瑞典克里斯蒂娜女王（左）和笛卡尔（右）)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;SRE / Supporting / Performance test teams 问题定位遇事不决三件宝：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>TCP</category>
            
          
            
              <category>socket</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>network</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的智能家居设计 —— 说说好像过时的 IOT</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/</link>
        <pubDate>Wed, 12 Jun 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 12 Jun 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/index.assets/logo.png&#34; alt=&#34;image-20240613232331417&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先声明一下，我写这篇文章时，小米没给我钱。当然如果后来雷军想给我钱，那么就是后话了。毕竟嘛…… 我爱 RMB。我不是米粉。在 1994 年左右，当时作为小学生的我，也曾是 DOS 下的 WPS 粉。当时 WPS 有一个通用密码 Ctrl-QIUBOJUN ，所以严格来说，我曾是金山粉，或者雷军他前老板求伯君粉，或者叫“金”粉 ？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>life-hacker</category>
            
          
            
              <category>smart-home</category>
            
          
            
              <category>xiaomi</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的个人知识库的构建 － Stop 404</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/</link>
        <pubDate>Tue, 11 Jun 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 11 Jun 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/index.assets/hitler-nietzsche.jpeg&#34; alt=&#34;Adolf Hitler viewing the bust of Friedrich Nietzsche in 1931&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Adolf Hitler viewing the bust of Friedrich Nietzsche in 1931 © Fotoarchiv Hoffman&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;码农之路一走就是二十年了。前十五年应了陶渊明的一句话：＂&lt;strong&gt;人生无根蒂，飘如陌上尘&lt;/strong&gt;＂，每换一家公司或项目，技术栈也会跟着或多或少地改变。这种状态很难积累到什么有竞争力的技术，有时候幸运可以积累点，有限的大脑内存也因时间和需要腾出空间存放新知识而忘记。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>learning</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>图解 Istio &amp; Envoy 请求处理流程、超时、熔断、指标监控 - 加入 http2</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/req-resp-flow-timeline/</link>
        <pubDate>Sat, 08 Jun 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 08 Jun 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/req-resp-flow-timeline/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/req-resp-flow-timeline/req-resp-flow-timeline.assets/logo.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💂 关于封面：&lt;br /&gt;
&lt;a href=&#34;https://fineartamerica.com/featured/2-london-watercolor-painting-juan-bosco.html&#34;&gt;Tower Bridge watercolor painting by Juan Bosco&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;📚 摘录说明：&lt;br /&gt;
本文摘自一本我在写作中的开源书&lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/index.html&#34;&gt;《Istio &amp;amp; Envoy 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/ch2-envoy/req-resp-flow-timeline/req-resp-flow-timeline.html&#34;&gt;Envoy 请求与响应调度&lt;/a&gt; 一节。&lt;strong&gt;如果你看到的转载图片不清，可回到原书。&lt;a href=&#34;https://istio-insider.mygraphql.com/_/downloads/zh-cn/latest/epub/&#34;&gt;《Istio &amp;amp; Envoy 内幕》epub 格式下载&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>dev-ops</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Istio 基于 ALPN/TLS 握手的 HTTP 元信息交换</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/alpn-http-meta-exchange/</link>
        <pubDate>Sun, 12 May 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 12 May 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/alpn-http-meta-exchange/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/alpn-http-meta-exchange/index.assets/churchill-truman-stalin.jpg.webp&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;内容简介：为实现服务网格，Istio Proxy 需要在网点互连握手时作元信息交换。故 Istio 在原生 Envoy 上再定制了传输层的规约，以实现元信息交换。本文主要讲 基于 ALPN/TLS 握手的 HTTP 元信息交换。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>http</category>
            
          
            
              <category>http2</category>
            
          
            
              <category>tls</category>
            
          
            
              <category>alpn</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy 的线程模型 与 Thread Local</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/thread-model/</link>
        <pubDate>Wed, 01 May 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 01 May 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/thread-model/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/thread-model/logo-ww2-eu-map.jpg&#34; alt=&#34;World War II in Europe 1939~1941&#34;&gt;&lt;/p&gt;
&lt;p&gt;内容简介：本文尝试以具体示例说明 Envoy 的线程模型 与 Thread Local 实现。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📚 摘录说明：&lt;br /&gt;
本文摘自一本我在写作中的开源书&lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/index.html&#34;&gt;《Istio &amp;amp; Envoy 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://istio-insider.mygraphql.com/zh-cn/latest/ch2-envoy/arch/thread-model/thread-model.html&#34;&gt;线程模型&lt;/a&gt; 一节。&lt;strong&gt;如果你发现转载图片不清，请回到原书。&lt;/strong&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>thread</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的首次开源 Envoy 贡献 - 劳动的快乐</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/my-first-envoy-pr/</link>
        <pubDate>Wed, 01 May 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 01 May 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/my-first-envoy-pr/</guid>
        <description>&lt;p&gt;Envoy 是我看过的所有开源项目中，文档方面做得最好的。 尽管如此，对于新入门这个项目源码的 &lt;code&gt;DevOps 专家&lt;/code&gt; 或 &lt;code&gt;有志于贡献源码的开发者&lt;/code&gt; 来说，还是比较高门槛。这也是我写&lt;a href=&#34;https://istio-insider.mygraphql.com/&#34;&gt;《Istio &amp;amp; Envoy 内幕》&lt;/a&gt;一书的原因之一。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>open source</category>
            
          
            
              <category>github</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>True world?</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/fake-world-story/</link>
        <pubDate>Wed, 10 Apr 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 10 Apr 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/fake-world-story/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/fake-world-story/index.assets/happiness-mouse-on-metro.png&#34; alt=&#34;image-20240410220507758&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Image from [Happiness short movie - Steve Cutts]&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Disclaimer: 本故事纯属虚构，如有雷同，实属不幸&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;在 Long long ago，有个叫 CanTon City 的城市。故事的主角，叫 Mickey，他住在离 CanTon City 30 公里远的 FoSame City。这是一个平凡的上班日，拥挤的地铁车厢里，我们的主角 Mickey 站立着，左右两边和背面都被人顶得严实。耳边传来的不是 TikTok 剧场的声音，就是旁边一群貌似退休者在兴奋地讨论下个景点去哪里，还有讨论朋友圈发的那朵木棉花没对好焦，大概是镜头买了旧款，光圈不足……偶尔还可以嗅到一些不知从哪儿来的气味。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>story</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy/Istio 的拥塞流控与背压 - 看遍了冷冷清風吹飄雪 漸厚</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/flow-control/</link>
        <pubDate>Sat, 06 Apr 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 06 Apr 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/flow-control/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/flow-control/istio-insider-logo.jpg&#34; alt=&#34;封面&#34;&gt;&lt;/p&gt;
&lt;p&gt;和所有代理类型的软件一样，Envoy 很重视流控，因为CPU/内存资源是有限的。但流控永远不是一个简单的事情。它牵扯到数据流路径上的所有参与者。本文试图说明白其中的原理与协作关系。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>http</category>
            
          
            
              <category>http2</category>
            
          
            
              <category>backpressure</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>借一次家庭局域网互联探索 - 谈谈互联网原义</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/</link>
        <pubDate>Sun, 10 Mar 2024 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 10 Mar 2024 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/index.assets/logo.png&#34; alt=&#34;image-20240310143521710&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图：广州艺术博物馆顶。拍摄于 2024年 2 月&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;对于大牛，这段内容有点哆嗦唠叨，毕竟读者想看的或者就是个配网方法，而作者想写的竟然是 Internet 历史，不喜可跳过。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>lan</category>
            
          
            
              <category>lab</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2024, live like Sisyphus</title>
        <link>https://blog.mygraphql.com/zh/posts/wrap-up/2023-wrap-up/</link>
        <pubDate>Fri, 26 Jan 2024 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 26 Jan 2024 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/wrap-up/2023-wrap-up/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2023-wrap-up/index.assets/logo.png&#34; alt=&#34;image-20240128121906836&#34;&gt;&lt;/p&gt;
&lt;p&gt;在开始写作本文时，我和平日一样，在拥挤的下班地铁上。已经站立了一个多小时了。背着办公电脑（码农锄头）的老腰开始有点酸痛。是的，我真想写点东西。这段时间被一堆生活破事儿打乱了生活本身、工作、写作的节奏。但我发现越是烦乱，另一个脑袋越会有一些一闪而过的感悟。当时觉得这些碎片式的感悟很有意思，很多是本来经历过和领悟过的东西，以前一直无法用言语表述，而在那一刹那，突然找到了很贴切的语言。可事后很快又忘记得一干二净。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>原来我非不快乐 - 2025</title>
        <link>https://blog.mygraphql.com/zh/posts/wrap-up/2025-wrap-up/</link>
        <pubDate>Mon, 15 Jan 2024 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 15 Jan 2024 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/wrap-up/2025-wrap-up/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2025-wrap-up/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025 已经过去半个多月了。我却欠它一个照例的回顾。这大概是生命中到现在为止剧情最狗血的一年。不是不想回顾，是不知从何说起。&lt;/p&gt;
&lt;h2 id=&#34;这一年发生了什么&#34;&gt;这一年发生了什么&lt;/h2&gt;
&lt;p&gt;中年码农失业、人生第一次最接近死亡的体验，然后在自己还没康复完，就轮到持续数月的老人医院求医和照料。开头的一个月没按时吃过几顿饭。睡觉时手机也从来不敢静音。每天不是跑医院就是查各种资料和找能看到的最适合的医生。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>细说 Envoy 的事件与 NetworkFilter 框架 —— 机关算尽太聪明</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/event-driven-network-filter/</link>
        <pubDate>Sat, 02 Dec 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 02 Dec 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/event-driven-network-filter/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/event-driven-network-filter/index.assets/793996-black-and-white-mr.-bean-quotes-rowan-atkinson-e1521340858596.jpg&#34; alt=&#34;封面&#34;&gt;&lt;/p&gt;
&lt;p&gt;Istio 的流量核心是 Envoy。而 Envoy 的核心是事件架构。明白了事件架构，深入研究 Envoy 就不难了。本文尝试分析 Envoy 的事件与 NetFilter 的设计架构。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💂 关于封面：&lt;br /&gt;
Rowan Atkinson(阿特金森)， 《Mr Bean 憨豆先生》的演员。大部分人只以为他只是个用身体语言去演出不那么高级趣味的肥皂剧的演员，那么直是可惜了。现实是：&lt;br /&gt;
憨豆先生，电气工程师？ 阿特金森是一位知名学者，在纽卡斯尔大学获得了电气工程学士学位，在牛津大学女王学院获得了硕士学位。最重要的是，牛津大学在 2006 年授予他荣誉院士称号，这是一项相当严格的成就。 尽管他最初开始表演是为了克服童年的口吃，但他在舞台上找到了归宿。他甚至决定放弃攻读电气工程博士学位，将时间投入到演艺事业中。 自2012年臭名昭著的憨豆先生退休以来，阿特金森只复活了该角色一次，但这位演员在娱乐界的工作还远未结束。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>libevent</category>
            
          
            
              <category>oop design</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linux 下巨量窗口快速查找切换工具 Rofi —— 键盘总比眼睛快</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/</link>
        <pubDate>Sat, 07 Oct 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 07 Oct 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/index.assets/logo.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图源：&lt;a href=&#34;https://rambox.medium.com/how-to-organize-your-windows-desktop-5153918dd97&#34;&gt;How to organize your Windows desktop&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;窗口切换是程序员的高频操作，而在今天大屏和巨量窗口环境中，眼和手都不堪重负。如何让心流不被找窗口打断？如果有个工具，只需要输入窗口名关键字就可以完成切换，该多好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>life-hacker</category>
            
          
            
              <category>desktop</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>误落尘网中，一去三十年</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/</link>
        <pubDate>Fri, 29 Sep 2023 10:00:00 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 29 Sep 2023 10:00:00 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/index.assets/logo.png&#34; alt=&#34;image-20251108160253250&#34;&gt;&lt;/p&gt;
&lt;p&gt;从 2025 年6月底失业到现在(2025 年 11 月)，大概 5 个月的时间，经历了不少的事情，一直想记录下来; 但又苦于没想出什么可以提炼出来的感悟，所以一直都没有开始写。毕竟，写一篇吐苦水式的伤痕文学大概没多少人想看，自己写着也乏味。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>eBPF 求证坊间传闻：Java GC 日志可导致整个 JVM 服务卡顿？</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/</link>
        <pubDate>Sat, 23 Sep 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Sep 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/index.assets/logo.png&#34; alt=&#34;image-20230924103632524&#34;&gt;&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;实现世界的 Java 应用，都会记录 GC 日志。但不是所有人都知道小小的日志可能导致整个 JVM 服务卡顿。本文尝试用 eBPF 等分析方法，去证明具体环境下，问题的存在与否。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>gc</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>io</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>eBPF 求证坊间传闻：mmap &#43; Java Safepoint 可导致整个 JVM 服务卡顿？</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/</link>
        <pubDate>Sat, 23 Sep 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Sep 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/index.assets/logo.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;Java 支持好几种文件读取方法，本文要说的是小众的 &lt;code&gt;mmap(MappedByteBuffer)&lt;/code&gt; 以及它与 Safepoint、JVM 服务卡顿之间的关系。本文尝试用 eBPF 等分析方法，去证明具体环境下，问题的存在与否。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>safepoint</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>io</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>如何测量进程级别或容器级别的 IO 延迟</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/kernel/task-io-accounting/</link>
        <pubDate>Sat, 23 Sep 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Sep 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/kernel/task-io-accounting/</guid>
        <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;IO 延迟问题几乎是每个生产系统都会或多或少遇到的问题。虽然现在 NVMe + SSDs 已经可以到达 10Gbytes/s 的呑吐量，价格也非常亲民。但 IO 延迟问题不会消失。因为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一些基于网络的的存储方案，如 Ceph，天然地有不稳定性&lt;/li&gt;
&lt;li&gt;SSD / RAIN Controller 本身的不稳定性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 Linux 下，传统地，我们有 iostat / sar 等等工具可以看系统级、存储设备级的问题。但均不能告诉你以下几点：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>linux</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>io</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosting 个人在线记事本 - Joplin</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting-notebook/</link>
        <pubDate>Wed, 09 Aug 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 09 Aug 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting-notebook/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;现代生活，大部分人都有信息过载的烦恼。光是家庭事务、生活、工作的信息量就已经爆炸了。程序员群体更是要持续学习充电，信息量更大。好记性不如烂笔头，那么如何记才可以最大化记事的价值？电子化的记事是一个选项，只要手机在身，就可以方便记录与查阅。还可以多设备同步备份和离线查阅。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>noting</category>
            
          
            
              <category>note-writing</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>准 Self-hosting 的个人在线书架 - Zotero</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/online-bookshelf/</link>
        <pubDate>Wed, 02 Aug 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 02 Aug 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/online-bookshelf/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;只要您还想在程序员道路上发展，那么长期的系统式的学习是少不了的。碎片时代，知识的学习渠道也在短平快化。似乎，没什么东西是一个 ChatGPT + 搜索解决不了的。但硬币总有两面，如果每个人都只停留在 “知道” 碎片知识的阶段，而你可以深入和融会贯通知识，并消化思考，整合。最少有以下好处：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>book</category>
            
          
            
              <category>noting</category>
            
          
            
              <category>note-writing</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>分析 Java 应用在 Istio 下的 warm up</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/</link>
        <pubDate>Sun, 09 Jul 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 09 Jul 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/index.assets/W020220325787487242889.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;分析-java-应用在-istio-下的-warm-up&#34;&gt;分析 Java 应用在 Istio 下的 warm up&lt;/h1&gt;
&lt;h2 id=&#34;故事的开始&#34;&gt;故事的开始&lt;/h2&gt;
&lt;p&gt;在很久很久前的，有个测试找到一个开发，说 k8s 下 HPA(自动伸缩) 新启动的 pod 的 api latency 特别高：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/index.assets/dashboard-high-latency-api.png&#34; alt=&#34;dashboard-high-latency-api&#34;&gt;&lt;/p&gt;
&lt;p&gt;需要注意，上图是在 Java 服务提供者自身观察到的 latency，即观察点是服务的 server 端或说 upstream 。有同学会问，这个重要吗？ api latency 就是 api latency 了，还要管是什么观察点的观察结果？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>jit</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>k8s 容器热替换/重启主进程 - gdb execve syscall 法</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-execve-syscall/</link>
        <pubDate>Thu, 22 Jun 2023 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 22 Jun 2023 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-execve-syscall/</guid>
        <description>&lt;h1 id=&#34;k8s-容器热替换重启主进程---gdb-execve-syscall-法&#34;&gt;k8s 容器热替换/重启主进程 - gdb execve syscall 法&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-execve-syscall/index.assets/logo.png&#34; alt=&#34;Mr. Bean&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;p&gt;k8s 环境下，在不停止或重启 container 的情况下，重启应用进程(pid:1)，甚至重新加载运行新版本的应用。本文以 gdb 作为工具，调用内核的 close / execve syscall，去实现这个目标。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>dev-env</category>
            
          
            
              <category>gdb</category>
            
          
            
              <category>troubleshooting</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>k8s 容器热替换/重启主进程 - gdb exec 法</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-gdb-libc/</link>
        <pubDate>Sun, 18 Jun 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 18 Jun 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-gdb-libc/</guid>
        <description>&lt;h1 id=&#34;k8s-容器热替换重启主进程---gdb-exec-法&#34;&gt;k8s 容器热替换/重启主进程 - gdb exec 法&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/restart-container-proc-gdb-libc/index.assets/logo.png&#34; alt=&#34;Fabia - Skoda&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The first car in my life - Fabia - Skoda&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;p&gt;k8s 环境下，在不停止或重启 container 的情况下，重启应用进程(pid:1)，甚至重新加载运行新版本的应用。本文以 gdb 作为工具，调用应用容器自带的 libc 的 close &amp;amp; exec 函数，去实现这个目标。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>dev-env</category>
            
          
            
              <category>gdb</category>
            
          
            
              <category>troubleshooting</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>调试与观察 istio-proxy Envoy sidecar 的启动过程</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/</link>
        <pubDate>Wed, 07 Jun 2023 20:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 07 Jun 2023 20:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e8%b0%83%e8%af%95%e4%b8%8e%e8%a7%82%e5%af%9f-istio-proxy-envoy-sidecar-%e7%9a%84%e5%90%af%e5%8a%a8%e8%bf%87%e7%a8%8b&#34;&gt;调试与观察 istio-proxy Envoy sidecar 的启动过程&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#debug-%e5%88%9d%e5%a7%8b%e5%8c%96%e4%b9%8b%e9%9a%be&#34;&gt;debug 初始化之难&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#envoy-%e7%9a%84%e5%90%af%e5%8a%a8-attach-%e6%96%b9%e6%b3%95&#34;&gt;Envoy 的启动 attach 方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e6%89%8b%e5%b7%a5-inject-%e7%9a%84-istio-proxy-container&#34;&gt;手工 inject 的 istio-proxy container&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#1-%e5%ae%9a%e5%88%b6%e6%89%8b%e5%b7%a5%e6%8b%89%e8%b5%b7%e7%9a%84-istio-proxy-%e7%8e%af%e5%a2%83&#34;&gt;1. 定制手工拉起的 istio-proxy 环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#2-%e5%90%af%e5%8a%a8-remote-debug-server-%e4%b8%8e-vscode-debug-session&#34;&gt;2. 启动 remote debug server 与 vscode debug session&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#21-%e8%ae%be%e7%bd%ae%e6%96%ad%e7%82%b9&#34;&gt;2.1 设置断点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#3-%e5%90%af%e5%8a%a8-pilot-agent-%e5%92%8c-envoy&#34;&gt;3. 启动 pilot-agent 和 envoy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#4-%e5%bc%80%e5%a7%8b-debug&#34;&gt;4. 开始 debug&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e5%b8%b8%e7%94%a8%e6%96%ad%e7%82%b9&#34;&gt;常用断点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e9%99%84%e5%bd%95---%e5%86%99%e7%bb%99%e8%87%aa%e5%b7%b1%e7%9a%84%e4%b8%80%e4%ba%9b%e5%a4%87%e5%bf%98&#34;&gt;附录 - 写给自己的一些备忘&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#istio-auto-inject-%e7%9a%84-sidecar-container--%e6%88%91%e6%b2%a1%e6%9c%89%e4%bd%bf%e7%94%a8%e8%bf%99%e7%a7%8d%e6%96%b9%e6%b3%95&#34;&gt;Istio auto inject 的 sidecar container  (我没有使用这种方法)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e5%9c%a8-worker-node-%e4%b8%8a-debugger-wait-process&#34;&gt;在 worker node 上 Debugger wait process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#debugger-follow-process-fork&#34;&gt;Debugger follow process fork&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#debugger-wrapper-script&#34;&gt;Debugger wrapper script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#%e6%b5%81%e9%87%8f-debug&#34;&gt;流量 debug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/#lldb-%e5%b8%b8%e7%94%a8%e5%91%bd%e4%bb%a4%e5%8d%95&#34;&gt;lldb 常用命令单&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy-start/index.assets/image-logo.png&#34; alt=&#34;image-20230607223812475&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>lldb</category>
            
          
            
              <category>debug</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>cloud</category>
            
          
            
              <category>dev-env</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>调试 Istio 网格中运行的 Envoy sidecar C&#43;&#43; 代码</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy/</link>
        <pubDate>Wed, 10 May 2023 17:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 10 May 2023 17:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/debug-istio-proxy/</guid>
        <description>&lt;h1 id=&#34;调试-istio-网格中运行的-envoy-sidecar-c-代码&#34;&gt;调试 Istio 网格中运行的 Envoy sidecar C++ 代码&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文来源于我的开源书籍 &lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/dev-istio/dev-istio-proxy/debug-istio-proxy/debug-istio-proxy.html&#34;&gt;《Istio Insider》&lt;/a&gt; 。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;
&lt;p&gt;调试在 Istio 网格中运行的 Envoy sidecar C++ 代码。 它有助于在代码级别深入研究 sidecar。 它使我们在解决 Istio 问题或编写更好的 EnvoyFilter 或 eBPF 跟踪程序时更有信心。 本文介绍如何使用 &lt;code&gt;VSCode&lt;/code&gt; 和 &lt;code&gt;lldb&lt;/code&gt; 调试 Envoy istio-proxy sidecar。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>lldb</category>
            
          
            
              <category>debug</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>cloud</category>
            
          
            
              <category>dev-env</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>K8s CSI &amp; ceph 构架图解，还有一些闲话</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/csi/ceph-csi-arch/</link>
        <pubDate>Sun, 30 Apr 2023 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 30 Apr 2023 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/csi/ceph-csi-arch/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/csi/ceph-csi-arch/index.assets/logo.png&#34; alt=&#34;image-20230430103057537&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图源：Mr. Bean&amp;rsquo;s Holiday (2007) - Bean 经历万难，最终发现他的假期目的地&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;云存储的学习困难，难于 K8s CSI 框架复杂性，再加上如 &lt;code&gt;ceph&lt;/code&gt; 分布式存储的复杂性。本文试图用互动式图例，让读者串联起两个领域自身与领域间的知识点，从而对整个流程有一个总体的感知；避免盲目深入一个一个零散的知识点孤岛而迷路。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ceph</category>
            
          
            
              <category>csi</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>基于 libbpf 的 TCP 连接延迟监视工具 tcpconnlat 分析 - eBPF基础知识 Part5</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/</link>
        <pubDate>Wed, 12 Apr 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 12 Apr 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/index.assets/image-20230413000154604.png&#34; alt=&#34;image-20230413000154604&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;基于-libbpf-的-tcp-连接延迟监视工具-tcpconnlat-分析---ebpf基础知识-part5&#34;&gt;基于 libbpf 的 TCP 连接延迟监视工具 tcpconnlat 分析 - eBPF基础知识 Part5&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
            
              <category>fentry</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>经典 libbpf 范例: uprobe 分析 - eBPF基础知识 Part4</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/</link>
        <pubDate>Mon, 03 Apr 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 03 Apr 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/index.assets/image-20230403233205803.png&#34; alt=&#34;image-20230403233205803&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;经典-libbpf-范例-uprobe-分析---ebpf基础知识-part4&#34;&gt;经典 libbpf 范例: uprobe 分析 - eBPF基础知识 Part4&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
            
              <category>uprobe</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>经典 libbpf 范例: bootstrap 分析 - eBPF基础知识 Part3</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-2-bootstrap/</link>
        <pubDate>Sat, 25 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 25 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-2-bootstrap/</guid>
        <description>&lt;h2 id=&#34;经典-libbpf-范例-bootstrap-分析---ebpf基础知识-part3&#34;&gt;经典 libbpf 范例: bootstrap 分析 - eBPF基础知识 Part3&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linus 自传 [Just for FUN]读后感 - Part2 从一个书呆子（Nerd）的诞生，扯到现代教育</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/</link>
        <pubDate>Fri, 17 Mar 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 17 Mar 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/index.assets/vic_20_bambino.jpg&#34; alt=&#34;Commodore VIC 20 – Cronologia – VIC 20&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图片来源：&lt;a href=&#34;https://www.vic-20.it/commodore-vic-20-cronologia/&#34;&gt;www.vic-20.it&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;本文包括 Linus 自传 [Just for FUN 读书笔记] ——  一个书呆子（Nerd）的诞生 部分的读后感。讲述了 Linus 如何与计算机结缘。观察Linus 幼年时，对比现代科技环境与社会文化环境后的一些感想。也聊聊现代教育鸡娃的事实。作为一个程序员，同时也是一个小学生的家长，我的浅见。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>biography</category>
            
          
            
              <category>Linus</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>BPF 系统接口 与 libbpf 示例分析 - eBPF基础知识 Part2</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/</link>
        <pubDate>Sat, 11 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 11 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/</guid>
        <description>&lt;h2 id=&#34;bpf-系统接口-与-libbpf-minimal-示例分析---ebpf基础知识&#34;&gt;BPF 系统接口 与 libbpf minimal 示例分析 - eBPF基础知识&lt;/h2&gt;
&lt;p&gt;如果你学习 eBPF。那么你不久就会发现，几乎所有 eBPF 的架构，包括 &lt;code&gt;BCC&lt;/code&gt;/&lt;code&gt;bpftrace&lt;/code&gt; 在内，都在用户态使用了 &lt;code&gt;libbpf&lt;/code&gt; 这个 helper lib。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/libbpf-bootstrap-study-1-minimal.assets/image-20230311151420617.png&#34; alt=&#34;image-20230311151420617&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linus 自传 [Just for FUN]读后感 - Part1 前言</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/</link>
        <pubDate>Fri, 10 Mar 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 10 Mar 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;最近有幸读到 Linux 发起者 Linus 主笔的 [Just for FUN &amp;ndash; THE STORY OF AN ACCIDENTAL REVOLUTIONARY] 一书。比较有趣，怕日后忘记。于是写本文以记录。&lt;/p&gt;
&lt;h2 id=&#34;书评&#34;&gt;书评&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://book.douban.com/subject/1451172/&#34;&gt;豆瓣读书中有本书的评价&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;本书对作者的评价是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有些人天生就有能力领导数百万人。 另外有的人天生就是要编写改变世界的软件。 而同时做到了这两点的只有一个人：Linus Torvalds。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>biography</category>
            
          
            
              <category>Linus</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>ELF 格式简述 - eBPF基础知识 Part1</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/</link>
        <pubDate>Sat, 04 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 04 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/index.assets/elf2.jpg&#34; alt=&#34;elf2&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文摘自我的《Mark’s DevOps 雜碎》中的 &lt;a href=&#34;https://devops-insider.mygraphql.com/zh_CN/latest/low-tec/elf/elf-format/elf-format.html&#34;&gt;《ELF 格式简述》&lt;/a&gt;。如图片不清，可转回原处。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;为何要研究 ELF 格式？因为想深入点学习 eBPF ，充分利用它的特性，而非只利用它的名声，ELF 格式是跳不过的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>实时跟踪内核 TCP 连接失败与重试 - 基于 BPF</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/trace/tcp-connect-syn-trace/</link>
        <pubDate>Fri, 17 Feb 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 17 Feb 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/trace/tcp-connect-syn-trace/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;生产环境的问题，按出现频率，大体可以分为两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高频问题&lt;/li&gt;
&lt;li&gt;低频问题
&lt;ul&gt;
&lt;li&gt;周期性低频问题&lt;/li&gt;
&lt;li&gt;无周期随机发生问题
&lt;ul&gt;
&lt;li&gt;单例发生&lt;/li&gt;
&lt;li&gt;多例发生&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一般，遇到 &lt;code&gt;无周期随机发生问题&lt;/code&gt; 且 &lt;code&gt;单例发生&lt;/code&gt;  的情况，是最难定位问题根源的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>tcp</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>特定条件下 Istio 发生 half-close 连接泄漏与出站连接失败</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/networking/half-close-connection-leak-and-local-port-collisions-issue/</link>
        <pubDate>Wed, 11 Jan 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 11 Jan 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/networking/half-close-connection-leak-and-local-port-collisions-issue/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/networking/half-close-connection-leak-and-local-port-collisions-issue/index.assets/iptables-feat.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;在 4 年前，Istio 让我眼前一亮的特性莫过于应用无关的&lt;code&gt;流量拦截&lt;/code&gt;和&lt;code&gt;透明代理&lt;/code&gt;。这为低成本进入 Service Mesh 时代大大降低了开发门槛。也是很多公司引入 Istio 的主要原因之一。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>tcp</category>
            
          
            
              <category>socket</category>
            
          
            
              <category>conntrack</category>
            
          
            
              <category>iptable</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy/Istio 连接生命周期与临界异常 —— 不知所谓的连接 REST</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/envoy/connection-life/</link>
        <pubDate>Wed, 11 Jan 2023 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 11 Jan 2023 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/envoy/connection-life/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/envoy/connection-life/index.assets/logo.png&#34; alt=&#34;image-20230111212444836&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;本文目标：说明 Envoy 连接控制相关参数作用。以及在临界异常情况下的细节逻辑。目标是如何减少连接异常而引起的服务访问失败，提高服务成功率。&lt;/p&gt;
&lt;p&gt;近期为解决一个生产环境中的 Istio Gateway 连接偶尔 Reset 问题，研究了一下 Envoy/Kernel 在 socket 连接关闭上的事。其中包括 Envoy 的连接管理相关参数和 Linux 系统网络编程的细节。写本文以备忘。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>dev-ops</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2022年的回顾;2023年的一些想法</title>
        <link>https://blog.mygraphql.com/zh/posts/wrap-up/2022-wrap-up/</link>
        <pubDate>Sat, 31 Dec 2022 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 31 Dec 2022 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/wrap-up/2022-wrap-up/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2022-wrap-up/index.assets/2022-warpup3.jpg&#34; alt=&#34;2022-warpup3&#34;&gt;&lt;/p&gt;
&lt;p&gt;2022年在我写这句话时，再过数小时就结束了。这是相当不平凡的一年。所以我觉得值得写个回顾。&lt;/p&gt;
&lt;h2 id=&#34;回顾回顾&#34;&gt;回顾回顾&lt;/h2&gt;
&lt;p&gt;开始前，我翻了翻自己的博客。才发现，&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2020-wrap-up/&#34;&gt;我只在 2020 年结尾写过年度回顾：《2020年的回顾;2021年的一些想法》&lt;/a&gt;。2021 年结尾，只写了&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/wu/books/books-2021/&#34;&gt;《2022年书目推荐 —— 来自 GOTO podcast》&lt;/a&gt;。我想，是因为当年做的事情和设想相差太大了，就直接不写回顾了，毕竟不能太难为自己。今年的设想和执行还算比较对得上，所以想写个回顾。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>世事洞明皆學問 - tcpdump 抓取 Istio 流量真心话</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/tcpdump-mtls-istio-mesh/</link>
        <pubDate>Sat, 17 Dec 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 17 Dec 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/tcpdump-mtls-istio-mesh/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/tcpdump-mtls-istio-mesh/index.assets/logo.png&#34; alt=&#34;image-20221218113505437&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.netflix.com/tudum/articles/rowan-atkinson-man-vs-bee-release-date&#34;&gt;&lt;em&gt;图片来源: Rowan Atkinson Goes to Battle in ‘Man vs. Bee’&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文摘自我的开源书&lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/index.html&#34;&gt;《Istio &amp;amp; Envoy 内幕》&lt;/a&gt; 中的  &lt;a href=&#34;https://istio-insider.mygraphql.com/zh_CN/latest/ch1-istio-arch/istio-ports-components.html&#34;&gt;Istio 端口 与 组件&lt;/a&gt;。如图片不清，可回到原文。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最近，需要在 mTLS 的 Istio 1.12 环境下定位一些 “神奇” 的网络问题。经历过一些 tcpdump 抓取 Istio 流量的折腾，被迫又复习了一次 Istio 的网络魔术，固记录于本文。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>图解 Fluent Bit 内部设计</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/log/fluentbit/fluentbit-internal/</link>
        <pubDate>Sat, 17 Dec 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 17 Dec 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/log/fluentbit/fluentbit-internal/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/log/fluentbit/fluentbit-internal/index.assets/hero.svg&#34; alt=&#34;hero&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;图解-fluent-bit-内部设计&#34;&gt;图解 Fluent Bit 内部设计&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文摘录自我的开源书：&lt;a href=&#34;https://devops-insider.mygraphql.com/zh_CN/latest/index.html&#34;&gt;《Mark’s DevOps 雜碎》&lt;/a&gt;中的 &lt;a href=&#34;https://devops-insider.mygraphql.com/zh_CN/latest/observability/log/fluentbit/fluentbit-internal.html&#34;&gt;图解 Fluent Bit 内部设计&lt;/a&gt;。如果你看到图片不清晰，请转回原文。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;最近，由于工作需要，用老程序员在  🐑 羊之前最快的速度，通过文档、源码，学习了 Fluent Bit 的一些核心实现设计。正所谓，学得快，忘得更快。固作本笔记，以备将来学不动。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>fluent-bit</category>
            
          
            
              <category>log</category>
            
          
            
              <category>observability</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>从《Why I Left Facebook》扯到蘇東坡《卜算子》</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/</link>
        <pubDate>Sun, 30 Oct 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 30 Oct 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/</guid>
        <description>&lt;h1 id=&#34;从why-i-left-facebook扯到蘇東坡卜算子&#34;&gt;从《Why I Left Facebook》扯到蘇東坡《卜算子》&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/why-i-left-facebook.assets/logo.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;前段时间，由于要研究一个 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/&#34;&gt;TCP 接收缓冲区大小配置的问题&lt;/a&gt;，搜索到了一编 Blog： &lt;a href=&#34;https://hechao.li/2022/09/30/a-tcp-timeout-investigation/&#34;&gt;A TCP Timeout Investigation&lt;/a&gt;。 感觉 Blog 主是个现世小众的技术较真之人。 于是浏览了他的其它文章，看到一编： &lt;a href=&#34;https://hechao.li/2022/06/24/why-i-left-facebook/&#34;&gt;Why I Left Facebook&lt;/a&gt;。感触良多，故翻译之。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>容器化 TCP Socket 缓存、接收窗口参数</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/</link>
        <pubDate>Sun, 02 Oct 2022 23:22:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 02 Oct 2022 23:22:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/index.assets/logo.png&#34; alt=&#34;image-20221014112014044&#34;&gt;&lt;/p&gt;
&lt;p&gt;最近需要支持一个单 POD 的 TCP 连接数上 10k 的基础服务(Cassandra)的容器化。需要对其使用的资源（特别是TCP缓存内存），以及对相邻 Pod（同一  worker node 上运行的）影响（即容器隔离情况），等进行预估。故写本文，以备忘。希望对读者也有一定参考价值，毕竟做技术要较真，要么有时间和能力就自己看内核源码，如果不能，要看文档和文章的话，只能货比三家才靠谱。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>TCP</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>socket</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>可能是最完整的 TCP 连接健康指标工具 ss 的说明</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/</link>
        <pubDate>Sat, 01 Oct 2022 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 01 Oct 2022 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/index.assets/image-20220801231018488.png&#34; alt=&#34;image-20220801231018488&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%86%99%e5%9c%a8%e5%89%8d%e9%9d%a2&#34;&gt;写在前面&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#tcp-%e8%bf%9e%e6%8e%a5%e5%81%a5%e5%ba%b7%e7%9a%84%e9%87%8d%e8%a6%81%e6%80%a7&#34;&gt;TCP 连接健康的重要性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8b-tcp-%e8%bf%9e%e6%8e%a5%e5%81%a5%e5%ba%b7&#34;&gt;如何查看 TCP 连接健康&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%ae%b9%e5%99%a8%e5%8c%96%e6%97%b6%e4%bb%a3&#34;&gt;容器化时代&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e6%9b%be%e7%a5%9e%e7%a7%98%e7%9a%84-ss&#34;&gt;曾神秘的 &lt;code&gt;ss&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e6%9b%b4%e7%a5%9e%e7%a7%98%e7%9a%84%e6%97%a0%e6%96%87%e6%a1%a3%e6%8c%87%e6%a0%87&#34;&gt;更神秘的无文档指标&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#ss-%e7%ae%80%e4%bb%8b&#34;&gt;&lt;code&gt;ss&lt;/code&gt; 简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%ad%97%e6%ae%b5%e8%af%b4%e6%98%8e&#34;&gt;字段说明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#recv-q%e4%b8%8esend-q&#34;&gt;Recv-Q与Send-Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%9f%ba%e6%9c%ac%e4%bf%a1%e6%81%af&#34;&gt;基本信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%86%85%e5%ad%98tcp-windowtcp-buffer-%e7%9b%b8%e5%85%b3&#34;&gt;内存/TCP Window/TCP Buffer 相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#skmem&#34;&gt;skmem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcv_space&#34;&gt;rcv_space&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcv_ssthresh&#34;&gt;rcv_ssthresh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#mtumss-%e7%9b%b8%e5%85%b3&#34;&gt;MTU/MSS 相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#mss&#34;&gt;mss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#advmss&#34;&gt;advmss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#pmtu&#34;&gt;pmtu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcvmss&#34;&gt;rcvmss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#flow-control-%e6%b5%81%e6%8e%a7&#34;&gt;Flow control 流控&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#cwnd&#34;&gt;cwnd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#ssthresh&#34;&gt;ssthresh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#retrans-%e9%87%8d%e4%bc%a0%e7%9b%b8%e5%85%b3&#34;&gt;retrans 重传相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#retrans&#34;&gt;retrans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#bytes_retrans&#34;&gt;bytes_retrans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#timer-%e5%ae%9a%e6%97%b6%e5%99%a8&#34;&gt;timer 定时器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#other&#34;&gt;Other&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#app_limited&#34;&gt;app_limited&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%89%b9%e5%88%ab%e6%93%8d%e4%bd%9c&#34;&gt;特别操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#specified-network-namespace&#34;&gt;specified network namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#kill-socket&#34;&gt;kill socket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%9b%91%e5%90%ac%e8%bf%9e%e6%8e%a5%e5%85%b3%e9%97%ad%e4%ba%8b%e4%bb%b6&#34;&gt;监听连接关闭事件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e8%bf%87%e6%bb%a4%e5%99%a8&#34;&gt;过滤器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%9b%91%e6%8e%a7%e4%bd%bf%e7%94%a8%e4%be%8b%e5%ad%90&#34;&gt;监控使用例子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%8e%9f%e7%90%86&#34;&gt;原理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink&#34;&gt;Netlink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink_inet_diag&#34;&gt;NETLINK_INET_DIAG&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#idiag_ext&#34;&gt;idiag_ext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink-in-deep&#34;&gt;Netlink in deep&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%8f%82%e8%80%83&#34;&gt;参考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;写在前面&#34;&gt;写在前面&lt;/h2&gt;
&lt;p&gt;我不是网络专家，只是在经历了多年的生产和测试环境网络问题排查后，不想再得过且过，于是记录下所学到的知识。由于对 TCP 栈的实现了解有限，所以内容仅作参考。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>TCP</category>
            
          
            
              <category>socket</category>
            
          
            
              <category>ss</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>好心分手 - Istio 网格节点故障快速恢复初探</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/</link>
        <pubDate>Sun, 25 Sep 2022 23:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 25 Sep 2022 23:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%bc%80%e5%a7%8b%e6%b5%8b%e8%af%95&#34;&gt;开始测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%af%bb%e6%a0%b9&#34;&gt;寻根&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#tcp-half-open&#34;&gt;TCP half-open&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#keepalive&#34;&gt;keepalive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e9%87%8d%e4%bc%a0-timeout&#34;&gt;重传 timeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#zero-window-timeout&#34;&gt;Zero window timeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%ba%94%e7%94%a8-socket-%e5%b1%82%e7%9a%84-timeout-%e8%ae%be%e7%bd%ae&#34;&gt;应用 socket 层的 timeout 设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#tcp_user_timeout&#34;&gt;TCP_USER_TIMEOUT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#so_rcvtimeo--so_sndtimeo&#34;&gt;SO_RCVTIMEO / SO_SNDTIMEO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#poll-timeout&#34;&gt;poll timeout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%af%bb%e6%a0%b9%e6%80%bb%e7%bb%93&#34;&gt;寻根总结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e8%be%83%e7%9c%9f%e6%9c%89%e4%bb%80%e4%b9%88%e7%94%a8&#34;&gt;较真有什么用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e7%a9%ba%e9%97%b2%e8%bf%9e%e6%8e%a5%e7%9a%84-keepalive-%e6%a3%80%e6%9f%a5&#34;&gt;空闲连接的 keepalive 检查&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e4%bd%9c%e4%b8%ba-upstream%e6%9c%8d%e5%8a%a1%e7%ab%af-%e6%97%b6&#34;&gt;作为 upstream(服务端) 时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e4%bd%9c%e4%b8%ba-downstream%e5%ae%a2%e6%88%b7%e7%ab%af-%e6%97%b6&#34;&gt;作为 downstream(客户端) 时&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#tcp_user_timeout-1&#34;&gt;TCP_USER_TIMEOUT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#envoy-%e5%ba%94%e7%94%a8%e5%b1%82%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b&#34;&gt;Envoy 应用层健康检测&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b%e4%b8%8e%e8%bf%9e%e6%8e%a5%e6%b1%a0&#34;&gt;健康检测与连接池&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b%e4%b8%8e-endpoint-%e5%8f%91%e7%8e%b0&#34;&gt;健康检测与 endpoint 发现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e4%b8%bb%e5%8a%a8%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b-health-checking&#34;&gt;主动健康检测: Health checking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e8%a2%ab%e5%8a%a8%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b-outlier-detection&#34;&gt;被动健康检测: Outlier detection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%81%a5%e5%ba%b7%e6%a3%80%e6%b5%8b%e4%b8%8e-eds%e5%90%ac%e8%b0%81%e7%9a%84&#34;&gt;健康检测与 EDS，听谁的？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#envoy-%e5%ba%94%e7%94%a8%e5%b1%82%e7%9a%84%e8%b6%85%e6%97%b6&#34;&gt;Envoy 应用层的超时&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#envoy-%e5%ba%94%e7%94%a8%e5%b1%82%e7%9a%84%e8%bf%9e%e6%8e%a5%e7%ba%a7%e8%b6%85%e6%97%b6&#34;&gt;Envoy 应用层的连接级超时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#envoy-%e5%ba%94%e7%94%a8%e5%b1%82%e7%9a%84%e8%af%b7%e6%b1%82%e7%ba%a7%e8%b6%85%e6%97%b6&#34;&gt;Envoy 应用层的请求级超时&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%af%b9-downstreamclient-%e7%9a%84%e8%af%b7%e6%b1%82%e8%af%bb%e8%b6%85%e6%97%b6&#34;&gt;对 downstream(client) 的请求读超时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e5%af%b9-upstreamserver-%e7%9a%84%e5%93%8d%e5%ba%94%e7%ad%89%e5%be%85%e8%b6%85%e6%97%b6&#34;&gt;对 upstream(server) 的响应等待超时&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e8%b0%88%e8%b6%85%e6%97%b6%e5%88%ab%e5%bf%98%e8%ae%b0-retry-%e5%bd%b1%e5%93%8d&#34;&gt;谈超时，别忘记 retry 影响&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e6%80%9d%e8%80%83&#34;&gt;思考&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e4%b8%80%e7%82%b9%e6%80%bb%e7%bb%93&#34;&gt;一点总结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/#%e4%b8%bb%e8%a6%81%e5%8f%82%e8%80%83&#34;&gt;主要参考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-close/tcp-half-open/index.assets/logo.png&#34; alt=&#34;image-20220924220331753&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>tcp</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>chaos-testing</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Envoy &amp; Istio 性能指标与原理初探</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/</link>
        <pubDate>Sun, 11 Sep 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 11 Sep 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;br /&gt;
&lt;a href=&#34;https://theconstructor.org/case-study/tower-bridge-construction-london/352917/&#34;&gt;&lt;em&gt;(Tower Bridge)伦敦的塔桥的开口跨度&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-%e4%b8%8e-envoy-%e6%8c%87%e6%a0%87%e6%a6%82%e8%bf%b0&#34;&gt;Istio 与 Envoy 指标概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#envoy-%e6%8c%87%e6%a0%87&#34;&gt;Envoy 指标&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#envoy-%e6%8c%87%e6%a0%87%e6%a6%82%e8%bf%b0&#34;&gt;Envoy 指标概述&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#tag&#34;&gt;Tag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e6%8c%87%e6%a0%87%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b&#34;&gt;指标数据类型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e6%8c%87%e6%a0%87%e9%87%8a%e4%b9%89&#34;&gt;指标释义&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#cluster-manager&#34;&gt;cluster manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#http-connection-managerhcm&#34;&gt;http connection manager(HCM)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#listeners&#34;&gt;listeners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#server&#34;&gt;server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#watch-dog&#34;&gt;watch dog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#event-loop&#34;&gt;Event loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e9%85%8d%e7%bd%ae%e8%af%b4%e6%98%8e&#34;&gt;配置说明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#configbootstrapv3bootstrap&#34;&gt;config.bootstrap.v3.Bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#configmetricsv3statsconfig&#34;&gt;config.metrics.v3.StatsConfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#configmetricsv3statsmatcher&#34;&gt;config.metrics.v3.StatsMatcher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-%e6%8c%87%e6%a0%87&#34;&gt;Istio 指标&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-%e8%87%aa%e5%b7%b1%e7%9a%84-metrics&#34;&gt;Istio 自己的 Metrics&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e6%a0%87%e5%87%86%e6%8c%87%e6%a0%87%e8%af%b4%e6%98%8e&#34;&gt;标准指标说明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#metrics&#34;&gt;Metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#prometheus-%e7%9a%84-labels&#34;&gt;Prometheus 的 Labels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e4%bd%bf%e7%94%a8&#34;&gt;使用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-proxy-%e4%b8%8e%e5%ba%94%e7%94%a8%e7%9a%84-metrics-%e6%95%b4%e5%90%88%e8%be%93%e5%87%ba&#34;&gt;istio-proxy 与应用的 Metrics 整合输出&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e5%ae%9a%e5%88%b6%e4%b8%ba-metrics-%e5%a2%9e%e5%8a%a0%e7%bb%b4%e5%ba%a6&#34;&gt;定制：为 Metrics 增加维度&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e5%ae%9a%e5%88%b6%e5%8a%a0%e5%85%a5-request--response-%e5%85%83%e4%bf%a1%e6%81%af%e7%bb%b4%e5%ba%a6&#34;&gt;定制：加入 request / response 元信息维度&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86&#34;&gt;工作原理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-stat-filter-%e4%bd%bf%e7%94%a8&#34;&gt;istio stat filter 使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#istio-stat-plugin-%e5%ae%9e%e7%8e%b0&#34;&gt;istio stat Plugin 实现&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#envoy-%e5%86%85%e7%bd%ae%e7%9a%84-metrics&#34;&gt;Envoy 内置的 Metrics&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e5%ae%9a%e5%88%b6-envoy-%e5%86%85%e7%bd%ae%e7%9a%84-metrics&#34;&gt;定制 Envoy 内置的 Metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e5%8e%9f%e7%90%86&#34;&gt;原理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-metrics/#%e6%80%bb%e7%bb%93istio-proxy-%e6%8c%87%e6%a0%87%e5%9c%b0%e5%9b%be&#34;&gt;总结：Istio-Proxy 指标地图&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💂 关于封面：&lt;br /&gt;
相信很多人听过《London Bridge Is Falling Down》这个儿歌，有人也知道这个是英国传统的儿童游戏歌曲。但很多人和我一样，以为 &amp;ldquo;London Bridge&amp;rdquo; 就是封面中的塔桥。直到今天，我才知道，&amp;ldquo;London Bridge&amp;rdquo; 并不是 &amp;ldquo;Tower Bridge&amp;rdquo;。所以，封面不是 &amp;ldquo;London Bridge&amp;rdquo;。无论喜欢与否，一个时代的符号走到了终点，愿安宁。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>dev-ops</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>介绍我在起草中的一本书：《Istio &amp; Envoy 内幕》</title>
        <link>https://blog.mygraphql.com/zh/posts/mybooks/istio-insider/istio-insider-preview/</link>
        <pubDate>Sun, 14 Aug 2022 10:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 14 Aug 2022 10:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/mybooks/istio-insider/istio-insider-preview/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/mybooks/istio-insider/istio-insider-preview/istio-insider-preview.assets/book-cover-mockup-700.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;由来&#34;&gt;由来&lt;/h2&gt;
&lt;p&gt;大概在 2020 年，开始写 Blog ，然后不久开了个微信公众号，一直都在写一些技术文章和技工生涯的一些想法。几年下来，有正面的收获，也有反面的觉悟。但总像缺点什么。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>mybook</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Istio 学习地图 - 玩 Istio，而不是被 Istio 玩（友情预览版）</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/learn-istio/map-to-learn-istio/</link>
        <pubDate>Sat, 30 Jul 2022 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 30 Jul 2022 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/learn-istio/map-to-learn-istio/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/learn-istio/map-to-learn-istio/index.assets/o.png&#34; alt=&#34;o&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;写在开头&#34;&gt;写在开头&lt;/h2&gt;
&lt;h3 id=&#34;读者对象&#34;&gt;读者对象&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;本文的对象是想比较深入学习 Istio 机理的同学，但不清楚学习路线，想看看本文的一些所谓“经验”。&lt;/li&gt;
&lt;li&gt;对于未使用过 Istio 的同学，本文可能有点不好理解。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;友情提醒&#34;&gt;友情提醒&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;本文未写完，只是个友情预览版本&lt;/li&gt;
&lt;li&gt;本文不是技术干货，很多个人色彩和水分。但有时喝喝鸡汤也不错的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;重要风格样式本文的交互阅读方式-&#34;&gt;重要：风格、样式、本文的交互阅读方式 📖&lt;/h3&gt;
&lt;p&gt;可以这样说，我写作的大部时间不是花在文字上，是在图上，所以用电脑去读图，才是本文的正确打开方法。手机与微信号，只是个引流的阳谋。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>learning-guide</category>
            
          
        
        
        
      </item>
      

    
  </channel>
</rss>
