<?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>文章 on Mark 的滿紙方糖言</title>
    <link>https://blog.mygraphql.com/zh/posts/</link>
    <description>Recent content in 文章 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>Tue, 26 Mar 2019 08:47:11 +0100</lastBuildDate>
    
        <atom:link href="https://blog.mygraphql.com/zh/posts/index.xml" rel="self" type="application/rss+xml" />
    

      
      <item>
        <title>记了么：一个有记忆的 AI 外语老师</title>
        <link>https://blog.mygraphql.com/zh/posts/myprjs/everlingo/everlingo-intro/</link>
        <pubDate>Mon, 22 Jun 2026 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 22 Jun 2026 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/myprjs/everlingo/everlingo-intro/</guid>
        <description>&lt;h1 id=&#34;记了么一个有记忆的-ai-外语老师&#34;&gt;记了么：一个有记忆的 AI 外语老师&lt;/h1&gt;
&lt;h2 id=&#34;你是不是也有这样的经历&#34;&gt;你是不是也有这样的经历&lt;/h2&gt;
&lt;p&gt;无论是学习外语的学生🐤，还是职场中要使用外语的🐮🐴。都面对一个问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;外语学习需要记录和整理，但没有人喜欢记录&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;同一个单词查了三次、五次、十次，每次都觉得&amp;quot;这次应该记住了&amp;quot;，结果下次遇到还是一脸茫然。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>myprj</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>译：AI Agent 开发生命周期 (ADLC)</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/aiagent-design/agent-development-lifecycle/</link>
        <pubDate>Mon, 01 Jun 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 01 Jun 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/aiagent-design/agent-development-lifecycle/</guid>
        <description>&lt;p&gt;文章围绕“智能体开发生命周期（ADLC）”展开，系统拆解了企业如何将 AI Agent 从一次性 Demo 转化为可复制、高稳定的生产级系统。文章深入探讨了“构建、测试、部署、监控”四大核心阶段的工程实践与工具选择，并强调了成本控制、权限审计及资产复用等治理机制的重要性，为企业规模化落地 Agent 提供了清晰的工程化实战指南。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kanban - 多 Agent 协作设计模式</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/aiagent-design/kanban-multi-agent-collaboration/</link>
        <pubDate>Wed, 13 May 2026 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 13 May 2026 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/aiagent-design/kanban-multi-agent-collaboration/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/aiagent-design/kanban-multi-agent-collaboration/index.assets/logo.png&#34; alt=&#34;image-20260513220048964&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文以生成一个契合年度热点话题又现代科技化的 Mr.Bean 节目剧本为例，说明多 Agent Kanban 协作设计模式的应用。本文使用 hermes-agent ，但其它 agent 甚至你自己开发的也是可以应用的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>OpenClaw &#43; 云容器 = Agent 并发安全沙箱浏览器</title>
        <link>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-sandbox-browser/</link>
        <pubDate>Thu, 12 Mar 2026 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 12 Mar 2026 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-sandbox-browser/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/ai/ai-personal-assistant/openclaw-sandbox-browser/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文介绍 OpenClaw 如何构建安全沙箱浏览器环境。在多 Agent 并发时让浏览器也支持并发。通过容器化 Sandbox，可以实现浏览器隔离、并发任务支持以及资源回收等能力。同时分析沙箱工具权限配置的关键细节，并介绍 OpenClaw 源码调试方法。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>ai</category>
            
          
            
              <category>ai-agent</category>
            
          
            
              <category>openclaw</category>
            
          
            
              <category>self-hosting</category>
            
          
        
        
        
      </item>
      
      <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>招聘页面岗位订阅 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 实现分析 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>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>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>码农零基础构建 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>全栈后端架构与运维难题：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>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>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>轻量 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>图解 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>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>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>如何测量进程级别或容器级别的 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>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>特定条件下 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>好心分手 - 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>
      
      <item>
        <title>从性能问题定位，扯到性能模型，再到 TCP - 都微服务云原生了，还学 TCP 干嘛系列 Part 1</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-flow-control-part1/</link>
        <pubDate>Sat, 23 Jul 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Jul 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-flow-control-part1/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-flow-control-part1/index.assets/227908-1567168983.webp&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;本来想直接写理论、和实践分析的，但为了不 “赶客出門” 和不 TL;DR，还是以故事形式展开吧。语言要生动活泼。&lt;/p&gt;
&lt;h2 id=&#34;故事的开始&#34;&gt;故事的开始&lt;/h2&gt;
&lt;p&gt;话说，一次性能测试中，TPS 死活压不上，应用的响应时间增加。根据 Brendan Gregg 大神的最高指导精神，我开始用 &lt;a href=&#34;https://www.brendangregg.com/usemethod.html&#34;&gt;USE(Utilization Saturation and Errors)&lt;/a&gt; 方法学去定位这个性能问题。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>tcp</category>
            
          
            
              <category>flow control</category>
            
          
            
              <category>congestion control</category>
            
          
            
              <category>tcp window</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>玩火的容器内存控制 CGroup - 容器基础拾遗 Part 1</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/</link>
        <pubDate>Sun, 10 Jul 2022 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 10 Jul 2022 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/index.assets/logo.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%bc%95&#34;&gt;引&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e6%88%91%e4%bb%ac%e5%9c%a8%e8%b0%88%e5%ae%b9%e5%99%a8%e5%86%85%e5%ad%98%e6%97%b6%e5%88%b0%e5%ba%95%e5%9c%a8%e8%b0%88%e4%bb%80%e4%b9%88&#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/kernel/cgroup-mem/#cgroup-%e5%86%85%e5%ad%98%e8%af%b4%e6%98%8e&#34;&gt;CGroup 内存说明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%9f%ba%e7%a1%80%e6%a6%82%e5%bf%b5&#34;&gt;基础概念&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#page&#34;&gt;Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#anonymous-pages&#34;&gt;anonymous pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#lru-list&#34;&gt;LRU list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#lru-list-%e7%bb%84&#34;&gt;LRU list 组&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/kernel/cgroup-mem/#cgroup-%e6%a6%82%e8%bf%b0&#34;&gt;CGroup 概述&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e4%b8%bb%e8%ae%b0%e8%b4%a6%e8%8c%83%e5%9b%b4&#34;&gt;主记账范围&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%86%85%e6%a0%b8%e5%86%85%e5%ad%98%e8%ae%b0%e8%b4%a6%e8%8c%83%e5%9b%b4&#34;&gt;内核内存记账范围&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%86%85%e5%ad%98%e5%9b%9e%e6%94%b6&#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/kernel/cgroup-mem/#%e7%8a%b6%e6%80%81%e6%96%87%e4%bb%b6&#34;&gt;状态文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#memorystat&#34;&gt;memory.stat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#memoryusage_in_bytes&#34;&gt;memory.usage_in_bytes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#memorynuma_stat&#34;&gt;memory.numa_stat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#memoryfailcnt&#34;&gt;memory.failcnt&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/kernel/cgroup-mem/#%e6%8e%a7%e5%88%b6%e4%b8%8e%e4%ba%8b%e4%bb%b6%e9%80%9a%e7%9f%a5&#34;&gt;控制与事件通知&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%bc%ba%e5%88%b6%e5%9b%9e%e6%94%b6%e5%86%85%e5%ad%98-memoryforce_empty&#34;&gt;强制回收内存 memory.force_empty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%9f%ba%e4%ba%8e%e5%86%85%e5%ad%98%e9%98%88%e5%80%bc%e6%b0%b4%e4%bd%8d%e7%9a%84%e9%80%9a%e7%9f%a5&#34;&gt;基于内存阈值水位的通知&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e4%b8%8d%e8%a6%81-oom-kill%e5%8f%aa%e6%98%af%e6%9a%82%e5%81%9c&#34;&gt;不要 OOM Kill，只是暂停&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/low-tec/kernel/cgroup-mem/#%e7%9b%91%e6%8e%a7%e4%b8%8e%e6%8c%87%e6%a0%87&#34;&gt;监控与指标&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#k8s-%e7%9a%84%e5%ae%b9%e5%99%a8%e6%8c%87%e6%a0%87&#34;&gt;K8s 的容器指标&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e5%b8%b8%e8%a2%ab%e8%af%af%e8%a7%a3%e7%9a%84-k8s-%e6%8c%87%e6%a0%87&#34;&gt;常被误解的 K8s 指标&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#container_memory_usage_bytes&#34;&gt;container_memory_usage_bytes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#container_memory_working_set_bytes&#34;&gt;container_memory_working_set_bytes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#kubectl-top&#34;&gt;kubectl top&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#container_memory_cache-%e4%b8%8e-container_memory_mapped_file-%e7%9a%84%e5%85%b3%e7%b3%bb&#34;&gt;container_memory_cache 与 container_memory_mapped_file 的关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e4%bb%80%e4%b9%88-metric-%e6%89%8d%e6%98%af-oom-kill-%e7%9b%b8%e5%85%b3&#34;&gt;什么 metric 才是 OOM Kill 相关&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/low-tec/kernel/cgroup-mem/#%e5%86%85%e5%ad%98%e9%99%90%e5%88%b6%e5%af%b9-io-%e6%80%a7%e8%83%bd%e7%9a%84%e5%bd%b1%e5%93%8d&#34;&gt;内存限制对 IO 性能的影响&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e4%ba%86%e8%a7%a3%e5%86%85%e6%a0%b8%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84&#34;&gt;了解内核数据结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#cgroup-%e5%86%85%e5%ad%98%e5%9b%9e%e6%94%b6%e7%9a%84%e6%97%b6%e6%9c%ba&#34;&gt;CGroup 内存回收的时机&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#page-cache-%e5%8d%a0%e7%94%a8%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7&#34;&gt;Page Cache 占用分析工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#pod-%e7%9a%84%e5%8f%a6%e4%b8%80%e4%b8%aa%e6%9d%80%e6%89%8b-%e9%a9%b1%e9%80%90-eviction&#34;&gt;POD 的另一个杀手 驱逐 eviction&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e9%a9%b1%e9%80%90-eviction-%e6%9c%ba%e5%88%b6&#34;&gt;驱逐 eviction 机制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e9%a9%b1%e9%80%90-eviction-%e7%ae%97%e6%b3%95%e5%8f%82%e8%80%83%e6%8c%87%e6%a0%87&#34;&gt;驱逐 eviction 算法参考指标&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/kernel/cgroup-mem/#%e5%ae%b9%e5%99%a8%e5%86%85%e5%ad%98-kill-%e6%b3%95%e5%a4%a7%e5%85%a8&#34;&gt;容器内存 kill 法大全&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/kernel/cgroup-mem/#%e4%b8%8a%e6%96%87%e6%9c%aa%e6%8f%90%e5%88%b0%e7%9a%84%e6%9c%89%e7%94%a8%e7%9a%84%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;容器内存限制是个矛盾而重要的选择，给多了浪费资源，给少了服务随机崩溃。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>cgroup</category>
            
          
            
              <category>container</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>逆向工程与云原生现场分析 Part4 —— eBPF 跟踪 Istio/Envoy 之 upstream/downstream 事件驱动协作下的 HTTP 反向代理流程</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/</link>
        <pubDate>Mon, 04 Apr 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 04 Apr 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;注，原文来自 &lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/&#34;&gt;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/&lt;/a&gt; 。如你看到的转载图片不清，请回到原文。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#%e4%b8%ba%e4%bd%95%e8%a6%81%e4%ba%86%e8%a7%a3-upstreamdownstream-%e4%ba%8b%e4%bb%b6%e9%a9%b1%e5%8a%a8%e5%8d%8f%e4%bd%9c%e4%b8%8b%e7%9a%84-http-%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e6%b5%81%e7%a8%8b&#34;&gt;为何要了解 upstream/downstream 事件驱动协作下的 HTTP 反向代理流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#%e9%80%86%e5%90%91%e5%b7%a5%e7%a8%8b%e4%b8%8e%e4%ba%91%e5%8e%9f%e7%94%9f%e7%8e%b0%e5%9c%ba%e5%88%86%e6%9e%90-%e7%b3%bb%e5%88%97%e4%bb%8b%e7%bb%8d&#34;&gt;逆向工程与云原生现场分析 系列介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#http-%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e7%9a%84%e6%80%bb%e6%b5%81%e7%a8%8b&#34;&gt;HTTP 反向代理的总流程&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#downstream-read-request-%e6%a8%a1%e5%9d%97%e5%8d%8f%e4%bd%9c&#34;&gt;Downstream Read Request 模块协作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#upstream-write-request-%e6%a8%a1%e5%9d%97%e5%8d%8f%e4%bd%9c&#34;&gt;Upstream Write Request 模块协作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#upstream-read-response-%e6%a8%a1%e5%9d%97%e5%8d%8f%e4%bd%9c&#34;&gt;Upstream Read Response 模块协作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#downstream-write-response-%e6%a8%a1%e5%9d%97%e5%8d%8f%e4%bd%9c&#34;&gt;Downstream Write 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/low-tec/trace/trace-istio/trace-istio-part4/#bpf-%e8%84%9a%e6%9c%ac%e8%be%93%e5%87%ba&#34;&gt;BPF 脚本输出&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#bpf-%e8%84%9a%e6%9c%ac&#34;&gt;BPF 脚本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part4/#%e7%bb%93%e5%b0%be&#34;&gt;结尾&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;为何要了解-upstreamdownstream-事件驱动协作下的-http-反向代理流程&#34;&gt;为何要了解 upstream/downstream 事件驱动协作下的 HTTP 反向代理流程&lt;/h2&gt;
&lt;p&gt;想不到还真坚持写到 Part4 了。不管你信不信，每一 part 的“为何”一节，是我觉得最难写的 :) 。如果你是第一次读这个系列，不用担心，每一节都是比较独立的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>bpftrace</category>
            
          
            
              <category>epoll</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>逆向工程与云原生现场分析 Part3 —— eBPF 跟踪 Istio/Envoy 事件驱动模型、连接建立、TLS 握手与 filter_chain 选择</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part3/</link>
        <pubDate>Sun, 20 Mar 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 20 Mar 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part3/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part3/index.assets/logo.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;注，原文来自 &lt;a href=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part3/&#34;&gt;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part3/&lt;/a&gt; 。如你看到的转载图片不清，请回到原文。&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/low-tec/trace/trace-istio/trace-istio-part2/&#34;&gt;逆向工程与云原生现场分析 Part2 —— eBPF 跟踪 Istio/Envoy 之启动、监听与线程负载均衡&lt;/a&gt; 中，介绍了 如何用 bpftrace 去跟踪分析 Envoy Listener 的 socket 监听，和监听是如何分配到 worker 线程的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>bpftrace</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>逆向工程与云原生现场分析 Part2 —— eBPF 跟踪 Istio/Envoy 之启动、监听与线程负载均衡</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part2/</link>
        <pubDate>Sun, 13 Mar 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 13 Mar 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part2/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part2/index.assets/f198902751f767e2b9cc455b0fb53e8924d8b1490390cfbbe50d2919c7c35733.jpg&#34; alt=&#34;logo&#34;&gt;&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/low-tec/trace/trace-istio/trace-istio-part1/&#34;&gt;逆向工程与云原生现场分析 Part1 —— eBPF 跟踪 Istio/Envoy 之学步&lt;/a&gt; 中，介绍了如何入门 bpftrace 跟踪 Envoy。这次我们来次较深度的历险。trace 观察一下 envoy 的启动、worker 线程启动与初始化、socket 监听。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>bpftrace</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>逆向工程与云原生现场分析 Part1 —— eBPF 跟踪 Istio/Envoy 之学步</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part1/</link>
        <pubDate>Tue, 01 Feb 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 01 Feb 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part1/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-istio/trace-istio-part1/index.assets/logo.png&#34; alt=&#34;&#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;在 200x 年时代，服务端软件架构，组成的复杂度，异构程度相对于云原生，可谓简单很多。那个年代，大多数基础组件，要么由使用企业开发，要么是购买组件服务支持。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>重新思考云原生时代的开发环境——从 Dev-to-Cloud 到 Dev@Cloud</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/dev@cloud-idea/</link>
        <pubDate>Sun, 17 Oct 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 17 Oct 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/dev@cloud-idea/</guid>
        <description>&lt;h2 id=&#34;大背景&#34;&gt;大背景&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;滾滾長江東逝水，浪花淘盡英雄。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/dev@cloud/dev@cloud-idea/index.assets/head.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;作为一个一直在底层苦苦挣扎多年程序员，保持一分学习的好奇心，对技术时势的感知，由为重要。因为这最终决定了技术方向。如果你是个在组织中有话语权的人，那么这影响到你组织的技术方向。而在技术驱动型的公司中，这个直接影响到公司的前途。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>dev-env</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>记一次 Istio 调优 Part 2 —— 饥饿的线程与 SO_REUSEPORT</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-tunning/istio-thread-balance/</link>
        <pubDate>Sat, 04 Sep 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 04 Sep 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-tunning/istio-thread-balance/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/istio-tunning/istio-thread-balance/Gravity-Glue-6-Credit-Michael-Grab-900x580.jpg&#34; alt=&#34;&#34;&gt;&lt;br /&gt;
&lt;em&gt;图片来自：https://getboulder.com/boulder-artist-rocks-the-world/&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;话说，在很长一段时间，程序员依赖了摩尔定律。而在它到头之前，程序员找到了另一个救命稻草：并行/并发/最终一致。而到了今天，不是 Cloud Native / Micro Service 都不好意思打招呼了。多线程，更是 by default 的了。而在计算机性能工程界，也有一个词: &lt;code&gt;Mechanical Sympathy&lt;/code&gt;，直译就是 &lt;code&gt;机器同情心&lt;/code&gt;。而要“同情”的前提是，得了解。生活中，很多人了解和追求&lt;code&gt;work life balance&lt;/code&gt;。但你的线程，是否 &lt;code&gt;balance&lt;/code&gt; 你要不要同情一下？ 一条累到要过载线程，看到其它同伴在吃下午茶，又是什么一种同情呢？ 如何才能让多线程达到最大吞吐？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>tunning</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java 容器化的历史坑（史坑） - 资源限制篇</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/containerize/java-containerize/java-containerize-resource-limit/</link>
        <pubDate>Sat, 10 Jul 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 10 Jul 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/containerize/java-containerize/java-containerize-resource-limit/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/containerize/java-containerize/java-containerize-resource-limit/index.assets/head.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;由来&#34;&gt;由来&lt;/h2&gt;
&lt;p&gt;时间回到 2017 年，老东家要上 Kubernetes 了，有幸参与和学习（主要是学习）。当时遇到的一了所有 Java 容器化者都遇到的坑：JDK8 不为容器化设计综合症。最简单的例子是&lt;code&gt;Runtime.getRuntime().availableProcessors()&lt;/code&gt;返回了主机的 CPU 数，而非期望的容器自身的&lt;code&gt;cpu share/quota&lt;/code&gt;，或说 k8s 的 &lt;code&gt;cpu request/limit&lt;/code&gt;。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>containerize</category>
            
          
            
              <category>java</category>
            
          
            
              <category>performance</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>记一次 Istio 冲刺调优</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-tunning/istio-filter-tunning-thread/</link>
        <pubDate>Fri, 02 Jul 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 02 Jul 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/istio-tunning/istio-filter-tunning-thread/</guid>
        <description>&lt;h2 id=&#34;为何要调优&#34;&gt;为何要调优&lt;/h2&gt;
&lt;p&gt;如果说，引入一个技术需要兴趣和冲劲，那么，让这个技术上线需要的是坚持和执着。 Cloud Native 如是， Istio 如是。&lt;br /&gt;
在上线前的性能测试中，Istio 的使用提供了可观察性、运维上的便利，同时也引入了痛苦：增加了服务响应延时。如何让痛苦减到最低，成了当下之急。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>tunning</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>你的 Istio Mesh 性能及格吗？</title>
        <link>https://blog.mygraphql.com/zh/posts/cloud/istio/benchmark/fortio/</link>
        <pubDate>Tue, 01 Jun 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 01 Jun 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/cloud/istio/benchmark/fortio/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/cloud/istio/benchmark/fortio/index.assets/image-20210601224250230.png&#34; alt=&#34;image-20210601224250230&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;话说，一年前项目响应时代的号召，引入了 Istio，从此如刘备得卧龙、凤雏，走上了 Service Mesh 的光辉大道。现到准备益州之战(上线)之时。上线前，还得评估一下性能变化。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>performance</category>
            
          
            
              <category>benchmark</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>程序员的平行宇宙 —— eBPF 系统级跟踪技术简单入门</title>
        <link>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-quick-start/</link>
        <pubDate>Wed, 10 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 10 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-quick-start/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-quick-start/index.assets/image-20210310223153844.png&#34; alt=&#34;image-20210310223153844&#34;&gt;&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;Linus Torvalds in 1991&lt;/div&gt;
&lt;h2 id=&#34;程序员的平行宇宙&#34;&gt;程序员的平行宇宙&lt;/h2&gt;
&lt;p&gt;程序员有两个世界：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一个是编码世界，我们很容易认为，我们考虑了一切，也完成了一切的代码。&lt;/li&gt;
&lt;li&gt;然后是运行世界，我们发现，无论我们多么的严谨和考虑一切，世界总是有异常。异常就好像电磁波，一开始，我们只能通过它引发的结果而发现它，而不能直接观察。因为它总出现在那些黑暗的角落，如果我们手中没有电简和电磁波示波器，一切只能依靠猜测和迷信。最后，我们进入了一个用猜测驱动的世界。有时候，我们运气好，猜中了。有时候，我们只能在 release 前多上香。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;It is a capital mistake to theorize before one has data. Insensibly one begins to twist facts to suit theories, instead of theories to suit facts.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2月4日 - IT当年今日</title>
        <link>https://blog.mygraphql.com/zh/posts/it-history/today-in-history/feb04/</link>
        <pubDate>Thu, 04 Feb 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 04 Feb 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/it-history/today-in-history/feb04/</guid>
        <description>&lt;h1 id=&#34;2月4日---it当年今日&#34;&gt;2月4日 - IT当年今日&lt;/h1&gt;
&lt;h2 id=&#34;1943年2月4日-ken-thompson-出生&#34;&gt;1943年2月4日 Ken Thompson 出生&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/it-history/today-in-history/feb04/Ken_Thompson_sitting_and_Dennis_Ritchie_at_PDP-11.jpg&#34; alt=&#34;Ken&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;简介&#34;&gt;简介&lt;/h1&gt;
&lt;h2 id=&#34;unix-来源于一个程序员想玩游戏&#34;&gt;Unix 来源于一个程序员想玩游戏&lt;/h2&gt;
&lt;p&gt;肯尼斯·汤普森（Kenneth Thompson）与丹尼斯·里奇（Dennis Ritchie）一起在AT＆T贝尔实验室开发了UNIX。 UNIX操作系统结合了Multics提供的许多分时和文件管理功能，并由此得名。 （Multics是1960年代中期的一个项目，代表了创建多用户，多任务操作系统的第一项努力。）UNIX操作系统迅速赢得了广泛的关注，尤其是在工程师和科学家中。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>today-in-hisotry</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2020年的回顾;2021年的一些想法</title>
        <link>https://blog.mygraphql.com/zh/posts/wrap-up/2020-wrap-up/</link>
        <pubDate>Tue, 20 Oct 2020 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 20 Oct 2020 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/posts/wrap-up/2020-wrap-up/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2020-wrap-up/tux_hero_COVID.jpg&#34; alt=&#34;i&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;2020年回顾&#34;&gt;2020年回顾&lt;/h1&gt;
&lt;h2 id=&#34;2020让我受益最大的资料-&#34;&gt;2020让我受益最大的资料 📚&lt;/h2&gt;
&lt;p&gt;翻开印象笔记，我回顾了一下最有价值的资料:&lt;/p&gt;
&lt;h3 id=&#34;service-mesh&#34;&gt;Service Mesh&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/SBqnWs6QFEVSWily44xL3w&#34;&gt;深度理解 Istio 如何路由 TCP 流量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;container&#34;&gt;Container&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pasztor.at/blog/under-the-hood-of-docker&#34;&gt;Under the hood of Docker — Janos Pasztor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@betz.mark/understanding-resource-limits-in-kubernetes-cpu-time-9eff74d3161b&#34;&gt;Understanding resource limits in kubernetes: cpu time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/omio-engineering/cpu-limits-and-aggressive-throttling-in-kubernetes-c5b20bd8a718&#34;&gt;CPU limits and aggressive throttling in Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://engineering.indeedblog.com/blog/2019/12/unthrottled-fixing-cpu-limits-in-the-cloud/&#34;&gt;Unthrottled: Fixing CPU Limits in the Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pasztor.at/blog/under-the-hood-of-docker/&#34;&gt;Under the hood of Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://containerz.info/&#34;&gt;All things Linux containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://iximiuz.com/en/posts/implementing-container-runtime-shim/?utm_medium=reddit&amp;amp;utm_source=r_kubernetes&#34;&gt;Implementing Container Runtime Shim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://itnext.io/seccomp-in-kubernetes-part-i-7-things-you-should-know-before-you-even-start-97502ad6b6d6&#34;&gt;Seccomp in Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.selectel.com/containerization-mechanisms-cgroups/&#34;&gt;Containerization Mechanisms: Cgroups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;linux&#34;&gt;Linux&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.scylladb.com/2017/10/05/io-access-methods-scylla/&#34;&gt;Learn about different I/O Access Methods and what we chose for Scylla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Book: BPF Performance Tools]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;graphql&#34;&gt;GraphQL&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://netflixtechblog.com/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2?source=rss----2615bd06b42e---4&#34;&gt;How Netflix Scales its API with GraphQL Federation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;学到的技术&#34;&gt;学到的技术⛷&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Docker/Container 实现原理和架构的入门&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/posts/ai/devais/devais-roadmap/devais-roadmap/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/posts/ai/devais/devais-roadmap/devais-roadmap/</guid>
        <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/posts/ai/llm/my-knowlege-base/my-knowlege-base/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/posts/ai/llm/my-knowlege-base/my-knowlege-base/</guid>
        <description>&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;/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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.llms&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Ollama&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.embeddings&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OllamaEmbeddings&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.chains&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RetrievalQA&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.vectorstores&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FAISS&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.text_splitter&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CharacterTextSplitter&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;langchain.document_loaders&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TextLoader&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;c1&#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;llm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Ollama&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;llama2&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;n&#34;&gt;embeddings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OllamaEmbeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;llama2&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&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&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;loader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TextLoader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your_knowledge_base.txt&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;n&#34;&gt;documents&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&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 class=&#34;c1&#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;text_splitter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CharacterTextSplitter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chunk_overlap&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&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;texts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text_splitter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split_documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;documents&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 class=&#34;c1&#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;db&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FAISS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;texts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;embeddings&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 class=&#34;c1&#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;qa&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RetrievalQA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_chain_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;llm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;llm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chain_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;stuff&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;retriever&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_retriever&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 class=&#34;c1&#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;query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;你的问题是什么？&amp;#34;&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;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&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 class=&#34;nb&#34;&gt;print&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&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;faissfrom_documents&#34;&gt;FAISS.from_documents()&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;上面程序中，FAISS.from_documents 是什么作用？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/posts/ai/mcp/json-rpc/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/posts/ai/mcp/json-rpc/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/JSON-RPC&#34;&gt;https://en.wikipedia.org/wiki/JSON-RPC&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jsonrpc.org/specification&#34;&gt;https://www.jsonrpc.org/specification&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      

    
  </channel>
</rss>
