函数计算( FC )是阿里云事件驱动的全托管计算服务, 使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码或镜像。函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。面对 MCP Server 场景,函数计算不仅通过 MCP Runtime 支持了社区开源的 Stdio MCP Server 一键托管到函数计算;还通过亲和性调度解决了 MCP Server Session 会话保持的关键问题;同时函数计算针对 MCP Server 的场景特点,在函数计算已有的毫秒级计费基础上,实现了长连接闲置计费能力,支持部署到函数计算的 MCP Server 实现按用计费,在稀疏调用场景,最高可降低 87% 的 MCP Server 的托管成本。

为什么 MCP Server 可能存在资源闲置问题?

在系列文章首篇 MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配 我们深入解析了 MCP 以及 SSE 协议,该协议通过定义标准化事件类型,实现了客户端-服务端的交互控制及会话保持机制,交互过程如下图所示:

  1. Client端发起一个 GET 请求,建立SSE长连接。(Connection1)
  2. Server端回复event:endpoint类型的事件,将sessionId信息放入data 中返回。(Connection1)
  3. Client端使用第2步返回的sessionId信息发起首个HTTP POST 请求。(Connection2)
  4. Server端迅速响应202,但无内容。(Connection2)
  5. Server端返回第3步请求的实际消息。(Connection1)
  6. Client端使用第2步返回的sessionId发起HTTP POST请求initialized作为确认。(Connection3)
  7. Server端迅速响应202,无内容。(Connection3)
  8. Client端使用第2步返回的sessionId发起HTTP POST请求list tools。(Connection4)
  9. Server端迅速响应202,无内容。(Connection4)
  10. Server端返回第8步请求的实际消息,即工具列表。(Connection1)
  11. Client端使用第2步返回的sessionId发起HTTP POST请求call tool。(Connection5)
  12. Server端迅速响应202,无内容。(Connection5)
  13. Server端返回第11步请求的实际消息,即工具调用结果。(Connection1)

所以,由于 MCP Server 通信协议需要会话保持的特点,一旦初始化,就会建立长连接绑定固定的服务器资源。但绝大多数 MCP Server 的业务流量呈现典型的稀疏性(Sparse Access)与突发性(Burstiness)特征——请求分布高度离散且流量峰谷波动显著,导致服务器资源的实际资源利用率很低,典型场景下图所示:

某用户通过大模型初始化了一个 MCP Server,实现对某文档库的检索能力,大模型会话持续了1小时才关闭,期间总共检索了2次, 资源保持时间是1小时,实际初始化与检索的时间为7.1s,资源闲置比例高达99.8%。在一些复杂的 AI agent 场景, 可能一个会话要连接多个不同用途的 MCP Server,可能产生大量的资源闲置,谁来承担这个闲置成本呢?

函数计算为用户让利,承担了 MCP Server 资源闲置成本

按用计费,是函数计算为用户降本的宗旨,函数计算通过长期对技术的耕耘,已经建立起了三个核心能力:

  • 高密度、多样化混部,实现了计算资源的错峰使用:函数计算有来自不同行业的活跃用户,产生了海量的负载类型,基于阿里云“沙箱容器”及“裸金属服务器”,函数计算实现了计算节点上高密度部署,使得多样化的场景类型可以错峰使用计算资源,提升了服务器整体的能效比;
  • 基于函数级别的资源画像实现主动干预调度,减少资源挤占的隐患:函数计算基于历史数据,为活跃函数建立起精准的资源画像模型,可以识别函数在不同时间段的资源占用情况,基于画像模型,可以主动对占用大量计算资源的函数调度,减少由于计算节点资源挤占,影响请求延时的概率;
  • 百毫秒级的快速弹性及平滑迁移能力,能快速兜底处理资源挤占问题:函数计算具备百毫秒级的弹性及平滑迁移用户负载的能力,在识别到有资源挤占的行为发生时,可以通过平滑迁移快速恢复;

正由于具备这些核心能力,函数计算实现了通过技术降本,所以选择了为用户让利,承担起了 MCP Server 的资源闲置成本。

闲置计费实现的技术内幕

目前函数计算已实现按用计费的能力,如函数计算计费概述所示,按照请求计费的模式是按用计费的典型模式,只有请求执行期间,才会产生费用,无请求执行,实例处于“冻结”状态,冻结持续几分钟便会自动释放资源,不会产生额外的费用;即使您选择预留实例,由于有明确的“冻结”状态来判断闲置,预留实例在无请求执行时仅需要支付内存成本。但由于 MCP Server 的协议会话保持、异步提交及流式返回的特点,在会话持续期间,始终需要保持计算资源的活跃,故无法通过明确的“冻结”状态来减免资源闲置成本,所以函数计算面向 MCP Server 场景,引入了额外的判断闲置的方法,如下所示:

函数计算将 MCP Server 长连接时间划分成多个闲置判断周期,如果某周期实际消耗的 CPU Time 低于某个阈值,则该周期算作闲置,这个阈值的设定,确保了只有发生 Initialize/List Tools/Call Tools 等实际调用时,函数实例才会判断为活跃。

以上述稀疏调用场景为例:

4次实际的动作,只有8秒算做活跃周期,剩余3592秒都处于闲置周期,闲置的周期,在计量上会减免 CPU 费用,只计算内存费用;内存费用参考函数计算计费概述,以2核3GB的配置为例,内存费用仅占18%,整体费用节省:

(1- (8 + 3592 × 18%)/3600),约为82%,如果以2核2GB最低内存比例配置为例,整体费用可降低87%。为了简化对 MCP Server 场景闲置计费的理解,费用节省直接折算成减少 CU 计算时间,无条件的降低,在计量上表现为 CU 计算时间和活跃 vCPU 时间的降低

如何开启 MCP Server 的闲置计费能力?

MCP Server 闲置计费能力主要目标是解决会话亲和性保持造成闲置的问题,当开启会话亲和性后便默认开启闲置计费能力,开启方法参考 MCP亲和性调度

通过函数计算控制台 MCP 运行时开发 MCP 服务或通过 Function AI 创建 MCP 服务时,创建的函数自带 MCP Server 的闲置计费能力:

  • 函数计算控制台:

  • Funciton AI 控制台:

其它场景需要在创建函数时通过参数指定开启:调用 API CreateFunction - 创建函数UpdateFunction - 更新函数,通过 SessionAffinity 字段指定调用请求的亲和策略为“MCP_SSE”,注意:由于 GPU 资源稀缺,对于配置了 GPU 的函数实例,不支持长连接的闲置计费。

另外,对于 Websocket 需要维持长请求的场景,也同步支持了闲置计费能力,无需参数设置默认开启,敬请体验,计费详情可到函数计算-资源用量明细查看。

MCP Server On FC 之旅第四站: 长连接闲置计费最高降低87%成本的技术内幕的更多相关文章

  1. SharePoint Server 2013开发之旅(四):配置工作流开发和测试环境

    工作流这个功能,在SharePoint Server 2013中做了很大的改动.我们可以从微软官方的文档中了解一下大概的情况 http://technet.microsoft.com/zh-cn/li ...

  2. Sql Server之旅——第四站 你必须知道的非聚集索引扫描

    非聚集索引,这个是大家都非常熟悉的一个东西,有时候我们由于业务原因,sql写的非常复杂,需要join很多张表,然后就泪流满面了...这时候就 有DBA或者资深的开发给你看这个猥琐的sql,通过执行计划 ...

  3. asp.net mvc 之旅—— 第四站 学会用Reflector调试我们的MVC框架代码

    我们知道,现在能调试.net程序通常有两个,第一个是ILSpy,还是一个是Reflector,这两个小反编译软件算是我们研究底层代码中所拥有的一把 锋利小尖刀~~~,比如你看到的ILSpy这样的界面图 ...

  4. Javascript之旅——第四站:parseInt中要注意的坑

    前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息 一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有效 ...

  5. Sql Server之旅——第五站 确实不得不说的DBCC命令

    原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...

  6. webpack入坑之旅(四)扬帆起航

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  7. Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例

    Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例 自动化测试和手工测试一样,是要有测试用例,有检查点和测试结果的,接下来我们通过RSp ...

  8. VSTO之旅系列(四):创建Word解决方案

    原文:VSTO之旅系列(四):创建Word解决方案 本专题概要 引言 Word对象模型 创建Word外接程序 小结 一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个 ...

  9. SQL Server 2008性能故障排查(四)——TempDB

    原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...

  10. JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

    JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...

随机推荐

  1. 【Ryan】: linux下安装ftp

    在 Linux 系统下安装 FTP 服务器可以使用多种软件,其中最常见的是 vsftpd(Very Secure FTP Daemon)和 ProFTPD(Professional FTP Daemo ...

  2. 鸿蒙开发 HarmonyOS DevEco Studio 常用快捷键

    前言 做 HarmonyOS 鸿蒙开发离不开 DevEco Studio 开发工具, DevEco Studio 是基于 IntelliJ IDEA Community 开源版本打造,所以默认的快捷键 ...

  3. Qt Creator下使用Qt Console Application打印中文

    Qt对中文的支持一直不好,本人研究了其在控制台下显示中文的方法,直接上步骤: 1.首先创建Qt Console Application工程(本人用的是Qt5.10版本),然后点击 菜单栏->编辑 ...

  4. EBUSY: resource busy or locked, rmdir

    方案一: 方案二: !!! 出现问题后,千万不要忽略npm提示你的警告... 如果以上两种方案还未解决,那么大概率是因为你的npm版本较低导致的,升级你的npm. cnpm install -g np ...

  5. DELPHI 检测服务器地址是否有效

    利用DELPH 的ICMP控件检测服务器地址 function CheckNetServer():Boolean; begin IdIcmpClient1.Host := '192.168.1.230 ...

  6. netstat 与 ss 比较

    一.netstat 命令 1. 核心功能 显示网络连接.路由表.接口统计等信息. 支持TCP.UDP.UNIX域套接字等协议. 可查看进程与端口的关联. 2. 常用语法示例 查看所有活动连接 nets ...

  7. 学习unigui【20】unistringGrid

    做成下面效果图: 采用unistringGrid控件. 问题: 1.不同的日期区间如何得到.如: 项目   开始时间时间 -- 终止使用时间 呼吸机  yyyy-mm-dd   yyyy-mm-dd ...

  8. unigui的部署【9】

    1.UniGUIServerModule的事件: procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);be ...

  9. BotSharp 5.0 MCP:迈向更开放的AI Agent框架

    一.引言 在人工智能快速发展的时代,AI Agent(人工智能代理)作为一种能够自主感知环境.决策并执行动作的实体,在众多领域展现出了巨大的潜力.BotSharp 是一个功能强大的开源项目,由 Sci ...

  10. Git撤销本地commit(未push)

    查询commit日志 git log 查询到自己commit的上个版本id(commit_id) 撤销(这里是放弃自己commit的更改,直接回退到上个版本源码) git reset --hard c ...