当前位置: 首页 > news >正文

18_FastMCP 2.x 中文文档之FastMCP服务端高级功能:后端存储详解

一、后端存储

为缓存和 OAuth 状态管理配置持久化和分布式存储

版本 2.13.0 新增:

FastMCP 使用可插拔的存储后端进行缓存响应和管理 OAuth 状态。默认情况下,所有存储都在内存中,这非常适合开发,但不会在重启后持久化。FastMCP 支持多个后端存储,您可以轻松使用自定义实现进行扩展。

提示:存储层由 py-key-value-aio 提供支持,这是一个由核心 FastMCP 维护者维护的异步键值库。该库为多个后端提供了统一接口,使得根据部署需求交换实现变得容易。

二、存储类型

2.1 内存存储

最适合:开发、测试、单进程部署

内存存储是所有 FastMCP 存储需求的默认设置。它速度快,无需设置,非常适合入门。

from key_value.aio.stores.memory import MemoryStore# 默认使用 - 无需配置
# 但您也可以显式指定:
cache_store = MemoryStore()

特性:

  • ✅ 无需设置
  • ✅ 非常快
  • ❌ 重启后数据丢失
  • ❌ 不适合多进程部署

2.2 磁盘存储

最适合:单服务器生产部署、持久缓存

磁盘存储将数据持久化到文件系统,使其在服务器重启后仍然存在。

from key_value.aio.stores.disk import DiskStore
from fastmcp.server.middleware.caching import ResponseCachingMiddleware# 持久化响应缓存
middleware = ResponseCachingMiddleware(cache_storage=DiskStore(directory="/var/cache/fastmcp")
)

或与 OAuth 令牌存储一起使用:

from fastmcp.server.auth.providers.github import GitHubProvider
from key_value.aio.stores.disk import DiskStoreauth = GitHubProvider(client_id="your-id",client_secret="your-secret",base_url="https://your-server.com",client_storage=DiskStore(directory="/var/lib/fastmcp/oauth")
)

特性:

  • ✅ 数据在重启后持久化
  • ✅ 对于中等负载具有良好的性能
  • ❌ 不适合分布式部署
  • ❌ 需要文件系统访问

2.3 Redis

最适合:分布式生产部署、跨多个服务器的共享缓存

注意:Redis 支持需要可选依赖:pip install ‘py-key-value-aio[redis]’

Redis 提供分布式缓存和状态管理,非常适合具有多个服务器实例的生产部署。

from key_value.aio.stores.redis import RedisStore
from fastmcp.server.middleware.caching import ResponseCachingMiddleware# 分布式响应缓存
middleware = ResponseCachingMiddleware(cache_storage=RedisStore(host="redis.example.com", port=6379)
)

带身份验证:

from key_value.aio.stores.redis import RedisStorecache_store = RedisStore(host="redis.example.com",port=6379,password="your-redis-password"
)

用于 OAuth 令牌存储:

import os
from fastmcp.server.auth.providers.github import GitHubProvider
from key_value.aio.stores.redis import RedisStoreauth = GitHubProvider(client_id=os.environ["GITHUB_CLIENT_ID"],client_secret=os.environ["GITHUB_CLIENT_SECRET"],base_url="https://your-server.com",jwt_signing_key=os.environ["JWT_SIGNING_KEY"],client_storage=RedisStore(host="redis.example.com", port=6379)
)

特性:

  • ✅ 分布式和高可用性
  • ✅ 快速的内存性能
  • ✅ 跨多个服务器实例工作
  • ✅ 内置 TTL 支持
  • ❌ 需要 Redis 基础设施
  • ❌ 与本地存储相比有网络延迟

2.4 py-key-value-aio 的其他后端存储

py-key-value-aio 库包含针对各种存储系统的额外实现:

  • DynamoDB - AWS 分布式数据库
  • MongoDB - NoSQL 文档存储
  • Elasticsearch - 分布式搜索和分析
  • Memcached - 分布式内存缓存
  • RocksDB - 嵌入式高性能键值存储
  • Valkey - Redis 兼容服务器

有关这些后端的配置详细信息,请查阅 py-key-value-aio 文档。

警告:在生产环境中使用这些后端之前,请查看 py-key-value 文档以了解所选后端的成熟度级别和限制。某些后端可能处于预览状态或有特定约束,使其不适合生产使用。

三、FastMCP 中的用例

3.1 服务器端 OAuth 令牌存储

OAuth 代理和 OAuth 认证提供程序使用存储来持久化 OAuth 客户端注册和上游令牌。默认情况下,存储使用 FernetEncryptionWrapper 自动加密。当提供自定义存储时,将其包装在 FernetEncryptionWrapper 中以加密静态的敏感 OAuth 令牌。

开发(默认行为):

默认情况下,FastMCP 根据您的平台自动管理密钥和存储:

  • Mac/Windows:密钥通过系统密钥环自动管理,存储默认为磁盘。仅适用于开发和本地测试。
  • Linux:密钥是临时的,存储默认为内存。

无需配置:

from fastmcp.server.auth.providers.github import GitHubProviderauth = GitHubProvider(client_id="your-id",client_secret="your-secret",base_url="https://your-server.com"
)

生产:

对于生产部署,配置显式密钥和持久的网络可访问存储,并进行加密:

import os
from fastmcp.server.auth.providers.github import GitHubProvider
from key_value.aio.stores.redis import RedisStore
from key_value.aio.wrappers.encryption import FernetEncryptionWrapper
from cryptography.fernet import Fernetauth = GitHubProvider(client_id=os.environ["GITHUB_CLIENT_ID"],client_secret=os.environ["GITHUB_CLIENT_SECRET"],base_url="https://your-server.com",# 显式 JWT 签名密钥(生产环境必需)jwt_signing_key=os.environ["JWT_SIGNING_KEY"],# 加密的持久存储(生产环境必需)client_storage=FernetEncryptionWrapper(key_value=RedisStore(host="redis.example.com", port=6379),fernet=Fernet(os.environ["STORAGE_ENCRYPTION_KEY"]))
)

两个参数都是生产环境必需的。将您的存储包装在 FernetEncryptionWrapper 中以加密静态的敏感 OAuth 令牌 - 没有它,令牌将以明文形式存储。有关完整设置详细信息,请参阅 OAuth 令牌安全和密钥和存储管理。

3.2 响应缓存中间件

响应缓存中间件缓存工具调用、资源读取和提示请求。存储配置通过 cache_storage 参数传递:

from fastmcp import FastMCP
from fastmcp.server.middleware.caching import ResponseCachingMiddleware
from key_value.aio.stores.disk import DiskStoremcp = FastMCP("我的服务器")# 缓存到磁盘而不是内存
mcp.add_middleware(ResponseCachingMiddleware(cache_storage=DiskStore(directory="cache")
))

对于共享 Redis 实例的多服务器部署:

from fastmcp.server.middleware.caching import ResponseCachingMiddleware
from key_value.aio.stores.redis import RedisStore
from key_value.aio.wrappers.prefix_collections import PrefixCollectionsWrapperbase_store = RedisStore(host="redis.example.com")
namespaced_store = PrefixCollectionsWrapper(key_value=base_store,prefix="my-server"
)middleware = ResponseCachingMiddleware(cache_storage=namespaced_store)

3.3 客户端 OAuth 令牌存储

FastMCP 客户端使用存储在本地持久化 OAuth 令牌。默认情况下,令牌存储在内存中:

from fastmcp.client.auth import OAuthClientProvider
from key_value.aio.stores.disk import DiskStore# 将令牌存储在磁盘上以便在重启后持久化
token_storage = DiskStore(directory="~/.local/share/fastmcp/tokens")oauth_provider = OAuthClientProvider(mcp_url="https://your-mcp-server.com/mcp/sse",token_storage=token_storage
)

这使得客户端能够在重启后重新连接而无需重新认证。

四、选择后端存储

在这里插入图片描述

决策树:

  • 刚开始?使用内存(默认)- 无需配置
  • 单服务器,需要持久化?使用磁盘
  • 多个服务器或云部署? 使用 Redis 或 DynamoDB
  • 现有基础设施?寻找匹配的 py-key-value-aio 后端

更多资源

  • py-key-value-aio GitHub - 完整库文档
  • 响应缓存中间件 - 使用存储进行缓存
  • OAuth 令牌安全 - 生产 OAuth 配置
  • HTTP 部署 - 完整部署指南
http://www.dtcms.com/a/588804.html

相关文章:

  • 基于Spring Boot的社团服务系统的设计与实现
  • Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
  • 基于React+Flask前后端分离的文件搜索系统
  • K8s 集群部署中间件 - yaml 版本(二)
  • zmaiFy音频转录介绍
  • 学校资源网站建设目标关于做电商网站导流项目
  • 【论文阅读与项目复现】Hypothesis Generation with Large Language Models
  • win7下asp.net网站发布软件开发文档编写
  • socket编程——使用UDP实现的一个回显功能
  • 侠客行・iOS 26 Liquid Glass TabBar 破阵记
  • G882磁力仪方向调整
  • 站长友情链接网上卖货的平台有哪些
  • 弱函数:嵌入式回调的最佳实践
  • 如何在实验室服务器上搭建python虚拟环境?安装conda并配置虚拟环境
  • 【开发者导航】轻量可微调且开源的大语言模型家族:LLaMA
  • 北京网站建立公司创意包装设计网站
  • INSERT INTO … SELECT … 常见问答(含样例)
  • 做图素材的网站有哪些昆明做网站公司有哪些
  • 移动端网站定制搞笑网站模板
  • 网站后台的数据库怎么做工业产品设计要学什么
  • 你去湖北省住房城乡建设厅网站查软件开发好学吗
  • 北京手机网站设计公司益阳建设公司网站
  • 网站建设ip微信小程序 做网站
  • 单位网站建设的必要性网站如何被收录
  • 狗贩子怎么做网站卖狗成都网站建设餐饮
  • 如何开发网站自己做站长哪个网站可以做编程题
  • 深圳制作公司网站wordpress 显示微信二维码
  • 微信网站建设费记什么科目中山网站搭建
  • 有关小城镇建设的网站网站是怎么建设的
  • 国外一直小猫做图标的网站centos lnmp wordpress