<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Serverless | 面条的草稿箱</title><description>无原创，纯转发</description><link>http://drafts.miantiao.me</link><item><title>为什么 MCP 服务器难以部署在 Serverless 架构上？随着大模型生态的发展，MCP（Model Context Protocol，模型上下文协议）成为了连接 AI 助手与外部工具的热门选择</title><link>http://drafts.miantiao.me/posts/160</link><guid isPermaLink="true">http://drafts.miantiao.me/posts/160</guid><pubDate>Thu, 16 Jul 2026 15:14:45 GMT</pubDate><content:encoded>为什么 MCP 服务器难以部署在 &lt;mark class=&quot;highlight&quot;&gt;Serverless&lt;/mark&gt; 架构上？&lt;br /&gt;&lt;br /&gt;随着大模型生态的发展，MCP（Model Context Protocol，模型上下文协议）成为了连接 AI 助手与外部工具的热门选择。然而，在实际部署中，开发者很快就会遇到一个棘手的架构问题：&lt;b&gt;MCP 服务器默认是有状态的（Stateful）&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. 单客户端的尴尬限制&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;在最基础的 HTTP/SSE（Server-Sent Events）实现中，服务器通常会将连接通道（Transport）保存在内存变量中。这意味着，一旦有第二个客户端尝试连接，前一个客户端的连接就会被迫中断。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. 内存常驻与 &lt;/b&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;b&gt;Serverless&lt;/b&gt;&lt;/mark&gt;&lt;b&gt; 的冲突&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;即便我们通过引入 ID 标识来管理多个连接，依然无法解决核心问题——连接状态依然保存在服务器的内存中。&lt;br /&gt;&lt;br /&gt;这种“有状态”的特性，直接把 &lt;mark class=&quot;highlight&quot;&gt;Serverless&lt;/mark&gt; 部署方案（如 Vercel、AWS Lambda）排除在外。因为 &lt;mark class=&quot;highlight&quot;&gt;Serverless&lt;/mark&gt; 函数在请求结束后会随时销毁实例，导致内存中的连接状态丢失。要维持连接，你只能选择 VPS 等需要持续运行的服务器，这增加了运维成本。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. 如何实现无状态化？&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;目前最可行的解决方案是&lt;b&gt;将状态外置&lt;/b&gt;。我们可以将 Transport 信息存储到像 Redis 这样的键值数据库中。&lt;br /&gt;&lt;br /&gt;通过将状态抽离到 Redis，MCP 服务器成功实现了无状态化（Stateless），从而能够自由地部署到 Vercel 等 &lt;mark class=&quot;highlight&quot;&gt;Serverless&lt;/mark&gt; 平台上。Vercel 官方开源的 &lt;code&gt;mcp-on-vercel&lt;/code&gt; 项目正是采用了这种架构设计。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;思考&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;虽然通过 Redis 解决了部署问题，但这无疑增加了系统的复杂度。我们不禁会想：在协议设计之初，是否应该让客户端去承担更多的状态维护，从而避免让服务端背上数据库的包袱？&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;原文链接：&lt;a href=&quot;https://www.aihero.dev/the-problem-with-mcp-stateful-server&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.aihero.dev/the-problem-with-mcp-stateful-server&quot;&gt;https://www.aihero.dev/the-problem-with-mcp-stateful-server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23MCP&quot; title=&quot;#MCP&quot;&gt;#MCP&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Serverless&quot; title=&quot;#Serverless&quot;&gt;#Serverless&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84&quot; title=&quot;#系统架构&quot;&gt;#系统架构&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Redis&quot; title=&quot;#Redis&quot;&gt;#Redis&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E5%BC%80%E5%8F%91&quot; title=&quot;#AI开发&quot;&gt;#AI开发&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://www.aihero.dev/the-problem-with-mcp-stateful-server&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Discover how to deploy MCP servers statelessly using Redis, enabling compatibility with serverless platforms like Vercel and AWS Lambda.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;www.aihero.dev&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;The Problem With MCP: Stateful Servers&quot; src=&quot;https://drafts.miantiao.me/static/https://cdn4.telesco.pe/file/eZHS1FKqGEll-5dHMuSGcHFBKTVEXTJ7Btcg8z86Gc7DdGPcqcwAoQaTIKWNrx9DHnao32NR_IGo56XJWENNdf3unLR9B8Wi9iGV0gWFipjkorEz8Ii1mO_n50LPt4P44x2nOdZy8U38zIZoWvnuJQJk-LNqcO5duB2h5tCBd2EBJKSafDH4tY54UFasE2CZ8Ps8_KnyheoAqO3FKa2__YS5YRw_Y7NWoJ2w24TZuKOQ5x8b-dxYqn6avkA0OB0Qa76PzqPYWQLytGQ2ILP5FPQNrdtaTJU9p-_1jWoCLxx_8Gp99FomFUSmmh25HYaB6Q1nvXwvMvqBTBtWpQkntQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;The Problem With MCP: Stateful Servers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Discover how to deploy MCP servers statelessly using Redis, enabling compatibility with &lt;mark class=&quot;highlight&quot;&gt;serverless&lt;/mark&gt; platforms like Vercel and AWS Lambda.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>让 Cloudflare Workers 拥有专属缓存：更低的延迟与零 CPU 开销Cloudflare 宣布推出 Workers Cache</title><link>http://drafts.miantiao.me/posts/152</link><guid isPermaLink="true">http://drafts.miantiao.me/posts/152</guid><pubDate>Mon, 06 Jul 2026 14:39:53 GMT</pubDate><content:encoded>让 Cloudflare Workers 拥有专属缓存：更低的延迟与零 CPU 开销&lt;br /&gt;&lt;br /&gt;Cloudflare 宣布推出 &lt;b&gt;Workers Cache&lt;/b&gt;。以往，Worker 总是运行在缓存的前面；而现在，Cloudflare 的多级缓存（Tiered Cache）可以直接放置在你的 Worker 前面。&lt;br /&gt;&lt;br /&gt;当请求命中缓存时，你的 Worker 代码根本不会执行。这不仅能让页面加载体验如静态网页般飞快，还能将这部分请求的 CPU 计费直接降为零。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;核心特性&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;•   &lt;b&gt;极简配置&lt;/b&gt;：只需在 Wrangler 配置文件中开启一行配置，即可通过标准的 HTTP 响应头（如 &lt;code&gt;Cache-Control&lt;/code&gt; 和 &lt;code&gt;Vary&lt;/code&gt;）直接控制缓存。&lt;br /&gt;•   &lt;b&gt;丝滑的异步更新&lt;/b&gt;：原生支持 &lt;code&gt;stale-while-revalidate&lt;/code&gt;。当缓存过期时，系统会先将旧页面立即返回给用户，并在后台异步运行 Worker 更新缓存，让用户实现“零等待”。&lt;br /&gt;•   &lt;b&gt;属于 Worker 自己的缓存&lt;/b&gt;：它摆脱了传统域名（Zone）的规则限制，缓存直接跟随 Worker 移动。无论是在自定义域名、&lt;code&gt;workers.dev&lt;/code&gt; 还是预览 URL 中，都能无缝工作。&lt;br /&gt;•   &lt;b&gt;多租户安全（&lt;/b&gt;&lt;code&gt;ctx.props&lt;/code&gt;&lt;b&gt;）&lt;/b&gt;：可以将用户 ID 或租户 ID 编入缓存键，从而在边缘安全地为不同登录用户缓存个性化的 API 响应。&lt;br /&gt;•   &lt;b&gt;应用内微服务级组合&lt;/b&gt;：缓存不仅能挡在最外层，还可以塞入同一个 Worker 的不同入口点（Entrypoints）之间，让你的架构设计更加灵活。&lt;br /&gt;&lt;br /&gt;目前，Astro 框架已经率先提供原生集成支持。所有方案（包括免费版）的 Worker 即日起均可启用该功能。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.cloudflare.com/workers-cache/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://blog.cloudflare.com/workers-cache/&quot;&gt;https://blog.cloudflare.com/workers-cache/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23Cloudflare&quot; title=&quot;#Cloudflare&quot;&gt;#Cloudflare&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Serverless&quot; title=&quot;#Serverless&quot;&gt;#Serverless&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%BC%93%E5%AD%98%E6%8A%80%E6%9C%AF&quot; title=&quot;#缓存技术&quot;&gt;#缓存技术&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CloudflareWorkers&quot; title=&quot;#CloudflareWorkers&quot;&gt;#CloudflareWorkers&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://blog.cloudflare.com/workers-cache/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;We are launching Workers Cache, a regionally tiered cache that sits directly in front of your Worker entrypoints. Infinitely composable, configured via standard HTTP headers&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The Cloudflare Blog&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Your Worker can now have its own cache in front of it&quot; src=&quot;https://drafts.miantiao.me/static/https://cdn4.telesco.pe/file/T_aG8mFHbuKWZa0RehnTNucx0b-U_5vcqTVSnLkyS-dAIfFbMVYneP-yoCOocurv6h5-6F5GtTK8hyThhRXoWgAh-ujJE3Vg8gHYza6UNWJ-bn6bncD0q6nscN565QCyuUOsNw7heicf6YDMk9pZsaTjBmtF4JE6AJ1afJEB3oo7UedQlQp-DKw3LKut1jSAz-awEYsjj0gA39G1c6RHQY9_jmEm0QTLHc2ZVGTzwzwIs7oBnXBbg3LSs_LfzkY4e15u9ur-GQiyrrXRHP0WOf97PH1Y3_bYx6076Rq4AitH1WRo3u0snbPNczMNR2kJYHJNTQdVirMtr5aAd1DAow.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Your Worker can now have its own cache in front of it&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;We are launching Workers Cache, a regionally tiered cache that sits directly in front of your Worker entrypoints. Infinitely composable, configured via standard HTTP headers&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>