AWS代付、代实名
阿里云国际 | 腾讯云国际

Amazon Q Developer 结合 MCP 实现智能邮件和日程管理

AWS账单代付阅读(26)

亚马逊AWS官方博客

Amazon Q Developer 结合 MCP 实现智能邮件和日程管理

1. 概述

在现代办公环境中,邮件和日程管理是日常工作的重要组成部分。Microsoft Outlook作为企业级邮件和日历解决方案,承载着大量的沟通和协作信息。然而,传统的手动操作方式往往效率低下,难以满足快节奏工作环境的需求。

本文将介绍如何通过Amazon Q Developer,结合Model Context Protocol (MCP)技术,实现对Outlook邮件和日程的智能化处理,大幅提升办公效率。

2. 方案介绍

Model Context Protocol (MCP) 是一个开放标准,旨在为AI应用程序提供安全、可控的方式来访问外部数据源和工具。通过MCP,AI助手可以:

– 连接到各种数据源(数据库、API、文件系统等)

– 执行特定的操作和工具调用

– 在安全的沙箱环境中运行

– 提供标准化的接口供不同AI客户端使用

2.1 Outlook MCP Server 架构

我们这里采用了开源的

__Wallisking1991__ 开发的Outlook MCP Server [附录1]。它是一个专门为Microsoft Outlook设计的MCP实现,为了提高显示效果,我们还增加了日历管理功能[附录2]:

2.2 技术架构

2.3 核心功能

邮件管理功能:

– 📧 邮件文件夹管理

– 📋 邮件列表和搜索

– 📖 邮件详细内容查看

– ✍️ 邮件撰写和回复

– 💾 草稿保存功能

日历管理功能

– 📅 日程列表查看

– 🔍 日程搜索

– 📝 日程详细信息

– ➕ 新建日程安排

3. 安装和配置

3.1 环境准备

确保您的系统满足以下要求:

– Windows操作系统 或者Mac操作系统

– Python 3.10或更高版本

– Microsoft Outlook已安装并配置

3.2 安装Visual Studio Code

  • 访问 [Visual Studio Code官网](https://code.visualstudio.com/)
  • 下载适合您操作系统的安装包
  • 运行安装程序,按照向导完成安装
  • 启动VS Code
  • 3.3 安装Amazon Q Developer插件

通过VS Code扩展市场安装:

  • 打开Visual Studio Code
  • 点击左侧活动栏的扩展图标(或按 `Ctrl+Shift+X`)
  • 在搜索框中输入 “Amazon Q”
  • 找到 “Amazon Q” 插件,点击 “Install” 安装
  • 安装完成后,重启VS Code
  • 3.4 配置Amazon Q Developer

  • 安装插件后,VS Code左侧会出现Amazon Q图标
  • 点击Amazon Q图标,按照提示进行身份验证
  • 选择适合的认证方式(AWS Builder ID或IAM Identity Center)
  • 完成认证后即可开始使用
  • 3.5 MCP Server配置(Windows)

    3.5.1 下载outlook mcp server

  • 将[附录2]中的源代码下载至本地硬盘,然后解压。我们也可以通过git clone的方式将源代码下载到本地。
  • 用VS Code打开该目录
  • 3.5.2 安装Python依赖

打开VS Code的Terminal窗口,执行以下命令安装Python依赖包。

pip install –r requirements.txt

安装完成后可以测试一下是否可以运行outlook mcp server:

python outlook_mcp_server.py

如果能够正确的显示连接到outlook,同时显示出有多少邮件,则表明该MCP Server工作。这时可以按Ctrl-C退出。

3.5.3 配置MCP服务器

在Amazon Q Developer中配置Outlook MCP服务器:

  • 在VS Code中打开Amazon Q
  • 在chat窗口的右上角点击Configure MCP Server的按钮
  • 点击chat窗口的右上角点击Add new MCP
  • 添加以下配置:

注意: 请将路径替换为您实际的python.exe和outlook_mcp_server.py文件路径。

  • 添加完成后,系统会自动激活该MCP Server,点击进去可以看到提供的具体功能,并可以配置是否运行执行:
  • 3.6 Mac系统的Outlook MCP Server

    3.6.1 下载outlook mcp server

将[附录3]中的源代码下载至本地硬盘,然后解压。我们也可以通过git clone的方式将源代码下载到本地。

3.6.2 用VS Code打开该目录, 通过bun安装所需依赖

打开VS Code的Terminal窗口,执行以下命令安装依赖包。

bun install

确保脚本可被执行

chmod +x index.ts

安装完成后可以测试一下是否可以运行outlook mcp server:

bun run index.ts

3.6.3 配置MCP服务器

在Amazon Q Developer中配置Outlook MCP服务器:

  • 在VS Code中打开Amazon Q
  • 在chat窗口的右上角点击Configure MCP Server的按钮
  • 点击chat窗口的右上角点击Add new MCP
  • 添加以下配置:

Command: /Users/[Username]/.bun/bin/bun

Arguments: run

/path/to/mcp/server/index.ts

4. 实际应用场景

接下来我们就可以尝试一下如何使用了。(以下仅以windows系统为例进行测试和说明, Mac系统MCP服务器可能会有所区别, 请按照MCP相关说明进行调整)

先说明两点:

  • 如果您没有在上面7的第5步配置Always allow,那每次Amazon Q在调用在运行过程中需要手动点击Run。
  • 在Outlook MCP Server调用Outlook时会弹出一个是否允许的对话框,请点击Allow,并且为了避免每次都要询问,可以运行10分钟。
  • 5.1 场景一:智能邮件处理

    用户需求**:”帮我查看最近3天关于项目AI-Tide的更新邮件” **Amazon Q** **处理流程:

  • 调用`search_emails`工具搜索相关邮件
  • 使用`get_email_by_number`获取邮件详情
  • 智能分析邮件内容并提供摘要
  • 5.2 场景二:智能日程管理

    用户需求**: “查看今明两天的会议安排” **Amazon Q** **处理流程:

  • 调用`list_calendar_appointments`获取日程
  • 智能分析会议冲突和时间安排
  • 提供优化建议
  • 5.3 场景三:邮件撰写

    用户需求:**“请撰写一封有关Project AI-Tide的邮件,收件人是 ai-tide-team **@outlook.com,** 根据之前该项目的更新邮件,表达对team这段时间辛苦工作的感谢。请不要直接发送,而是存在草稿箱中。” **Amazon Q** **处理流程:

  • 智能生成邮件内容
  • 调用`compose_email`创建邮件
  • 默认保存为草稿,避免误发

此时在Outlook的Drafts里面可以看到已经生成的邮件:

我们发现Amazon Q生成的是中文邮件,可能是因为我们用中文来对话。后续我们可以明确提出要用英文写邮件:

6. 结论

通过Amazon Q Developer与Outlook MCP Server的结合,我们实现了分析、撰写和回复邮件,也可以列出和安排日程,这种创新的集成方案不仅提升了个人办公效率,也为企业级AI应用提供了新的可能性。随着MCP生态系统的不断发展,我们期待看到更多创新的应用场景和解决方案。

附录:

  • https://github.com/Wallisking1991/outlook-mcp-server
  • https://github.com/xmubeta/outlook-mcp-server
  • https://github.com/syedazharmbnr1/claude-outlook-mcp
  • *前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


利用CloudEndure进行On-Prem到AWS云上灾备的最佳实践

AWS账单代付阅读(24)

亚马逊AWS官方博客

利用CloudEndure进行On-Prem到AWS云上灾备的最佳实践

在面对潜在灾难时,企业需确保其关键业务系统的韧性和故障恢复能力。为了应对灾难事件,作为一名容灾老兵,CloudEndure仍然在为AWS中国区域用户提供弹性灾难恢复服务来执行故障转移,确保业务的连续性。CloudEndure用于执行托管在数据中心本地或任何其他云平台上的服务器的灾难恢复,它允许使用经济实惠的存储、最少的计算资源和持续性数据复制等技术将停机时间和数据丢失降至最低,同时提供了非干扰性故障回退测试的优势,使得企业能够在不影响现有业务的情况下进行灾难恢复演练,从而实现本地和基于云的应用程序的快速、可靠恢复。

在众多迁移/容灾工具中, CloudEndure主要优势体现在以下几个方面:

  • 操作流程简化,自动化水平高,大幅降低了迁移和容灾的复杂度,提高了用户体验。
  • 适用范围广泛,只要操作系统满足Agent安装条件,且Agent可访问CE服务器,即可支持物理主机、虚拟机和云主机的迁移/容灾。
  • 采用基于操作系统的连续数据块级复制技术,实现了毫秒级的恢复点目标(RPO),分钟级的恢复时间目标(RTO),确保了数据复制的高效与实时性。
  • 数据复制过程对云端资源占用少,有效降低了容灾的运行成本,提高了经济性。

在这篇博客文章中,将重点关注在利用CloudEndure进行On-prem至AWS中国区域进行平稳故障转移和故障回退时可以遵循的最佳实践。

CloudEndure Disaster Recovery 核心组件

我们可以按照功能角色将CloudEndure 分为三个主要组件,它们组合起来形成数据复制流。

第一个区域是源区域,这是 CloudEndure 代理运行的位置,CloudEndure的代理安装在源操作系统,支持数据中心物理机器、任何Hypervisor的虚拟机和云主机,同样支持在AWS的区域或可用性区之间进行复制和容灾。CloudEndure代理执行两项任务,第一个是对连接到源系统任何卷的内容进行初始块级读取,并将内容一次性复制到目标云位置,可能需要几分钟到几天的时间,具体取决于要复制的数据量以及源和目标之间的可用网络带宽;第二个是实时监控对源系统任何卷的所有块级修改,在初始复制完成后,位于目标AWS区域的 CloudEndure 复制实例将持续同步到最新的块级修改,从而提供接近于零的 RPO(恢复点目标)。

第二个区域是暂存区,参考守夜灯的设计,负责承载复制需求和容灾数据存储。在初始化配置完成后,CloudEndure会在该区域生成复制实例,并会为要保护的每个源系统的硬盘创建一个 EBS 卷,并挂载给复制实例。复制实例从源接收数据并将块数据写入相应的 EBS 卷,其中EBS卷的数量和源系统的物理或虚拟硬盘的数量1:1对应,EBS 卷的大小按照源系统硬盘的裸容量大小而非实际使用容量大小进行分配。每个复制实例最多挂载15个EBS卷,超过该数量即再生成一个复制实例,这里EBS卷可以支持选择低成本的存储类型;若单个源系统的硬盘数量超过15个,则可为该源配置一台专用的复制实例。

第三个组成区域是容灾恢复区域,用于承载容灾业务的恢复,在启动故障转移或演练测试后,已复制到暂存区域的数据将编排并转换为生产级实例或测试实例。

持续数据保护

CloudEndure复制技术核心是CDP持续数据保护引擎,可提供实时的、异步的、基于块级别的复制。CDP 会保留系统的所有更改,直到发生故障之前的最后一次写入,将增量即数据的任何更改从源复制到目标,从而允许恢复到该故障点发生之前的最新状态。在CDP状态下可达到亚秒级别的RPO,另外使用连续同步还消除了基于快照的复制引起的潜在性能问题。在网络、IO性能等条件较差时,数据复制会脱离CDP连续数据保护模式,此时则需要关注以下三个信息:

LAG 延迟:自服务器上次处于 CDP 模式以来的时间量。延迟取决于多个因素,例如复制速度、可用网络带宽、总体磁盘存储、复制数据时磁盘的变化以及存储的 I/O 速度。 Backlog 积压:已写入磁盘但仍需要复制才能达到 CDP 模式的数据量。 ETA:返回 CDP状态 的预计剩余时间。

CloudEndure复制规划和策略

复制代理应安装在我们需要复制到 AWS 的每个源系统上,需要设置复制设置参数,包括暂存区域子网、要复制到 AWS 的服务器实例类型、EBS 卷类型、EBS 加密设置等。

最佳实践是使用用户的 AWS 账户为所有恢复实例创建一个专用、单独的子网,在执行数千台服务器的恢复时,可以使用多个子网。 使用多个暂存区域子网可能会导致更高的消耗,因为需要更多的复制服务器。当服务器写入量很大时,将数据从其磁盘复制到共享复制服务器可能会干扰其他服务器的数据复制,因此建议使用专用复制服务器,当然使用专用复制服务器可能会增加在复制过程中的 EC2 成本。

自动卷类型选择根据磁盘写入吞吐量在性能/成本优化类型之间动态切换,选择动态切换时需要给IAM用户添加额外的EBS管理权限, 最佳实践是使用默认值,除非业务需要更改。 对于安全组,建议使用默认的CloudEndure恢复安全组。

目标启动蓝图设置

目标启动设置决定如何在 AWS 中启动恢复实例。 启动设置包括 CloudEndure 启动设置和 EC2 启动模板。

对于启动设置,以下设置是最需要考虑的。

  • 实例类型正确调整大小
  • 启动时实例
  • 复制私有IP
  • 传输服务器标签
  • 操作系统许可

在代理安装期间由 CloudEndure 创建的原始启动模板可以作为默认设置。 另外还可以根据需求通过 CloudEndure 控制台进行更改。根据以下准则在 Amazon EC2 控制台中调整 IOPS(每秒输入/输出操作数):

  • 预配置 IOPS SSD (io1):每 GiB 存储 50 IOPS
  • 预配置 IOPS SSD (io2):每 GiB 存储 500 IOPS
  • 通用 SSD (gp3):每 GiB 存储 500 IOPS
  • 复制网络

建议提供专线链路的专用带宽以提供稳定的连接。CloudEndure支持调整或限制复制带宽, 调整带宽大小时应考虑的因素包括必须传输的数据总量、源服务器的磁盘写入速度、源磁盘 I/O,为了确保达到CDP状态,CloudEndure默认情况下会尽量激进的占用最大带宽。如果源的硬盘性能高于云上存储性能,则会产生滞后CDP状态的情况。由于硬盘的所有写入量都将转化成数据复制的网络流量,考虑到专线价格较高,因此建议过滤掉没有必要进行灾备的写流量比如归档、备份与某些追踪日志等以优化复制网络带宽占用。

除了专线外复制链路也支持VPN,但如果计划使用 VPN 通过共享连接进行复制,用于复制服务器的可用网络带宽将会有所不同。 这可能会导致 CloudEndure 复制代理进入停滞、不健康或滞后状态,并可能给容灾计划带来风险。

CloudEndure 复制速度同样取决于复制服务器接收数据块并将块写入附加 Amazon EBS 卷的能力。 除了默认 I/O 和文件系统缓冲之外,CloudEndure 在复制实例端没有任何形式的队列或缓存。 这意味着直到前一个数据块已写入暂存区,否则要复制的下一个数据块将不会离开源系统。 如果复制实例由于网络瓶颈、CPU 利用率问题或磁盘 I/O 瓶颈而无法跟上更改速度,则复制将开始滞后,RPO 将增长。

实现On-prem至AWS中国区的云上灾备的具体步骤

CloudEndure可以支持多种源机器向云端进行备份, 本文以Windows Hyper V虚拟机向AWS中国区进行云上灾备为例说明具体步骤:

CloudEndure账号申请及相关软件的下载及安装

  • 账号注册: https://console.awscloudendure.cn/#/register/register
  • Console: https://console.awscloudendure.cn/
  • Failback客户端下载: https://console.awscloudendure.cn/api/v5/failback_livecd.iso
  • 配置准备

  • 端口要求:为了进行连接,应打开以下 TCP 端口:
  • 端口 443 用于源服务器和 CloudEndure Console 之间的通信。
  • 端口 443 用于暂存区域子网和 CloudEndure 之间通信。
  • 在每个源服务器上应允许出站 443 端口。
  • 暂存区域子网和 CloudEndure 之间通过 TCP 端口 443 进行通信。
  • 源服务器和暂存区域子网之间通过 TCP 端口 1500 进行通信。
  • 外网访问设置

防火墙需要允许本地服务器访问https://console.awscloudendure.cn/ (ip = 54.223.37.239, port = 443)

  • S3访问需求:

下载 CloudEndure 复制软件需要Failback client启动后可以访问 Amazon S3 存储桶,因此 AWS Replication Agent 应能够访问与 CloudEndure 结合使用的 AWS 区域的 S3 存储桶 URL 和暂存区域子网。

CloudEndure项目创建及初始配置

  • 在AWS控制台创建CloudEndure需要的IAM user

可参考如下json创建 IAM 角色, 并且记录Access KeyID和Secret access key,后续需要使用。

  • 登录CloudEndure Console: https://console.cloudendure.com。在左上角,点击Create New Project,输入项目名称,选择项目类型(容灾),目标端只能是AWS,下面会显示License信息。
  • 在Setup & Info → AWS Credentials中输入上一步获取的IAM User的 Access Key ID /Secret Access Key
  • 在Setup & Info → Replication Setting中,选择源和目标的AWS区域。
  • 在Replication Servers中,对复制服务器进行配置

a. 选择复制服务器实例类型为“Default”,缺省为small;

b. 如勾选Dedicated Replication Servers,则每台源服务器会配置一个xlarge的复制服务器,缺省为“空”表示系统会根据每15块源数据盘配置一个复制服务器;

c. 输入复制服务器所在的子网段和安全组;

d. 在Network Bandwidth Throttling选项中,选择Disabled,如果需要让复制不占用太多网络带宽,可以取消Disabled并设置允许的最大复制带宽。

  • 在Setup & Info tab → OTHER SETTINGS → Installation Token 中点击 GENERATE NEW TOKEN 来获取在源机器中安装agent时所需要的installation token
  • 参考下图进行replication设置
  • 源服务器(Windows HyperV)配置

  • Agent下载: https://console.awscloudendure.cn/installer_win.exe
  • 在源机器(windows Hyper-V)上进行安装
  • 输入之前步骤中获取的installation token
  • 初次数据全量复制

  • 在源机器安装完Agent后,会发起初次全同步,可以在Console主界面的Machines里面查看数据同步的进程。
  • CE服务会自动在AWS账户中创建复制实例, 每个复制实例最多可以承载15个盘的复制。复制实例默认为small规格, 根据复制数据量可以进行调整。
  • 最终会显示Continuous Data Protection的状态。同时,在AWS Seoul区里会出现一台复制服务器实例。
  • 故障切换 (FailOver)

切换是指在AWS目标区域生成容灾服务器的过程。CE服务器会通过API将复制服务器上存储的时间点快照生成EBS卷,并根据用户定义的Blueprint 启动Target Instances 。切换方式可以分为Test Mode (测试模式)和Recovery Mode(恢复模式)。测试模式可以多次启动。恢复模式切换是指灾难发生或者进行灾难演练,将应用切换到AWS云端服务器。此时,应用已不在本地源服务器运行,源端(HyperV)和目标端(AWS)的连续数据复制会停止。

  • 参考下图进行blueprint设置。其中Blueprint的IP设置,取决于failover后aws上的机器是否需要用到public ip。如果都是内网,不需要public ip。假定需要public IP的话,可以设定使用elastic IP或者public IP(ephemeral)。
  • 在Console右上角,选择Initiate Recovery Plan → Test Mode开始进行测试模式切换。
  • 系统会跳出一个菜单让你选择恢复时间点。通常选择“latest”时间点恢复容灾实例。当发生数据误删除、服务器中病毒等情况,你可能会需要选择某一个时间点恢复服务器。
  • 故障回切 (FailOver)

Failback指的是在故障切换后将操作恢复到原始源基础架构的过程。此过程涉及将数据复制的方向从目标基础架构(灾难恢复站点)恢复到原始源基础架构。在达到CDP(持续数据复制)状态后,用户可以执行Failover故障切换。可以选择一个时间点(PIT)的快照进行启动,CloudEndure服务随后将启动一个转换实例,在所选时间点的快照上执行卷的转换,并将转换后的快照作为输出。

  • 准备Failback:
  • 确保CloudEndure项目中的所有源机器都已经在测试或恢复模式下启动了目标机器(即Failover成功)。
  • 在CloudEndure用户控制台的PROJECT ACTIONS菜单下启动“准备Failback”操作。
  • Project将显示“准备恢复到原始源”,机器将在DATA REPLICATION PROGRESS列下显示“启动数据复制”。
  • Failback客户端下载和设置:
  • 从CloudEndure用户控制台的Replication Settings部分下载Failback客户端。
  • 在Hyper-V中将目标机器(VM)引导到CloudEndure Failback客户端镜像(iso)。
  • 在提示时输入CloudEndure安装令牌。
  • Failback客户端流程:
  • Failback客户端将经历多个步骤:
  • 认证Failback客户端和确定要恢复的EC2实例。
  • 在机器上映射卷,如果需要,可以自动或手动进行。
  • 下载CloudEndure Replication Software并进行配置。
  • 验证EC2实例与CloudEndure Service Manager的连接。
  • 与运行在EC2实例上的CloudEndure Agent配对。
  • 通过端口1500与CloudEndure Agent建立连接。
  • 初始数据复制开始。
  • Failback客户端将经历多个步骤:
  • 启动目标机器:
  • 一旦初始复制完成,为失败的机器启动新的目标机器。
  • 选择最新的恢复点,然后点击“CONTINUE WITH LAUNCH”。
  • Failback完成:
  • 在测试或恢复完成后,Failback客户端将指示Failback已完成,并将重新启动机器。
  • 目标机器将弹出Failback客户端并重新引导到新的操作系统。
  • 返回正常运行:
  • 在所有机器都恢复后,选择Project Actions并点击“Return to Normal Operation”。
  • Failback项目已配置为再次复制到目标基础架构,从原始源复制到原始目标。
  • 注意事项

  • Failback启动新的机器时,CloudEndure不会删除源VM,旧的源VM需要手动清理。
  • 如果使用源VM,failback时会进行block level的校验,只回传delta变量数据,速度较快,建议对源VM先在Hypervisor做快照;相反若使用一台新VM引导failback client,则会failback全部recovery instance的数据。
  • 如果在Other Infrastructure(非AWS)源上启动Failback客户端,暂不支持Failback自动化。
  • 停机时间考虑

  • Failback期间的停机时间受多种因素的影响,例如完成Failback客户端过程、启动新目标机器以及恢复正常操作的时间。
  • 为了最小化停机时间,关键是确保每个Failback过程步骤的顺利执行,包括在没有中断的情况下运行Failback客户端。
  • 为了减小停机时间,请确保在Failback过程中的每个步骤中都能够平稳无阻地执行,包括在不同步之间运行Failback客户端。
  • 小结

本文介绍了CloudEndure的功能和特点,并着重介绍了如何对本地源服务器进行云上灾备的步骤和注意事项

参考资料

CloudEndure官方文档: https://docs.cloudendure.com

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


Amazon Bedrock助力飞书深诺电商广告分类

AWS账单代付阅读(23)

亚马逊AWS官方博客

Amazon Bedrock助力飞书深诺电商广告分类

项目背景

飞书深诺是中国领先的出海数字营销企业,专注为中国企业提供一站式海外数字营销解决方案,每年管理300亿人民币广告预算,服务近10万家企业出海,产品销往全球230多个国家和地区。其中Datahub 是飞书深诺技术产品事业群数据中台部门,依托飞书深诺独家资源构建的行业大数据底座,多年来为公司多部门提供支撑服务。电商广告行业分类作为数据基础能力建设的一部分,在行业benchmark、账户/站点/签约主体的行业判断等场景中起到关键作用。

Amazon Bedrock 是一项完全托管的服务,通过 API 提供来自Amazon、 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 等领先人工智能公司的高性能基础模型(FM),并提供通过安全性、隐私性和负责任的人工智能构建生成式人工智能应用程序所需的一系列广泛功能。

2024年以前,飞书深诺广告分类的技术方案主要依托于自行训练的深度学习模型。为提升模型学习效率并降低模型迭代成本,2024年起,从传统深度学习模式切换为多模态大语言模型识别模式,采用由 AWS 提供的 Claude Sonnet 3.5/3.7 以及Nova模型,达成了同步降本和准确识别的目标。

解决方案设计

广告分类任务

广告分类任务涉及分析各种广告素材(图像、视频、文本)并将其分类到特定的行业类别中。这有助于更好地理解市场细分、竞争对手分析和有针对性的广告策略。

而广告素材来源于不同的广告客户,有着不同的类型与风格。广告素材由于投放的渠道,投放的展示位置不同,有着不同的类型和尺寸大小。为了方便下游业务系统进行分析,需要对这些不同的广告素材进行统一处理,因此需要引入统一的分类类目,然后使用多模态模型对广告素材进行处理,归类到统一的分类类目中。

详细解决方案

我们的解决方案采用三阶段流水线架构,充分发挥AWS生成式AI服务的优势,实现从原始素材到精准分类的全流程自动化处理。这种三阶段架构设计既保证了处理效率,又确保了分类精度,为飞书深诺的广告业务提供了强有力的技术支撑。

第一阶段:数据输入与预处理

广告系统的入口环节,系统首先接收来自客户的多样化广告素材,包括视频、图片和文本等不同类型。随后,通过智能路由技术自动识别并分类这些素材的类型,为每种素材确定最合适的处理路径。接下来,系统对各种格式的素材执行标准化预处理操作,如视频长度调整、格式转换、尺寸调整、或文本规范化等,最终将所有素材转化为统一的数据格式,为后续的分析和处理阶段奠定基础。

Amazon Nova模型系列对于图片和视频的要求

Amazon Nova 模型配备了新颖的视觉功能,使该模型能够理解和分析图像和视频。提供的图像或视频质量越高,模型准确理解媒体文件中信息的机会就越大。确保图像或视频清晰,且没有过多的模糊或像素化,以保证更准确的结果。如果图像或视频帧包含重要的文本信息,请确认文本清晰且不要太小。避免仅仅为了放大文本而剪掉关键视觉上下文。

Amazon Nova 模型允许您在有效载荷中包含多张图像。总有效载荷大小不能超过 25 MB。Amazon Nova 模型可以分析传递的图像并回答问题、对图像进行分类以及根据提供的说明汇总图像。

Amazon Nova 模型允许您在有效载荷中包含单个视频,可采用 base64 格式提供,也可以通过 Amazon S3 URI 提供。使用 base64 方法时,总有效载荷大小必须在 25 MB 以内。但是,您可以指定 Amazon S3 URI 来理解图像、视频和文档。使用 Amazon S3 让您能够利用该模型处理更大的文件和多个媒体文件,而不受整体有效载荷大小限制约束。Amazon Nova 可以分析输入视频并回答问题、对视频进行分类,并根据提供的说明汇总视频中的信息。

针对不满足Nova处理条件的图片或视频,可先进行预处理,将其格式化为Nova可接受的媒体格式和大小。例如,使用FFmpeg对本地文件进行预处理的示例代码如下:

第二阶段:多模态理解

在第一阶段,使用多模态大语言模型对广告素材内容进行描述,接收视频、图片、文本三种主要类型的素材。大语言模型能够处理并理解这些内容,并生成内容描述与总结文本。

Amazon Nova模型能够处理文本、图像、视频等多种模态的数据,可以直接输出综合描述。系统能够识别这些不同类型的素材,并进行初步的内容理解和特征提取。我们可以将广告素材直接输入到Nova模型对视频、图像内容进行理解。

Nova通过sdk可以能够直接处理视频片段,例如针对本地视频理解,使用到的参考提示词和示例代码如下:

针对视频文件过大(大于25MB),或者文件已保存在AWS S3中的视频,可直接指定其来源为S3,无须本地再下载,直接读取S3并理解的示例代码如下:

第三阶段:多模态分类

系统对预处理完成的素材进行深度分析,将广告图片内容与相应的广告语文本进行智能关联和联合分析,从而获取更全面的语义理解。随后,这些关联数据通过标”四级分类模型”的精细化处理流程,层层递进地进行类别划分和特征提取,最终生成详尽的视频理解内容文本,完成对广告素材的全方位分类标注 ,为后续的精准投放奠定数据基础。

四级分类模型

电商广告素材存在多种品类,以及大类中包含多级子分类的嵌套分类结构,为了跟各主流电商平台衔接,同时便于SKU管理,现将所有素材统一归为四级分类:

|category_level1_name_ch

|category_level2_name_ch

|category_level3_name_ch

|category_level4_name_ch

|商品

|服装

|女装

|女装裙装

|商品

|服装

|女装

|女装T恤

|商品

|服装

|女装

|女装外套/大衣

|商品

|服装

|女装

|女装裤装/牛仔裤

|商品

|服装

|女装

|女装西服/套装

|商品

|服装

|女装

|女装衬衫

|商品

|服装

|女装

|女装毛衣/卫衣

|商品

|服装

|女装

|女装睡衣/家居服

|商品

|服装

|女装

|女装丝袜/袜子

|商品

|服装

|女装

|女装-其他

|商品

|服装

|男装

|男装T恤

|商品

|服装

|男装

|男装西服/套装

|商品

|服装

|男装

|男装衬衫

|商品

|服装

|男装

|男装裤装/牛仔裤

|商品

|服装

|男装

|男装外套/大衣

|商品

|服装

|男装

|男装毛衣/卫衣

|商品

|服装

|男装

|男装睡衣/家居服

|商品

|服装

|男装

|男装袜子

|商品

|服装

|男装

|男装-其他

针对原始的分类,需要对其格式化,以便于后续输入给LLM进行处理。以下为两种常见的处理方式:

多级分类-带ID号

多级分类-不带ID号

由于LLM已具备很强的理解能力,以上两种方式对于LLM的理解精度无较大差异。”多级分类-带ID号”的方式,由于保留了ID号,便于同除LLM之外的其他业务代码相衔接;”多级分类-不带ID号”的方式则更简洁,便于节省LLM input token数。可按照实际需求灵活选择。

因Claude Sonnet系列模型具备更强的逻辑推理能力,因此使用Claude 3.7 Sonnet模型做最后的分类处理。同时,考虑到四级分类在每次调用LLM时,都不会变,因此可以考虑利用Bedrcok Prompt Caching功能,将其分类列表进行缓存,以便加快推理速度,同时节省大量的input token消耗。

使用Claude 3.7 Sonnet模型做分类的参考提示词和示例代码如下:

结果评估

通过以上方案,我们进行了一系列实验验证,使用多模态Nova Pro模型进行视频理解 + Claude 3.7 Sonnet进行标签分类,并与之前传统的机器学习方法进行了对比。在探索大型模型能力边界的过程中,我们得出了一个关键结论:大型模型并非无所不能。它们能够将成绩较差的偏科学生提升至中上等水平,使他们的表现更加均衡,但不能直接将差学生转变为顶尖学生。

实验数据显示,在图像处理方面,同样的图像和视频样本,在Claude 3.7模型下的识别准确性从传统机器学习方法的44.5%提升至85%。此外,Claude 3.7在推理任务上也表现出明显的准确性提升,特别是在复杂推理能力方面。

为验证这些发现的稳定性,我们收集了一个月内的 1.1万条数据进行验证,这些数据包括了各种各样的商品细分品类。在随机抽取的103个分类中,约90.3%(93个)呈现上升趋势,仅9.7%(10个)呈现下降趋势,进一步证实了大型模型在涉及众多商品品类的分类任务中,无须任何提前训练,在绝大部分的分类任务中,表现都优于传统机器学习方法,表现出很好的准确率与稳定性。

|

准确率(60%以上) |

准确率(30%~60%) |

准确率(低于30%)

|

四级分类 |

旧模型 |

新模型 |

四级分类 |

旧模型 |

新模型 |

四级分类 |

旧模型 |

新模型

|

准确率 |

76.39% |

86.79% |

准确率 |

49.50% |

76.81% |

准确率 |

16.90% |

65.34%

|健康检测设备

|100.00%

|80.36%

|耳环/耳钉/耳挂

|58.75%

|91.67%

|男装外套/大衣

|29.82%

|65.45%

|情趣/计生用品

|100.00%

|92.31%

|办公家具

|58.67%

|95.24%

|卡车/货车

|29.76%

|78.95%

|假发

|95.56%

|95.00%

|面部护肤

|58.46%

|50.63%

|男装西服/套装

|29.37%

|80.95%

|婴童鞋

|93.33%

|97.22%

|普通眼镜

|57.83%

|78.69%

|女装裤装/牛仔裤

|29.27%

|73.02%

|亲子套装

|93.10%

|94.12%

|女装睡衣/家居服

|57.69%

|88.71%

|工具配件

|28.57%

|45.61%

|香水

|91.11%

|84.09%

|泳衣

|57.53%

|80.36%

|女装西服/套装

|28.57%

|94.74%

|滑雪装备

|90.63%

|95.65%

|卫浴装置/配件

|56.25%

|91.80%

|手提包

|28.57%

|63.49%

|男装袜子

|88.89%

|66.67%

|钱包/手包/腰包

|55.17%

|88.46%

|婴儿日用品

|28.57%

|89.80%

|卡牌玩具

|87.50%

|100.00%

|婴儿服饰

|54.29%

|72.73%

|本册纸张

|28.17%

|88.46%

|纹身

|82.86%

|91.67%

|女鞋

|53.85%

|71.11%

|男装睡衣/家居服

|26.92%

|90.00%

|塑形/塑身衣

|82.50%

|73.44%

|男鞋

|53.52%

|76.74%

|其他男士运动服

|26.89%

|71.43%

|墨镜

|82.46%

|97.87%

|面部彩妆

|52.50%

|77.08%

|男装T恤

|25.89%

|62.86%

|美甲

|80.77%

|95.74%

|项链/吊坠

|52.33%

|75.00%

|联网设备

|25.00%

|94.00%

|婴童家具

|78.26%

|86.05%

|户外灯饰

|51.35%

|82.35%

|女装毛衣/卫衣

|25.00%

|54.17%

|腰带/腰带配件

|77.19%

|100.00%

|办公收纳

|51.22%

|81.82%

|专业照明

|23.26%

|64.29%

|婴儿车

|76.19%

|94.44%

|电瓶车/摩托车

|50.94%

|78.57%

|供水/供暖配件

|22.58%

|85.71%

|发饰

|75.61%

|100.00%

|客厅家具

|50.91%

|64.52%

|相机/单反

|20.81%

|63.49%

|模型玩具

|72.73%

|88.24%

|平板电脑

|50.67%

|88.00%

|卫浴用品

|20.00%

|62.50%

|餐厨家具

|71.15%

|84.62%

|家用纺织品

|50.00%

|77.78%

|其他特种车辆

|16.67%

|100.00%

|游泳/潜水装备

|71.05%

|87.23%

|室内健身器材

|50.00%

|91.43%

|手持加工工具

|16.67%

|76.60%

|女装丝袜/袜子

|70.91%

|60.61%

|照明灯具-其他

|50.00%

|60.00%

|其他女士运动服

|15.25%

|60.98%

|彩妆工具

|70.21%

|87.80%

|户外家具

|49.33%

|60.00%

|女装T恤

|14.29%

|61.36%

|毛绒玩具

|68.09%

|94.74%

|耳机

|45.57%

|88.00%

|首饰套装

|10.00%

|81.82%

|运动鞋

|68.09%

|47.62%

|电脑配件

|45.00%

|41.07%

|DIY玩具

|7.69%

|38.24%

|笔记本电脑

|67.92%

|97.30%

|餐厨用品

|44.19%

|53.57%

|车载安全座椅

|0.00%

|60.00%

|卧室家具

|66.13%

|85.00%

|婴童床品

|44.07%

|91.67%

|灯具配件

|0.00%

|25.00%

|文具

|66.10%

|77.59%

|口腔护理

|43.56%

|62.50%

|高尔夫车

|0.00%

|60.00%

|投影仪

|66.07%

|96.08%

|桌面灯

|43.33%

|78.38%

|家电配件

|0.00%

|22.22%

模型可持续性保障

在模型上线后,我们需要持续关注模型的运行状况,要达到如下目标:

自动化监控:减少人工干预,通过机器实时检测异常。 长期稳定性:确保线上结果的可靠性,避免因数据更新造成偏差。 快速响应:发现异常时能自动告警或触发回滚机制。

我们采用ABB(A-B-B)监控策略,通过部署一个主模型(A)和两个次模型(B1、B2)来确保分类结果的可靠性。这种策略基于模型集成的思想,通过多模型一致性检查来提高整体系统的准确性和稳定性。

|

情况名称 |

条件 |

含义描述 |

准确性级别 |

推荐行动

|完全一致

|A = B1 = B2

|所有模型输出相同,高度可靠。

|高 (准确性①)

|无需操作

|主次部分一致

|A = B1 ≠ B2 或 A = B2 ≠ B1

|主模型与一个次模型一致,但另一个次模型不同;部分可靠。

|中 (准确性②)

|可选人工审查

|次一致但主不同

|A ≠ B1 = B2

|次模型一致,但与主模型不同;主模型可能错误。

|低 (不准确③)

|人工排除(必须审查)

|完全不一致

|A ≠ B1 ≠ B2(所有输出互异)

|所有模型输出都不同,高度不一致;主模型可能错误或数据问题。

|低 (不准确④)

|人工排除(必须审查)

通过以上策略,实现不同类型素材,可以调用在各自类型上表现最佳之模型,以达到强强联合的效果。

总结与展望

飞书深诺通过引入基于 Amazon Bedrock平台提供的Claude与Nova多模态生成式AI解决方案,成功实现了电商广告分类的技术升级。实验数据验证了基于生成式AI解决方案的卓越性能,准确率从传统机器学习方法的44.5%提升至85%,在1.1万条数据的验证中,90.3%的分类呈现上升趋势。特别是Amazon Nova模型在视频理解方面的出色表现,以及Claude 3.7 Sonnet在复杂推理任务上的优异能力,为项目成功提供了关键支撑。通过ABB监控策略,系统运行稳定性得到了有效保障,同时实现了降本增效的双重目标。

未来,飞书深诺将继续深化与AWS的合作,探索Amazon Bedrock平台更多前沿AI能力,进一步打造垂直行业专家模型,完善基于AWS的MLOps流程,增强多模态内容理解能力,为客户提供更高性价比、可扩展、少干预的智能内容理解中台,助力中国企业在全球市场取得更大成功。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


Amazon OpenSearch 助力高效 RAG 系统落地

AWS账单代付阅读(30)

亚马逊AWS官方博客

Amazon OpenSearch 助力高效 RAG 系统落地

随着生成式 AI 的快速发展,检索增强生成(Retrieval Augmented Generation,RAG)已成为构建高质量 AI 应用的关键技术。RAG 通过将大型语言模型(LLM)与外部知识库相结合,有效解决了 LLM 的幻觉问题,提高了回答的准确性和可靠性。

在众多RAG解决方案中,知识库作为核心组件至关重要。Amazon OpenSearch凭借其卓越的全文检索能力、语义搜索支持和高度可扩展的分布式架构,已成为企业构建高性能RAG知识库的首选技术平台,能够有效应对海量数据检索的挑战。

本文将深入探讨 Amazon OpenSearch 在 RAG 场景中的独特优势,并结合 Amazon Bedrock 生态系统,展示如何构建快速构建可扩展的 RAG 应用。我们还将介绍 Amazon OpenSearch 的 Serverless 版本的特性,以及如何使用 Serverless 架构进一步简化 RAG 解决方案的部署和管理。

RAG常规流程

RAG 工作流程主要包含五个关键步骤:

数据准备(Data Preparation)

  • 将外部知识库中的文档、表格或其他数据进行预处理,转成适合构建知识库的格式,如文本、稠密/稀疏向量表示。
  • 通过ETL(提取Extract、转换Transform、加载Load)过程清洗和整理数据,也可能会涉及到文档切分,并对每个数据块进行处理(例如向量化、分词、稀疏索引化等),存储到知识库中(例如Amazon OpenSearch),方便后续快速检索
  • 检索(Retrieval)

  • 用户输入查询后,系统将查询进行处理,例如查询改写、分词、转为向量表示等
  • 检索器使用检索索技术(例如文本检索、向量检索等)从向量数据库中找到与查询最相关的文档片段或数据块。
  • 检索不仅依赖关键词匹配,还采用语义级别的匹配,确保对复杂或模糊查询也能找到准确的支持信息
  • 增强(Augmentation)

  • 将检索到的相关文档片段与用户查询结合,形成增强的提示(prompt)。
  • 这个增强的提示通常通过模板或特定格式组织,确保生成模型能够充分利用检索信息,提供更丰富且上下文相关的输入
  • 生成(Generation)

  • 生成模型(如Claude、GPT等系列的大型语言模型)接收增强后的提示,生成自然语言回答。
  • 生成的内容不仅语言流畅,还基于外部知识库的信息,保证回答的准确性和权威性。
  • 多轮交互与反馈(可选)

  • 在对话系统中,RAG支持多轮交互,每轮的查询和生成结果可以作为下一轮的输入。
  • 系统根据用户反馈不断优化检索和生成策略,提升回答质量和用户体验

Amazon OpenSearch 作为一个功能全面的搜索和分析引擎,为构建 RAG知识库提供了全面的支持。它不仅支持传统的全文搜索,还提供了稠密与稀疏向量搜索能力,使其成为构建 RAG 应用的理想选择。

Amazon OpenSearch ** **在** ** RAG ** **中的核心** **优势** **Amazon OpenSearch** **在** **RAG** **中的核心** **优势

1. ** **强** **大的向量检索能力** **1.** **强** **大的向量检索能力

Amazon OpenSearch 提供强大的 ANN(Approximate Nearest Neighbor,近似最近邻)检索能力,这得益于其深度集成的 KNN 插件。该插件支持多种先进的ANN算法实现,包括 HNSW(Hierarchical Navigable Small World)、IVF(Inverted File),以及 Faiss、NMSLIB 和 Lucene 等高效搜索库。这些算法和库提供了不同的优化路径,使得用户可以根据具体的应用场景精细调整参数配置,以达到检索速度与准确率之间的最优平衡。

利用 method 参数配置项,开发者可以精确指定所使用的算法类型(例如 HNSW 或 IVF)、向量空间度量标准(如 L2 范数、内积、余弦相似性等),以及特定引擎的具体参数设置。这种灵活性确保了不同应用场景下对性能和效果的不同需求都能得到满足。对于希望深入了解 Amazon OpenSearch 中 KNN/ANN 功能及其参数配置的用户,官方文档[1]提供了详尽的技术说明和指导。

在向量检索能力方面,Amazon OpenSearch 展现出了卓越的性能与高度可扩展的架构,能够高效支持从数百万到数十亿级别甚至百亿级的向量数据快速检索。这种灵活的扩展性使其能够适应从小规模实验到大规模生产环境的各种应用场景。根据 Amazon 官方发布的测试数据[2],在使用行业广泛认可的 BIGANN 数据集(包含 10 亿个 128 维向量)进行的实验中,OpenSearch 在保证召回率达到 99% 的前提下,展现出极为优异的响应延迟表现:p50 延迟仅为 23.1 毫秒,p90 延迟为 27.1 毫秒,p99 延迟也仅上升至 32.2 毫秒。

这样的低延迟、高召回率的表现,充分体现了 Amazon OpenSearch 在向量检索领域的强大技术实力。无论是推荐系统、图像检索、语义搜索,还是其他对实时性和准确度有较高要求的 AI 应用场景,OpenSearch 都能够提供稳定、可靠且高效的底层支撑,足以应对绝大多数对性能敏感的业务需求。

2. 向量量化技术降低成本

随着向量数据规模的迅速增长,尤其是在数据量达到千万甚至亿级别以上的场景中,传统基于内存的近似最近邻(ANN)算法(如 HNSW)在性能方面面临挑战:由于所有向量必须常驻内存,系统的内存消耗迅速攀升,导致向量检索的硬件成本和扩展难度显著增加。

为了解决这一问题,Amazon OpenSearch 在向量检索场景中引入了量化(Quantization)技术。通过对高维浮点向量进行压缩,OpenSearch 能在显著降低存储和计算资源消耗的同时,保持较高的检索准确率和响应速度。

其中,Binary Quantization(BQ,二进制量化) 是 OpenSearch 提供的一种高效向量压缩方案,特别适用于如 LLM Agent Memory 构建、语义搜索、推荐系统等大规模向量检索应用。BQ 技术将原始的高维浮点向量压缩为低位二进制表示,支持将每个向量维度编码为 1、2 或 4 位,分别对应约 32 倍、16 倍和 8 倍的压缩率,从而大幅度降低内存占用。此外,BQ 在 OpenSearch 中的训练与索引构建过程是自动完成的,用户无需单独进行预处理或模型训练,这大大简化了向量检索系统的开发和运维流程。

尽管量化压缩本质上会带来一定的精度损失,但 OpenSearch 在实现 BQ 功能时,提供了灵活的参数配置,使用户可以在

召回率、准确率与系统成本之间进行有效权衡。在实际生产环境中,OpenSearch 能够在资源利用率与检索效果之间实现平衡,满足各类企业级应用的性能需求。

在过去某客户测试案例中,面对

亿级规模向量数据集,OpenSearch 采用 HNSW 算法结合 Binary Quantization 技术,在保持 1500 QPS 高并发的同时,P50、P90、P99 均在百毫秒内。与未使用量化的系统相比, 整体成本降低约 50%,这充分证明了 BQ 技术在高性能、低成本向量检索中的实用价值。

在应用 BQ 量化时,有如下经验可以分享:

  • shard 数量并不是越多越好,基于总体数据量,预估每个 shard 数据量,30GB左右是一个比较合适的值
  • 首批数据写入后,做 force merge,提升后续的检索效果
  • 使用最新版本的7g 实例系列(例如 c7g)
  • 在需要高 QPS 的情况下,使用 C系列机器
  • 3. ** **混合搜索:** **结** **合** **语义** **和关** **键词** **搜索** **3.** **混合搜索:** **结** **合** **语义** **和关** **键词** **搜索

在 RAG 场景下,混合检索 + 重排序的流程已经几乎是一个业内标准,用来提升知识召回效果。混合检索结合了关键词搜索(如 BM25)和语义搜索(如向量检索)的优点,弥补了各自的不足,从而提高了检索的准确性和效率。关键词搜索在精确匹配方面表现出色,适用于特定术语的检索;而语义搜索基于数据语义进行搜索,对拼写错误和同义词具有一定的鲁棒性,能够捕捉到更广泛的上下文信息。通过将这两种搜索方式融合,可以显著提升检索结果的相关性和多样性。

在混合检索得到多个相关结果后,如何从中选择最相关、最有价值的信息进行生成,是另一个需要解决的问题。这时,重排序模型(Rerank模型)就发挥了重要作用。重排序模型通过对不同检索模型返回的文档片段列表和用户问题语义匹配度进行重新排序,改进检索返回的结果。它计算用户问题与检索召回的每一个候选文档之间的相关性分数,并返回按照相关性排序的文档列表。这样,模型在生成过程中就可以优先选择高质量的信息,从而提高生成结果的准确性和可靠性。常见的重排序模型包括 Cohere Rerank、BGE-Reranker 等。这些模型可以在单路或多路的召回结果中挑选出和问题最接近的文档,进一步提升生成答案的精确度。

在构建混合搜索(如向量检索 + 关键词检索)系统时,通常需要解决以下两个关键问题:

查询向量化处理复杂:用户输入通常为自然语言文本,这就要求系统既要对文本进行分词处理以支持关键词检索,又要通过嵌入模型将其向量化以支持语义检索。这一过程涉及模型加载与推理,增加了系统的处理复杂度。 相关性分数尺度不一致:关键词检索(如 BM25)和语义检索(如向量匹配)返回的相关性分数处于不同的评分体系中,直接融合可能导致评分失衡。因此,必须对它们进行标准化处理,将结果统一到可比较的评分尺度。

Amazon OpenSearch 的一大优势在于,其原生支持混合检索,能够轻松集成语义搜索与关键词搜索。它不仅支持灵活对接外部嵌入模型,还提供了内置机制(如搜索管道和标准化处理器)用于调整不同检索通路的权重和相关性分数的统一,大幅简化了混合搜索系统的构建与优化过程。

3.1. 集成嵌入模型

在向量数据库中,无论是文本的写入还是检索,都需要先将文本转换为对应的向量表示。因此,向量化模型的部署是实现语义检索的关键步骤。在亚马逊云平台上,主要有两种方式可以实现向量化模型的集成:

使用 Amazon Bedrock 提供的内置向量化模型:Amazon Bedrock 支持多种主流的向量化模型,例如 Cohere 和 Amazon Titan(稠密向量模型)。通过直接调用 Bedrock 提供的 API,即可实现文本的向量化处理,无需自行部署模型。 通过 Amazon SageMaker 部署自定义向量化模型:支持将如 bge-m3 等开源嵌入模型部署到 SageMaker 平台,部署后即可通过 SageMaker Endpoint 实现模型的调用和推理,适用于需要定制或优化模型的场景。

对于上述两种方式,Amazon OpenSearch 都提供了统一的对接能力:可以将这两类模型的推理服务抽象为一个“连接器”(Connector)进行调用。在 OpenSearch 中,通过连接器可以直接调用模型进行文本嵌入推理,并结合工作流自动化机制,将推理结果写入索引或用于实时的向量检索,从而实现端到端的语义索引流程。

整个配置过程支持图形化操作,部署简单、流程清晰。具体的配置步骤和使用示例,可参考文档 [4]。

3.2. hybrid检索

在 Amazon OpenSearch 中,实现混合检索(例如将关键词检索与向量检索相结合)非常简便,可以通过配置 OpenSearch 的自动化搜索工作流来完成。其中,第一步通常是配置一个包含归一化处理器(Normalization Processor)的搜索管道(Search Pipeline),其主要目的是对来自不同检索通路(如 BM25 和向量搜索)的相关性分数进行标准化处理。

由于关键词搜索与语义搜索返回的分值通常处于不同的尺度,若不进行归一化处理,融合后的排序可能会严重偏向某一路结果。通过归一化处理器,可以将多路查询结果的分数映射到统一的数值范围(如 [0, 1]),从而确保后续的结果融合更加合理和可控。

  • normalization.technique:可选值包括 min-max、l2 用于标准化分数。
  • combination.technique:可选值包括 arithmetic_mean、geometric_mean、harmonic_mean 等,用于组合分数。

您还可以为每个查询子句设置权重,以调整其对最终评分的影响。

在配置好模型连接器和搜索管道后,即可直接运行混合检索:

可以看到,应用侧只需获取用户的文本输入,后续的关键词检索与语义检索即可在 Amazon OpenSearch 内部自动完成。整个过程无需额外开发复杂的检索逻辑,大幅降低了混合检索的实施成本与技术门槛。

4. ** **丰富的** **过滤能力** **4.** **丰富的** **过滤能力

在基于 RAG 的应用中,具备基于元数据进行过滤与聚合的能力至关重要。通过元数据过滤,可以在向量搜索前显著缩小搜索空间,排除与用户查询意图无关的内容,从而提升生成结果的精度和相关性。

在实际应用中,结合元数据的检索是非常常见的需求。例如,在一个多用户共享的知识库系统中,不同用户只能访问和查询各自上传或被授权的数据内容,这就需要基于“用户 ID”或“组织标识”等元数据字段进行过滤,确保不同用户根据其权限仅访问其有权查看的数据,满足企业在数据安全和合规性方面的要求。同样,在某些特定的知识问答或问诊类场景中,仅需要检索与某个专业领域相关的文档,此时基于领域标签、文档来源等元数据进行预过滤,可以大幅减少无效数据的干扰。

在过滤维度方面,元数据过滤可以应用于多个常见维度。时间过滤允许系统仅在某个时间区间内进行文档搜索,比如只检索“2023 年第一季度”的数据;类别过滤可以限制检索范围在特定的产品线、项目组或业务单元内,避免跨部门数据混淆;来源过滤则帮助系统优先选择来自权威数据源的内容,比如会议纪要、技术手册、API 文档等。通过这些结构化过滤手段,可以在原始向量相似度排序基础上进一步精炼结果,提升整体系统的输出质量与稳定性。

对于一些复杂查询场景,尤其是在用户采用自然语言表达意图时,人工手动构造元数据过滤条件不仅繁琐,而且容易出现歧义或遗漏。为此,目前也有方案是结合大语言模型的能力,实现自动从用户输入中提取出与元数据相关的结构化查询条件。这种“智能元数据过滤”模式极大提升了检索过程的灵活性与适应性。例如,用户输入“展示 2022 年发布的 Project A 的相关文档”,系统可以自动解析出两个关键过滤字段:时间为 2022 年,项目为 Project A,并据此执行精准的文档向量检索,显著提升返回结果的针对性和命中率。

Amazon OpenSearch 提供了强大的元数据过滤能力,使得用户可以通过时间、类别、来源等元数据维度精准控制检索范围,有效提高系统整体的检索质量。它主要提供 3 种过滤方法[5]:

高效 k-NN 过滤(Efficient k-NN Filtering):自 OpenSearch 2.9 起,支持在向量检索过程中同时应用过滤条件,避免了传统的预过滤或后过滤方式可能导致的结果数量不足或性能下降的问题。这种方法确保在满足过滤条件的文档中返回准确的 k 个最近邻结果 布尔后过滤(Boolean Post-Filtering):此方法在向量检索后应用过滤条件,适用于过滤条件不太严格的场景。但在过滤条件较严格时,可能导致返回的结果少于预期的 k 个 评分脚本过滤(Scoring Script Filtering):此方法先对文档集应用过滤条件,然后在过滤后的子集上执行精确的 k-NN 检索。适用于对精度要求高的场景,但在处理大型数据集时可能面临高延迟和扩展性问题。

需要注意的是,即使在大规模向量检索的应用场景中,也并非所有情况下都必须采用近似最近邻(ANN)检索。在某些特定场景下,预过滤(pre-filter)结合精确 k-NN 检索的方式,相较于 ANN 更具优势,既能降低资源成本,又能实现更高的召回率。

这类场景的典型特征是:尽管全局向量池的规模非常大(如千万级甚至上亿条向量),但在应用元数据过滤条件后,实际参与向量检索的数据子集相对较小(通常在几千到几万条之间)。在这种情况下,如果仍使用全局 ANN 索引(如 HNSW)并将其完全加载至内存以实现低延迟查询,将带来较高的内存开销。而采用 pre-filter + 精确 k-NN 的检索模式,则无需构建和维护大型 ANN 索引,显著降低了内存消耗。此外,在过滤后的数据集较小的情况下,即使采用暴力计算方式进行精确 k-NN 也不会产生明显的计算负担。这种方式既能确保检索结果的完整性(即 100% 召回),又避免了 ANN 引入的近似误差,对于对召回率要求较高的场景尤为适用。

在使用 Amazon OpenSearch 进行向量检索的实际客户案例中,已有多个项目选择了 pre-filter + 精确 k-NN 的方案。例如,在某个基于摄像头采集的画面进行向量检索的场景中,系统总共维护着约 1400 万条向量。尽管向量总量庞大,但每次检索前都会通过“设备 ID”以及其他业务相关字段进行预过滤,最终参与计算的向量规模通常仅为 3000 至 4000 条。在这种条件下,采用精确 k-NN 而非 ANN,不仅大幅降低了系统资源占用,同时还能确保检索的召回率达到 100%,实现了更高的性价比。

5. 稀疏向量检索能力

稀疏向量检索(Sparse Vector Search)是一种结合了传统关键词匹配和神经网络语义理解的检索方法。它并非简单地替代关键词或稠密向量检索,而是是为了解决传统关键词检索和稠密向量检索各自的局限性,提升搜索的语义理解能力,同时兼顾计算效率和响应速度,在特定场景下提供更优的解决方案。或作为混合检索策略的一部分,与其他方法协同工作。

为什么需要稀疏向量检索?我们从目前关键词检索和稠密向量检索存在的挑战,以及稀疏向量如何解决的角度来看:

关键词检索:传统关键词检索(基于倒排索引的词法搜索)依赖词汇匹配,难以处理词汇不匹配、同义词、多义词等语义问题,导致相关性不足。稀疏向量检索通过神经网络模型(如 SPLADE)将文本编码为高维稀疏向量,每个维度对应一个词或子词,并赋予权重。这种表示方式不仅保留了关键词的重要性,还引入了语义扩展能力,能够识别与查询相关的同义词或相关词汇,从而提高召回率。 稠密向量检索:稠密向量检索(Dense Vector Search)通过高维向量捕捉语义,但计算和存储开销较大,尤其在海量数据和高维度下,延迟和成本显著增加。Sparse Search 通过稀疏向量表示(只包含少量非零项及其权重),显著减少计算量和内存占用,同时保持较好的语义相关性。 这使得稀疏向量检索在处理大规模数据集时具有较高的效率,尤其适用于资源受限的环境。

所以,稀疏向量检索是一种介于关键词检索和稠密向量检索之间的创新技术,旨在提升语义理解和检索效率。它既不是单纯替代关键词检索,也不是单纯替代稠密向量检索,而是作为两者的有效补充,帮助构建更高效、更准确的搜索系统。

Amazon OpenSearch 自 2.11 版本起引入了神经稀疏检索(Neural Sparse Search)功能,为语义搜索提供了一种高效、低资源消耗的替代方案。稀疏向量检索结合了传统倒排索引的高性能和神经网络模型的语义理解能力,特别适用于对召回率、可解释性和成本控制有较高要求的场景。在这个过程中,文本首先通过稀疏编码模型(如 OpenSearch 提供的预训练模型)转换为稀疏向量,即由非零权重的 token:weight 键值对组成的向量。这些向量被索引到 Lucene 的倒排索引中,利用

FeatureField 存储结构。查询时,输入文本同样被编码为稀疏向量,并通过倒排索引进行匹配和打分,从而实现语义级的检索[6]。

目前 Amazon OpenSearch 支持两种稀疏检索模式:

Doc-only 模式:仅在索引阶段对文档进行语义扩展,查询阶段不进行扩展。该模式延迟低,性能接近传统 BM25 检索,适用于对响应速度要求高的场景 Bi-encoder 模式:在索引和查询阶段均进行语义扩展,能够更全面地捕捉查询意图,提高检索相关性,但相应地计算开销和延迟也更高

在 Amazon OpenSearch 中使用稀疏向量检索的操作非常简便,其配置流程与第 3.1 节所介绍的步骤基本一致。根据官方发布的测试结果[7],稀疏与稠密向量结合的混合检索方法在整体检索效果上优于传统 BM25 与稠密向量的组合。然而,需要特别注意的是,稀疏向量检索的性能高度依赖于所使用的稀疏编码器(Sparse Encoder)模型的质量。如果模型在扩展词汇上的语义相关性较弱,将直接影响最终的召回能力。

此外,由于大多数稀疏编码器是在通用语料上进行预训练的,在面对特定垂直领域中的专业术语时,其召回效果可能甚至不如传统的关键词匹配。这意味着在特定业务场景中,是否适合使用稀疏检索仍需结合实际数据进行评估。必要时,可能还需对稀疏编码器进行微调,以优化其在目标领域中的检索效果。

Amazon OpenSearch Serverless

除了传统的集群部署模式,Amazon OpenSearch 还提供了 Serverless 模式,具备无需运维、自动弹性扩缩的优势,为向量存储与检索提供了一种高效便捷的解决方案。OpenSearch Serverless 是专为生成式人工智能(Generative AI)和检索增强生成(RAG)应用设计的无服务器向量数据库,具备高性能、可扩展的向量检索能力,能够在毫秒级延迟内完成搜索,适用于语义搜索、推荐系统、聊天机器人等多种智能应用场景。

其核心优势在于完全托管的无服务器架构,用户无需预置、配置或管理底层集群资源。系统会根据实际负载自动完成资源的扩展与回收,在访问模式或应用需求波动时,依然能够保持高吞吐率和低延迟响应。同时,OpenSearch Serverless 与 Amazon S3 深度集成,具备与 S3 相同级别的数据持久性,确保数据的高可用与强一致性。

在 RAG 应用中,OpenSearch Serverless 支持向量检索与文本关键词检索的无缝融合,进一步提升语义相关性的匹配效果。它内置与传统集群模式一致的近似最近邻(ANN)算法,例如 HNSW(分层可导航小世界图),可在大规模向量数据集上实现快速、准确的相似性搜索。借助与 Amazon Bedrock 的原生双向集成,OpenSearch Serverless 可与如 Amazon Titan Embeddings 等基础模型无缝协作,简化嵌入生成、检索调用等 RAG 工作流开发流程。

在安全方面,OpenSearch Serverless 原生集成 AWS Identity and Access Management(IAM),支持细粒度的权限控制,同时支持通过 AWS Key Management Service(KMS)进行数据加密,确保数据在传输与存储过程中的完整性与机密性。

目前,OpenSearch Serverless 已在多个实际客户场景中得到落地应用。例如 riskCanvas——一款基于 SaaS 的金融犯罪合规解决方案产品,充分利用大数据、自动化与机器学习等先进技术,帮助客户提升合规效率与业务智能化水平。riskCanvas 通过与 OpenSearch Serverless 向量引擎集成,结合 AWS 生成式 AI 能力,将客户操作数据转化为可搜索、可理解的语义向量,为金融领域的风控和合规提供了强大的支持[8]。

Amazon OpenSearch ** **与** ** Amazon AI 服务** **的** **强** **大** **组** **合** **Amazon OpenSearch** **与** **Amazon AI 服务** **的** **强** **大** **组** **合

Amazon OpenSearch 与 Amazon Bedrock 的深度集成为企业级 RAG(Retrieval-Augmented Generation)应用构建提供了端到端的完整解决方案。Amazon Bedrock 让开发者可以轻松接入多种主流基础模型,而 Amazon OpenSearch 则提供了高性能、可扩展的向量检索能力。这种强强联合,使企业能够更高效地构建并部署高质量的生成式 AI 应用,加速智能化转型。

例如在前文第 3.1 节所介绍的嵌入集成流程中,Amazon OpenSearch 与 Amazon Bedrock 之间的集成极为简便,仅需几行代码即可实现向量生成与检索的完整闭环。开发者可以使用 Amazon Bedrock 提供的嵌入模型(如 Amazon Titan Embeddings)将文档和用户查询编码为向量,然后将这些向量存入 Amazon OpenSearch,进一步实现高效语义检索。

此外,对于部分简单的业务场景,也可以借助 Amazon OpenSearch 本身的机器学习能力与 Amazon AI 服务中的模型能力,快速搭建 RAG 应用。例如,利用 OpenSearch 内置的 Retrieval-Augmented Generation Processor(RAG 处理器),结合部署在 Amazon SageMaker 上的 DeepSeek 模型和嵌入模型,即可快速构建语义增强的问答系统[9]。更进一步,Amazon Bedrock Knowledge Bases 还支持通过控制台“一键集成”到 Amazon OpenSearch,无需编写复杂代码即可完成 RAG 流程配置,提供极致简洁的托管化使用体验[10]。

这一整套生态系统的协同工作,不仅显著降低了构建 RAG 应用的门槛,还在性能、灵活性与可维护性方面为企业用户带来可观的优势。无论是面向终端客户的智能问答系统,还是企业内部的知识库检索应用,OpenSearch 与 Bedrock 的协同都为生成式 AI 的落地提供了坚实技术支撑。

OpenSeach 与开源生态

除了广泛应用于亚马逊内部系统以及亚马逊云服务客户构建的企业级应用中,OpenSearch 作为向量数据库的能力也被开源社区和第三方开发者认可,已在多个主流项目中得到实际应用。例如 Mem0、Dify 和 LangChain 等项目,均在生产环境中采用 OpenSearch 来满足对高性能语义检索和横向扩展能力的需求。

Mem0 是一个专注于构建记忆系统的框架,支持多种向量数据库作为后端存储,其中就包括 OpenSearch。通过抽象统一的接口和模块化工厂模式,Mem0 允许开发者灵活地选择最适合当前场景的向量存储引擎,并在配置中自定义集合名称、节点地址、端口号、向量维度等参数,从而实现快速集成与部署。

LangChain 则将 OpenSearch 深度集成进其语言模型应用开发框架中,利用 OpenSearch 支持近似最近邻(k-NN)搜索和语义检索的能力,配合 LangChain 提供的文档加载、文本切分与嵌入生成模块,开发者能够快速构建出高效的检索增强生成(RAG)系统,实现自然语言理解与响应的智能化。

Dify 作为一个开源的 LLMOps 平台,也支持将 OpenSearch 作为向量存储后端,适配多种部署环境,包括本地开发、私有化部署和云原生架构,使其在性能、灵活性和可维护性方面均具备良好的扩展潜力。这些项目的实践表明,OpenSearch 在构建大规模、低延迟、可水平扩展的语义检索系统中表现出色,已经成为生产级向量数据库解决方案的重要选项之一。

总结

可以看到,Amazon OpenSearch 凭借其全面的搜索能力、灵活的向量检索机制、原生混合搜索支持以及强大的元数据过滤功能,为构建企业级 RAG(检索增强生成)系统提供了坚实的技术基础。从底层的 KNN 插件与量化优化,到与 Amazon Bedrock、SageMaker 等服务的深度集成,再到 Serverless 架构下的简化部署,Amazon OpenSearch 在性能、扩展性与易用性方面展现出卓越优势。无论是面向大规模向量数据检索、高并发响应,还是满足复杂多样的企业级检索需求,Amazon OpenSearch 都能提供稳定、高效且具成本效益的解决方案,是打造高质量 RAG 应用的首选平台。

参考文档

[1] OpenSearch KNN Search Methods and engines

[2] Choose the k-NN algorithm for your billion-scale use case with OpenSearch

[3] 基于大语言模型知识问答应用落地实践 – 知识召回调优(下)

[4] OpenSearch 基于 ML Commons 插件实现自动 embedding

[5] OpenSearch KNN Filtering data

[6] A deep dive into faster semantic sparse retrieval in OpenSearch 2.12

[7] Integrate sparse and dense vectors to enhance knowledge retrieval in RAG using Amazon OpenSearch Service

[8] Amazon OpenSearch Service as a Vector Database

[9] 基于 Amazon OpenSearch Service 与 DeepSeek 构建知识库问答应用

[10] Knowledge Bases now delivers fully managed RAG experience in Amazon Bedrock


Serverless is all you need: 在AWS上一键部署大模型API聚合管理平台OneHub

AWS账单代付阅读(32)

亚马逊AWS官方博客

Serverless is all you need: 在AWS上一键部署大模型API聚合管理平台OneHub

在AI 应用开发过程中, 开发者会使用到各大模型API, 只使用一家LLM provider 往往难以满足需求, 而在接入多家API时, 我们往往会遇到如下问题:

  • 各家LLM provider 的 认证凭据不同, 需要进行集中管理.
  • 不同 LLM provider 的API 调用方式有差别, 会提升业务代码的复杂度.
  • 各个 LLM provider 的调用量和消费情况需要进行统计.
  • 业务团队对不同模型API 的调用权限需要进行管理.

针对此类场景, 解决方法往往是增加一个 LLM Gateway 进行统一管理, 比较流行的有 LiteLLM、OpenRouter 和 Ollama 等, 我们测试下来, 针对大量终端客户做 API 分发的场景, 开源项目 One Hub 较为实用, 此项目以 one-api 为基础(one-api 已不再维护). 本文主要探讨如何在 AWS 上快速部署此项目且轻松实现弹性和高可用.

方案特点:

✅ AWS CloudFormation 一键部署.

✅ 绝大部分服务为 Serverless 服务, 几乎零运维负担.

✅ 高弹性架构, 闲时节约成本, 高峰时期可承载高并发.

✅ 存算分离, 高可用架构.

✅ 安全可靠, 源站资源全部私有化部署, CloudFront 自带抗DDOS. 所有网络防火墙规则可通过 WAF 统一管理.

注1: 本方案的所有项目分析和 CloudFormation 部署脚本皆由 AWS AI 工具 Kiro/Amazon Q Developer CLI 实现, 笔者辅助调节.

注2: 文中所提到的开源项目使用 Apache License Version 2.0, 本文仅探讨关于源码分析, 项目部署和功能使用层面的内容, 不涉及对原项目的代码或商标修改. 在实际使用中请遵守项目协议. 若涉及到二次开发请标明原项目出处, 若涉及到商标修改和发布, 请联系原作者.

方案架构

对于 AWS Globa Region 可以使用此处的 yaml文件 在 CloudFormation 中一键部署:

部署时务必将

DatabasePassword, SessionSecret, UserTokenSecret 这三个参数的默认值替换.

注意: 新 AWS 账号或没有创建过ECS 资源的账号在创建堆栈时可能会报错(提示缺少ECS服务链接角色, 此角色为首次使用 ECS 时AWS 自动创建), 删除堆栈再次尝试即可.

项目部署分析

对此项目进行单机部署很简单,在单机中直接运行 docker container 即可. 关于多机部署, 在项目部署文档中也有说明, 其中第三条提到了从服务器 slave 和主服务器 master 的概念, 但并没有详细说明这两种服务器类型的行为有什么区别, 而理清这一点对我们后续的部署策略和流量分发策略非常重要.

使用 Kiro/Amazon Q Developer 分析源码以明确部署策略

Kiro 和 Amazon Q Developer 是 AWS 发布的 AI IDE 和 AI Agent 工具, 可以自动读取项目代码文件和搜索整个代码仓库从而实现对项目源码的精准分析. 用户可以根据自己的喜好选择任意一款工具快速完成项目分析任务. 笔者这里在Visual Studio Code 中打开了 One Hub 项目并启用了命令行工具 Amazon Q Developer CLI 对整个项目进行了分析, 最终结论如下:

详细分析请见: NODE_TYPE_分析报告

由此报告我们可以总结出部署需要注意的事项:

  • 数据库连接:所有节点需要连接同一个数据库
  • 配置同步:Slave 节点会定期从数据库同步配置
  • 唯一性:建议只部署一个 Master 节点
  • 网络访问:确保 Slave 节点能访问数据库
  • ECS 集群部署规划

我们计划创建一个 ECS Cluster 并部署两个 Service.

创建两个 Task Definition 以为 Master 节点和 Slave 节点配置不同的环境变量.

Master Service

  • 使用 master-task-definition 启动 ECS Task.
  • 只启动一个 ECS task, 运行 Master 节点.
  • Slave Service

  • 使用 slave-task-definition 启动 ECS task.
  • 启动多个 ECS task, 运行 Slave 节点.
  • 在 Task Definition 中设置环境变量
  • 开启自动扩展, 以 CPU 或内存占用率为扩展指标.

ECS Service 开启 Availability Zone rebalancing,以确保 LLM API 服务始终高可用.

数据库

由上文可以明确,所有节点需要连接到同一个数据库, 而只有Master 节点会进行写入操作.

本文部署 Aurora Serverless V2 for MySQL, 具有如下特点:

  • 可以根据使用情况自动扩缩容,从 0.5 ACU(1 GiB 内存)到 256 ACU(512 GiB 内存), 最小扩展单位为 0.5 ACU.
  • 数据存储部分按实际使用量收费,无需预置存储容量.
  • 原生高可用, 自动故障转移.
  • ALB 流量分发策略

  • Master 节点:负责数据管理、定时任务和系统维护
  • Slave 节点:负责请求处理和服务扩展

我们可以使用 ALB 监听器规则将 LLM API 请求全部转发到 Slave Target Group, 将所有其他与前端页面操作(主要是管理动作)相关的请求转发到 Master Target Group. 示例如下:

注意这里设定的规则:

主要是为了匹配多种 LLM API 调用格式, 如

但实际上这个规则并不能覆盖市面上所有的调用格式,且易与其他 API path 冲突, 需要针对使用场景进行修改.

网络规划

该项目大多数场景是在互联网上提供服务, 为确保服务数据安全且长期稳定运行, 在网络规划方面我们有以下几个要点:

  • ECS task 全部运行于 VPC 私有子网, 通过公有子网的 NAT Gateway 实现公网访问.
  • 数据库 Aurora 运行于 VPC 私有子网, 配置安全组规则允许 ECS task 访问.
  • ALB 部署在 VPC 私有子网, 禁止公网访问.
  • CloudFront 采用 VPC origin 连接源 ALB.

通过此配置, 我们在没有额外配置 WAF 的情况下即可实现:

  • 源站无公有 IP, 所有公网入站流量只能通过 CloudFront, 极大降低了攻击面.
  • CloudFront 自带的 Standard Shield 可以抵御大部分 DDoS 攻击.
  • 通过 CloudFront 关联 WAF 规则, 可以在单一入口完成防护配置和流量分析, 运维简单.
  • 通过 CloudFront 全球 PoP 点快速接入 AWS 骨干网, 降低 API 访问延时.
  • 功能测试

部署完毕后,在 CloudFormation Stack Output 中找到 CloudFront URL, 根据此 使用说明 登陆系统进行 API 测试.

此处可配置 AWS Bedrock 可用模型以及自定义映射关系:

AWS Bedrock 相关模型的映射关系可以在此处找到.

配置完成后, 使用 Insomnia 进行 API 测试:

可观测性

  • Aurora 集群默认开启 RDS Data API, 可通过AWS 控制台 Query Editor 直接连接数据库并运行 MySQL, 无需额外配置堡垒机.
  • 所有 AWS ECS Task 产生的日志默认发送到 CloudWatch, 可实时查看和分析.
  • 可开启 ECS Exec 以直接登陆正在运行的 Container 进行问题排查.
  • 成本分析

本方案绝大部分服务为 Serverless 服务, 成本与应用实际承载流量正相关. 以本文中提供的一键部署文件配置为例, 费用主要包含如下部分:

  • AWS ECS Fargate 部署费用(共三个,单个配置为 256 CPU + 512 Memory, 表示 1/4 vCPU 和 512 MiB 内存)
  • AWS Aurora Serverless V2 部署和存储费用, 默认 0.5 ACU
  • ALB 部署费用.
  • NAT Gateway 部署费用.

在个人使用场景下,经测试每日成本在 3.7-5.4 美元之间(不含大模型 API 调用费用), 不同 Region 部署会有差别. 可以看出 Serverless 架构用于部署流量不确定或业务起步阶段的应用具有巨大成本优势.

总结与展望

在将此方案部署落地到产品时,我们有如下改进方向:

  • CloudFront 默认与源站的连接 Timeout 最高为60s, 可以通过提交工单提升到 180s, 以适应超长 prompt 或输出的 API 调用场景.
  • 配置关联到 CloudFront 的 WAF 规则, 启用实用托管规则比如限流规则以及 Layer 7 DDoS 防护规则.
  • ECS Cluster 支持 EC2 + Fargate 混合部署, 考虑到 Master 节点只需部署一台而不做扩缩容, 若需要长期提供服务, 可以将 Master Task Definition 改为 EC2 实例部署并购买预付实例.
  • 若需要提升接口响应速度, 可以考虑部署 Amazon ElastiCache Serverless for Redis. 同样不会增加运维压力.

通过充分利用 AWS 的 Serverless 服务,我们将基础设施运维的重担转移给了云服务商,让开发团队能够将更多精力集中在业务创新和产品迭代上. 与此同时,AI 工具的应用也极大提升了我们的工作效率,缩短了产品从开发到部署上线的周期。

人工智能和云计算的结合是当下科技发展的大趋势,我们期望通过这些前沿技术,不断优化产品交付模式,为客户提供更加卓越的解决方案和服务体验。

参考链接

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


亚马逊云科技VPC多可用区keepalived配置指南

AWS账单代付阅读(32)

亚马逊AWS官方博客

亚马逊云科技VPC多可用区keepalived配置指南

前言

在上一篇博客中(亚马逊云科技VPC中的keepalived配置指南),我们介绍了在AWS VPC中配置keepalived需要考虑的问题,并提供了使用辅助IP作为keepalived VIP的配置方案。由于辅助IP仅允许绑定到同一子网的网络接口,因此这个方案要求keepalived集群成员的网络接口位于同一个子网,即这些节点必须创建在同一个可用区。

为了满足更高的可用性,有些客户希望能在多可用区创建keepalived集群。本文介绍在AWS VPC网络中创建多可用区keepalived集群所需要考虑的问题及配置方案。

您可以参考上一篇博客中我们介绍的keepalived的基本工作方式和AWS VPC的网络设计考虑,这些内容在本文中不再重复介绍。

AWS VPC的多可用区keepalived方案设计

在上一篇博客中我们描述了AWS VPC网络所遵循的行为。VPC网络按照路由表中的路由条目转发报文,路由查找规则使用最长前缀匹配 (LPM: Longest Prefix Match) 。路由表缺省预置本地网络路由,前缀为VPC CIDR,下一跳为local。本地网络路由不可修改。

在上一篇博客中,我们使用了辅助IP作为keepalived的VIP,就是利用了VPC本地网络路由。由于VPC中的子网创建后不能更改所在的可用区,这意味着任何一个内网IP地址都无法动态更改所在的可用区,所以仅利用本地路由机制无法实现在VPC内实现跨可用区的VIP漂移。如果想在VPC内实现跨可用区的VIP漂移,必须要使用本地路由以外的路由,即通过在路由表中添加新的路由条目来实现。

AWS VPC路由表简介

AWS VPC中的每个子网有且只有一个关联的路由表。子网中的节点发送的报文遵循路由表中的路由规则。

子网路由表预置目标为VPC CIDR的本地路由,并且不可修改(例如CIDR为

10.100.0.0/16的VPC内的所有路由表都预置前缀为

10.100.0.0/16,下一跳为local的路由)。VPC中通常包含多个路由表,每个路由表都可以和多个子网关联。通过配置路由表路由条目以及路由表与子网的关联关系,可以满足业务多样的网络拓扑需求。

子网路由表中可以添加多个路由条目,每一个路由条目由目标前缀(Prefix)和下一跳组成。目标前缀是网络数据去向的IP地址范围,使用

/的格式,例如

10.100.1.0/24。当所添加的路由条目中的目标前缀与VPC CIDR重叠时,仅允许添加与VPC中子网CIDR相同的目标前缀,这是AWS VPC网络的一个限制条件。与VPC CIDR无关的目标前缀没有限制。

子网路由表中路由条目的下一跳可以有多种类型,常见的有互联网网关 (IGW)、NAT网关、ENI等。在本文描述的方案中,将使用ENI作为路由条目的下一跳。路由条目中的下一跳可以通过API或者控制台修改,修改后立即生效。

作为一种安全机制,在缺省情况下,AWS VPC会限制EC2实例仅能使用已分配的子网IP地址进行报文收发,其余报文会被丢弃。已分配的IP地址包括ENI的主IP地址、辅助IP地址及ENI代理的IP地址前缀。EC2实例在某些场景下需要使用任意的IP地址来收发报文,例如EC2本身作为一个路由器、防火墙等网络中间节点来转发来自其它位置的流量。AWS EC2实例提供选项,允许用户对这些实例的特定ENI关闭报文的源/目的IP地址检查。

通过路由表更新支持keepalived VIP漂移的设计考虑

在上一篇博客中我们已经描述了keepalived的工作原理,本文不再重复。在keepalived集群进行故障切换时,VIP需要从原有的Master节点漂移到新选举的Master节点。这个过程包括两个主要的操作:

  • 新的Master节点内部绑定VIP;如果可能的话,原Master节点内部解绑VIP。这个操作由keepalived模块原生支持。
  • VPC路由表更新,将VIP路由到新的Master节点。

与上一篇博客不同,上述的第二个步骤没有采用绑定/解绑辅助IP的方案,而是使用更新路由表的操作以实现将VIP路由到不同可用区的实例。

我们推荐选择VPC CIDR以外的私有网络地址(RFC 1918)作为VIP [讨论2]。在本博客中我们选择了192.168.1.100这个IP地址作为示例。在实际的网络环境中,我们建议选择与网络中的其它节点不冲突的私有网络地址。推荐规划预留专门的网段,从该网段中分配VIP并管理VIP的使用记录。

由于VPC中可能存在多个路由表,在进行路由表更新时需要将所有访问VIP的子网路由表都进行更新。

使用弹性IP (Elastic IP, EIP) 实现面向公网访问的keepalived VIP

在上一篇博客中,在辅助IP解绑/绑定的同时,与辅助IP关联的EIP会一直保持关联,同步漂移到新的节点。通过这种方式,与辅助IP关联的EIP承担了面向互联网访问的VIP角色。

在本博客讨论的多可用区场景中,由于没有使用辅助IP,如果需要提供面向互联网的访问,我们需要在VIP漂移时增加EIP解绑/绑定的操作。

为了防止绑定/解绑EIP对实例原有公网IP的影响,我们可以为节点添加额外的ENI专门用于承载作为VIP的EIP。出于简化考虑,在本博客中EIP直接关联到实例的主网卡。

本博客中的VIP漂移触发机制沿用上一篇博客的做法,在keepalived中配置触发动作,当节点成为Master时调用AWS CLI,更新路由表,同时可选解绑/绑定EIP。

使用EC2基于路由表和EIP实现VIP漂移的配置流程

图1 基于路由表更新和EIP重新绑定实现keepalived

我们用一个最小环境来演示使用EC2实例在AWS VPC的多可用区中配置keepalived的具体操作。在这个例子里面,我们用两台处于不同可用区的EC2实例运行keepalived,分别作为主、备节点。我们在这两台实例上配置nginx提供一个简单的web页面,用于验证VIP是否成功漂移。在不同的可用区创建客户端来测试VIP的访问(本文仅描述了在一个可用区中创建客户端,其余可用区操作类似)。完整的配置包括以下几个部分:

  • 创建2个EC2实例用于运行keepalived和nginx web服务器,这两个实例位于不同可用区的公有子网
  • 为keepalived实例的instance profile添加IAM权限,用于操作路由表和EIP
  • 创建一个EC2实例用于模拟客户端
  • 创建安全组规则,用于keepalived实例之间互相通信和客户端访问keepalived实例web服务。将安全组绑定到各个实例
  • 启动keepalived服务,并触发主备切换。分别从客户端访问VIP,验证VIP绑定到了正确的节点

⚠️ 本文中所有示例基于

Amazon Linux 2023操作系统,其它发行版请根据实际情况调整相关命令。

一、环境准备

我们将启动两台t3.micro EC2实例,分别作为

MasterBackup节点,实现通过VIP的主备切换。这两台EC2实例需要创建在公有子网中,以验证使用EIP作为面向公网访问的VIP切换方案。

⚠️ 请确认两台实例位于不同可用区的公有子网。

安装keepalived, AWS CLI和nginx

在两台 EC2 实例上分别执行以下命令:

我们另外启动一台t3.micro实例,用于模拟

客户端。客户端使用的curl命令已经包含在Amazon Linux 2023系统镜像中,无需额外安装操作。

二、IAM权限配置

在本例中,我们使用EC2 instance profile来为keepalived实例配置修改路由条目的权限。您也可以使用其它方式来为keepalived实例提供必要的IAM权限,例如使用AK/SK。要使 EC2 实例具备修改路由条目的能力,需要为两台实例绑定一个包含以下权限的 IAM 角色:

该角色的信任关系需要包含EC2服务,才可以允许绑定到EC2实例上。我们为该角色添加如下信任关系:

⚠️ 请在AWS控制台为Master和Backup实例分别绑定该IAM角色。

三、添加安全组规则

keepalived集群节点之间需要使用VRRP协议进行通信。VRRP协议是独立于TCP/UDP的IP协议,IP协议号为112。我们可以添加安全组入站规则以放行相应的keepalived协议。在VPC中,我们也可以通过使用default安全组实现节点之间的无限制通信,这也是我们在本文中所使用的方式。在VPC中的default安全组中包含一条入站规则,该规则允许来自本安全组的所有流量。这意味着绑定了default安全组的所有网络接口之间的通信不受限制,同时并未开放来自其它源地址或其它安全组的访问。default安全组的这个设计特别适用于集群节点间的相互通信。

⚠️ 我们为Master、Backup节点和客户端节点分别添加绑定default安全组,

同时保留原有安全组

四、创建 VIP 分配脚本

在replace route操作之前,需要路由表中预先创建相应的路由条目。在所有需要访问VIP的子网路由表里分别创建一条路由:目标为192.168.1.100/32,下一跳为Master或Backup节点的ENI ID。

在两台 EC2 实例上分别执行以下命令:

sudo mkdir -p /etc/keepalived/scripts

执行以下脚本生成修改路由条目的脚本文件,并根据你实际的VIP、ENI ID、Route table ID修改,循环更新所有要访问VIP的子网路由表中的路由条目:

赋予脚本可执行权限:

sudo chmod +x /etc/keepalived/scripts/rt_vip_master.sh

⚠️ keepalived Master、Backup节点上都需要执行上述操作,并替换ENI ID为该节点的ENI ID

五、创建keepalived配置文件

Master节点配置

执行脚本内容如下:

Backup 节点配置

执行脚本内容如下:

分别在keepalived Master和Backup节点启动keepalived服务和nginx服务:

sudo systemctl enable keepalived –now

sudo systemctl enable nginx –now

systemctl status keepalived.service

systemctl status nginx.service

六、验证VIP漂移

验证 VIP** **当前绑定在 Master** **节点

在 Master 节点上执行以下命令,确认 VIP

192.168.1.100 已绑定到网卡

ens5:

ip addr show ens5 | grep 192.168.1.100

输出如下,表示 VIP 当前处于 Master 节点:

inet 192

.**168.1.100/32 scope global ens5 **创建简单的web** **页面

在Master节点创建一个简单的页面:

在Backup节点创建一个简单的页面:

验证服务访问正常

在客户端节点,使用curl命令向两个keepalived节点分别发起HTTP请求:

curl 10.0.1.100 10.0.2.100

输出如下:

Hello from node 1

Hello from node 2

在客户端节点使用curl命令向VIP发起HTTP请求前,如上文所述我们需要关闭keepalived所有节点的源/目的IP地址检查:

curl 192.168.1.100

输出如下:

Hello from node 1

以上输出表明VIP目前绑定在节点1上,即Master节点。

模拟主节点故障切换

我们可以有多种方式模拟Master节点的故障。keepalived提供多种配置选项用于监控系统的健康情况,比如使用track_script自定义健康检查脚本。本文中通过停止Master节点的 keepalived服务来模拟Master节点的故障。

在 Master 节点执行:

sudo systemctl stop keepalived

在客户端节点,使用curl命令再次向EIP的private IP发起HTTP请求:

curl 192.168.1.100

输出如下:

Hello from node 2

以上输出表明VIP已经成功漂移,目前绑定在节点2上,即Backup节点。

通过以上步骤,成功验证了keepalived在Master节点故障时,能够将VIP漂移到Backup节点,确保服务高可用。

七、公网访问VIP

以上实验都是在VPC内部的client实例上去访问VIP。如果需要从互联网访问VIP,则需要增加配置,使用EIP关联到Master节点的ENI上。

首先要给keepalived的两个实例附加的role增加associate address的权限,具体配置如下:

另外,在某个节点成为主节点时需要把EIP关联到该节点的ENI上。在notify master的脚本rt_vip_master.sh里增加associate address操作:

最后,需要更新Master和Backup节点的安全组,以允许从公网访问HTTP端口。具体做法是在安全组中添加Inbound规则,类型为HTTP (或TCP端口80), 来源为您电脑所使用的公网IP(或0.0.0.0/0)。之后,我们就可以在本地电脑使用curl或者浏览器去访问VIP了。

总结与讨论

本博客讨论了如何使用AWS VPC子网路由表中的路由条目更新实现keepalived的VIP漂移,从而实现多可用区keepalived集群节点的主备切换。结合弹性公网IP的重新绑定,同时可以支持面向公网的keepalived服务。

讨论

通过VPC** **对等连接 (VPC Peering)** **、VGW** **和TGW** **从VPC** **外部访问keepalived VIP

由于方案中VIP是任意选择的一个IP地址,并未由VPC管理和分配,该VIP无法从VPC对等连接、VGW和TGW从VPC外部访问。如果需要从VPC外部访问VIP,需要在VPC内创建虚拟网络设备(VNF),通过TGW的connect attachment使用GRE隧道通信,并且使用BGP动态路由实现虚拟网络设备自身的高可用配置。相关配置可参见AWS网络博客文章。

使用VPC** **内的IP** **地址作为VIP

一个常见的考虑是使用VPC内的未分配IP作为VIP,但是需要注意VPC路由表限制只能以子网CIDR作为路由条目的目标。虽然我们可以创建一个空的子网并在路由表中添加以该子网为目标的路由条目,然后选择该子网中的一个IP地址作为VIP,但是创建这个子网增加了方案的复杂度,与使用VPC外的IP相比而并没有带来额外的价值。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


新一代SageMaker+Databricks统一目录:机器学习与数据分析工作流打通方案

AWS账单代付阅读(30)

亚马逊AWS官方博客

新一代SageMaker+Databricks统一目录:机器学习与数据分析工作流打通方案

前言

在数据驱动决策的时代,企业正面临着两大核心挑战:

如何打破数据孤岛实现跨平台协作,以及 如何在复杂技术栈中保持治理一致性。这些挑战直接影响着企业从数据中获取价值的能力和速度。

Databricks作为领先的数据分析和机器学习平台,已经帮助众多企业实现了大规模数据处理和分析。与此同时,许多企业在AWS云上构建了完整的业务系统和机器学习工作流。如何让这两个强大的生态系统无缝协作,成为了释放数据价值的关键所在。

本文提出的解决方案**:通过SageMaker Unified Studio与Databricks Unity Catalog的深度集成,企业既能充分利用Databricks强大的数据分析能力,又能与AWS上现有的业务系统深度融合,真正实现数据价值的最大化。这不是简单的技术对接,而是一种全新的数据协作范式。 **本文将以真实业务场景为锚点,深度解析两大平台的协同价值:** **技术融合性 – 零摩擦的数据访问

通过SageMaker Unified Studio中的托管JupyterLab环境,借助EMR Serverless的强大计算能力,直接访问Databricks Unity Catalog中的受治理数据。这种架构彻底

消除了传统ETL的冗余**,让数据科学家能够实时访问最新的业务数据,显著提升模型开发效率。 **治理穿透力 – 企业级安全合规保障

在新一代SageMaker工作流中无缝继承Databricks预设的

数据血缘追踪、细粒度访问控制和完整审计策略。这意味着企业无需重复构建治理体系,即可确保跨平台的数据安全性和合规性,大幅降低治理成本和风险。

实战导向的技术指南

我们不仅会深入剖析架构设计的核心要点,更重要的是分享在实际项目落地中积累的宝贵经验和避坑指南:

关键技术挑战与解决方案跨平台安全访问:如何在保证数据安全的前提下实现平台间的身份认证和授权 混合云网络配置:企业混合云环境下的网络连通性最佳实践 性能优化策略:大规模数据查询的性能调优技巧 生产级部署考量:从POC到生产环境的平滑过渡路径

通过本文,您将获得一份经过实践验证的完整集成方案,帮助您的团队快速构建一个安全、高效、可扩展的跨平台数据科学工作流。

架构解析

此架构旨在整合 AWS SageMaker Notebook和Databricks Unity Catalog 的功能,以实现高效的数据处理、机器学习模型开发以及跨平台的数据共享和协作。

亚马逊云科技 Side

SageMaker Unified Studio: 作为AWS的核心组件之一,Sagemaker Unified Studio为数据科学家和开发者提供了一个集成的开发环境,用于构建、训练和部署机器学习模型。它支持多种编程语言和框架,并且可以无缝地与AWS其他服务进行集成。

EMR Studio Notebook: EMR Studio Notebook是Amazon EMR的一部分,它允许用户在云端运行交互式数据分析任务。通过EMR Studio Notebook,用户可以利用Apache Spark等大数据处理框架来处理大规模数据集。

Databricks Side

Open API: Databricks提供了丰富的API接口,使得外部系统能够与其进行通信和数据交换。这些API包括但不限于REST API,它们允许用户执行各种操作,如创建和管理集群、运行作业、查询数据等。

Unity Catalog: Databricks的 Unity Catalog是一个元数据管理解决方案,它帮助组织管理和治理其数据资产。通过 Unity Catalog,用户可以定义和应用细粒度的数据访问控制策略,确保数据的安全性和合规性。

Delta Lake: Delta Lake是Databricks推出的一个开源存储层,它提供了ACID事务、统一的数据治理和高性能的数据处理能力。Delta Lake可以存储结构化和半结构化的数据,并支持实时分析和批处理等多种工作负载。

Databricks 数据共享方式

Databricks提供了多种数据共享的方式,下面是一个列表,我们可以根据自己的需求来进行选择.

|A

|B

|C

|D

|E

|1

|

Option |

Cost |

Limitations |

Simplicity |

When to use?

|2

|Delta Sharing

|$

|🔴

|🟠

|只读模式:适用于小数据且由工作区管理员进行设置

|3

|Databricks Connect

|$$

|🟢

|🟢

|任何需要使用 Databricks 计算能力的情况

|4

|Databricks SQL client

|$$

|🟢

|🟢

|类似于 Databricks Connect,但仅适用于 SQL 用户。

|5

|Unity Catalog Open APIs

|$

|🟠

|🟢

|目前适用于只读用例,具有简单的设置,并且可以使用您选择的引擎。

本案例中我们使用 Unity Catalog Open APIs 来实现 Databricks 和 SageMaker Unified Studio的数据共享, 下面我们将逐步带大家完成所有的配置.

Databricks 侧配置

  • 首先我们需要开启Databricks的Catalog External Access, 配置步骤如下.

Enable

External data access

  • 配置Databricks用户可以在外部访问Catalog的权限,使用以下示例语句.

GRANT EXTERNAL USE SCHEMA ON SCHEMA . TO [已去除邮箱]

  • 配置对用Databricks 用户Personal Access Token,点击用户

Settings选项

一定要记录下来生成好的access token,它只能被记录一次,至此我们在 Databricks上配置就可以了.

Sagemaker Unified Studio 配置

在 Amazon SageMaker Unified Studio 中,域是用于连接您的资产、用户及其项目的组织实体。域代表组织内业务线 (LOB) 或业务领域的独特边界,这些业务领域可以管理自己的数据,包括自己的数据资产、自己的数据或业务术语定义,并可能有自己的治理标准。管理员创建域并与用户或组共享 URL。首次开始使用 Amazon SageMaker Unified Studio 时,首先要创建域以及域中存在的所有核心组件。

设置 Amazon SageMaker 统一工作室域

  • 要开始创建域,请在 Amazon SageMaker 控制台上点击

创建统一工作室域按钮。

  • 选择

快速设置功能,在 快速设置功能的设置页面上,修改域名。在 虚拟私有云(VPC)中请选择有私有子网存在的VPC,选择三个不同AZ的私有子网,私有子网必须配置 Nat Gateway,否则会影响后续功能使用。其他保持默认值。

  • Amazon SageMaker Unified Studio 域默认支持 IAM 用户身份验证。在此输入IAM Identity Center中用户电子邮箱地址。
  • 创建成功后通过url或者“打开统一工作室”按钮登陆Amazon SageMaker Unified Studio。点击后选择 SSO 方式登陆。输入在IAM 身份中心设置的用户名和密码。
  • 创建项目

  • 登陆后点击

创建项目,在 Amazon SageMaker Unified Studio 中,通过项目汇集人员、数据和工具,使数据用户群体能够协作解决特定的业务用例。

  • 修改项目名称,选择合适的项目配置文件。项目配置文件是用于创建项目的配置蓝图的集合。蓝图定义了项目成员在处理 Amazon SageMaker 目录中的数据时可以使用哪些 AWS 工具和服务。这里选择的是

所有功能,选择后点击 继续

  • 可以按需更改日志保留期等配置,由于在此场景下已经禁用了glue catalog,可以忽略lakehouse database中的glue database name更改,这里保持默认设置。点击

继续。跳转到下一页后再选择 创建项目。创建成功后,您将被重定向到项目主页。

  • 下一步我们来添加EMR Serverless 计算资源。进入项目后,在左侧概览下选择
  • compute**,点击 **Data processing**,点击 **add compute。

  • 您可以选择连接到现有计算资源。如果您为创建资源,可以选择
  • Create new compute resources**,点击 **next

  • 关于计算资源种类,我们选择
  • EMR Serverless**, 点击 **next,**修改 **compute name**,其他保持默认值,点击 **add compute

    项目角色权限配置

最后我们还需要为项目角色添加权限,使其可以访问Databricks存储在S3的数据。

  • 我们先在左侧概览下选择

Project overview,在 Project details找到 Porject role arn,从 datazone_user字段开始复制

  • 进入

IAM服务控台页面,点击左侧 角色,搜索复制的project role,点击查询结果查看角色详情。

  • 为项目角色创建内联策略。输入以下策略,将

*amzn-s3-demo-bucket*替换成您的存储桶名称

至此我们在Sagemaker Unified Studio上的开发环境已经Ready了.

EMR Serverless 配置

下面我们需要修改 EMR Serverless Application 的配置, 为了保证后面我们在 Sagemaker Unified Studio 中的配置一致,我们需要修改Application的

Application configuration **和 **Additional configurations. **修改的内容如下 **Application configuration

  • Disable Glue Catalog
  • Sagemaker Unified Studio JupyterLab配置

下面我们开始配置Sagemaker Unified Studio → JupyterLab, 如下图所示

在我们创建Sagemaker Unified Studio的时候,会默认选上Glue Catalog作为Catalog的默认选项,如何我们想在Notebook内使用Databricks Unified Catalog, 我们需要覆盖原有Glue Catalog配置信息,注意下面的catalog信息.

创建Spark session,

下面步骤中一定要注意Compute的信息

验证当前的 Spark Context Configuration

如果想使用emr serverless计算资源,请在每个单元格上方进行选择,左侧选择pyspark,右侧选择创建好的emr serverless资源

查询当前Spark中的catalog List

可以看到此时已经有 sean2 的catalog.

下面我们查询该catalog下的schema数据.

spark.sql(“select * from sean2.myorder.sample_orders limit 1”).show()

此时可以看到我们已经可以查询到数据了.

总结与展望

方案价值回顾

通过本文介绍的集成方案,我们成功打通了AWS 新一代SageMaker与Databricks两大平台的数据通道,实现了真正意义上的统一数据湖仓架构。这不仅是技术层面的集成,更是企业数据战略的重要布局。

关键收益总结

直接收益**: **开发效率提升**:消除重复的ETL开发工作 **数据延迟降低**:从批处理ETL到实时查询的转变 **治理成本降低**:统一的权限管理和审计体系 **资源利用率提升**:EMR Serverless的弹性计算能力 **战略价值**: **打破组织壁垒**:让数据工程师和数据科学家在各自熟悉的平台上协同工作 **加速AI落地**:从数据洞察到模型部署的端到端流程优化 **降低合规风险**:统一的数据治理框架确保合规性 **提升创新能力**:释放团队精力专注于业务价值创造 **适用场景

本方案特别适合以下场景:

  • 已有Databricks数据平台,需要扩展ML能力的企业
  • 需要在AWS生态系统中利用Databricks数据资产的团队
  • 对数据治理有严格要求的游戏、金融、医疗等行业
  • 追求成本优化的中大型数据团队
  • 未来展望

随着Unity Catalog生态的不断完善和AWS对开放标准的持续支持,我们预见:

更深度的集成:期待看到新一代SageMaker与Databricks的直接集成,互为数据的生产者与消费者。在数据发现,可读可写和数据治理方面更加无缝 性能优化:通过缓存、预计算等技术进一步提升查询性能 智能化治理:基于ML的自动化数据分类和权限推荐 多云扩展:将这种集成模式扩展到其他云平台

参考文档

https://community.databricks.com/t5/technical-blog/how-to-access-data-in-databricks-from-amazon-sagemaker-notebooks/ba-p/83638

https://aws.amazon.com/blogs/big-data/run-interactive-workloads-on-amazon-emr-serverless-from-amazon-emr-studio/

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


使用 Apache SeaTunnel 快速集成数据到S3 Tables

AWS账单代付阅读(31)

亚马逊AWS官方博客

使用 Apache SeaTunnel 快速集成数据到S3 Tables

业务技术背景

在当今数字化转型浪潮下,企业正面临着海量数据的爆炸式增长,尤其在构建数据湖业务、BI分析以及AI/ML数据准备等关键场景中,需要高效、可扩展的大规模大数据存储解决方案。这些场景往往要求数据存储系统不仅能处理PB级甚至EB级的数据规模,还必须支持事务性操作,以确保数据一致性、原子性和隔离性,从而避免数据混乱或丢失的风险。正因如此,Apache Iceberg作为一种先进的开源数据湖格式,应运而生并迅速崛起。它提供了可靠的元数据管理、快照隔离和模式演化功能,被众多科技巨头如Netflix、Apple和Adobe广泛采纳,已然确立了在数据湖领域的领导地位。根据行业报告,Iceberg的采用率在过去几年内持续攀升,成为构建现代数据基础设施的首选标准。

尽管Iceberg本身强大,但企业在实际部署中往往面临运维复杂性、扩展管理和资源开销的挑战,这就需要托管解决方案来简化操作。亚马逊云科技在2024年re:Invent推出的S3 Tables特性,进一步强化了Iceberg的托管能力。这一创新功能允许用户直接在Amazon S3上构建和管理Iceberg表,可以将Iceberg表直接构建和管理在云存储上,无需额外的基础设施投资,从而显著降低运维成本和复杂度,同时充分利用云平台的全球可用性、耐久性和无限扩展性,提升数据处理的弹性和性能。这种托管方式特别适用于需要高可用性和无缝集成的场景,为企业提供云原生数据湖体验,确保数据湖在高并发读写下的稳定性。

在众多业务场景中,数据同步尤其是CDC(Change Data Capture)扮演关键角色,它支持实时捕获源数据库的变化并同步到目标系统,如数据湖或仓库。实时数据同步适用于对时效性要求高的场景,例如金融交易平台的欺诈检测、零售库存实时更新或医疗系统的患者记录即时共享,确保决策基于最新数据;而离线(或批量)数据同步则更适合非实时需求,如日常备份、历史数据归档或定时报表生成,避免资源浪费并处理大批量数据。通过这些同步机制,企业能高效实现CDC数据摄入和批量同步,满足从实时分析到离线处理的多样化需求。本文将介绍,如何使用 Apache SeaTunnel ,一个高性能、分布式的大规模数据集成工具,通过兼容 Iceberg rest catalog 的实现对接 S3 Tables 实现实时和批量数据集成。

架构及核心组件

SeaTunnel 原生实现对 Apache Iceberg REST Catalog 的接入能力。Iceberg 的 REST Catalog 允许以标准化接口对元数据进行读写和管理,极大简化了客户端与 Catalog 交互的复杂度。通过对 REST Catalog 的兼容,SeaTunnel 可以直接、无缝地将作业产出的表元数据同步注册到 Iceberg Catalog,而无需研发自定义插件或手动维护元数据同步流程。这为数据湖的自动化运维和架构解耦创造了技术基础。** **通过SeaTunnel 支持 Iceberg REST Catalog 对接,** **云原生数据湖能力:S3 Tables + REST Endpoint ,**随着 S3 Tables的发布,S3 Tables 内置提供了 Iceberg REST Catalog Endpoint。SeaTunnel 能够直接对接S3 Tables,无需额外改造,即可将批量或流式数据流动写入到 S3 上的 Iceberg 表,并通过 S3 Tables 的 REST Endpoint 管理元数据和表结构。这种原生对接极大降低了云上数据湖落地和扩展成本,实现了云原生、Serverless 的数据湖架构,管理和查询端都变得标准化、敏捷和易于演化。 **如图所示,数据同步链路基于 SeaTunnel 完成整合:无论是数据库(如OLTP/OLAP)、S3 离线分区还是流式变更(CDC 数据),都先统一接入 SeaTunnel,通过 SeaTunnel Sink 能力实时或批量写入 S3 Table Bucket。与此同时,Iceberg 表的元数据通过 REST Catalog 即时注册到 Data Catalog 服务(如 Lake Formation),实现业务表、元数据、访问权限等一站式协同。CDC 实时场景下,数据库的变更可以低延迟同步,保证数据的鲜活性;而在批量同步或历史归档场景,也能稳定高效地将数据注入 S3 Table,并由统一 Catalog 发现和管理,适配数据湖/数据仓库混合查询模式。综上,该架构的核心创新在于,SeaTunnel 通过 Iceberg REST Catalog 标准化了数据与元数据的流转方式,AWS S3 Tables 的 REST Endpoint 实现云原生、托管化部署,而 CDC 与离线数据同步能力让大规模数据湖具备了高效、灵活、实时的一站式数据流通机制。** **数据与 Catalog 的流转闭环,高效支持 CDC 及全量离线同步,

数据集成演示

  • 离线数据集成

1. 以SeaTunnel 提供的fake 数据源测试批量数据写入 S3 Tables,首先编辑 SeaTunnel任务配置文件,Sink 配置为 Iceberg 连接器的 rest catalog,认证方式选择

aws ,配置 rest uri 及 warehouse为 S3 Tables 的 endpoint 。如下示例:

2.启动SeaTunnel 任务

3.查看任务运行日志

4.在 S3 Tables bucket 查看表,在 Athena 进行数据查询

  • 实时 CDC 数据集成

1.以MySQL cdc 数据源测试流式量数据写入 S3 Tables,首先编辑 SeaTunnel任务配置文件,Sink 配置为 Iceberg 连接器的 rest catalog,认证方式选择

aws ,配置 rest uri 及 warehouse为 S3 Tables 的 endpoint 。如下示例:

2.启动SeaTunnel 任务

3.查看任务运行日志,可以看到 cdc 完成一次快照拉取数据后在监听数据并进行数据摄入

4.同样可以在 Athena 查看数据

总结展望

随着Apache SeaTunnel对Iceberg和AWS S3 Tables的深度集成,企业数据湖架构将迎来更广阔的应用前景。未来,在数据湖构建过程中,生产环境可以引入SeaTunnel的监控措施,如集成Prometheus和Grafana进行实时指标监控(包括任务执行状态、数据吞吐率和错误日志),确保及时发现并响应潜在问题。同时,通过Kubernetes或Docker Swarm的弹性部署策略,实现SeaTunnel作业的自动缩放和故障转移,支持动态资源分配(如基于负载的Pod扩展),从而保证数据ETL流程的稳定性和高可用性。这不仅能减少手动干预,还能应对突发数据峰值,维持生产级别的可靠运行。此外,结合AWS的高级功能如Athena查询引擎或Glue Crawler的自动化发现,企业可以进一步优化Iceberg表的查询性能,例如启用S3的智能分层存储来降低成本,或集成Lake Formation的安全治理来强化数据访问控制。这些优化将使数据湖在BI分析和AI/ML准备中更具弹性,支持PB级数据的低延迟查询和模型训练。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


通过Amazon Q CLI 集成DynamoDB MCP  实现游戏场景智能数据建模

AWS账单代付阅读(29)

亚马逊AWS官方博客

通过Amazon Q CLI 集成DynamoDB MCP  实现游戏场景智能数据建模

前言

Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,提供快速、可预测且可扩展的性能。作为一种无服务器数据库,DynamoDB 让开发者无需担心服务器管理、硬件配置或容量规划等基础设施问题,可以专注于应用程序开发。对于游戏行业而言,DynamoDB 的设计特性尤为适合:其低延迟数据访问(通常以个位数毫秒计)能够支持游戏中的实时交互;自动扩展功能可以轻松应对游戏上线或特殊活动期间的流量高峰;全球表功能支持多区域部署,为全球玩家提供一致的低延迟体验,而按需容量模式则使游戏开发商能够根据实际使用量付费,有效控制成本,这些特性使 DynamoDB 成为众多游戏公司使用 DynamoDB 作为游戏主数据库,来存储关键游戏数据。

在现代游戏开发中,数据架构设计往往是非常重要环节。传统的关系型数据库思维在面对DynamoDB这样的NoSQL数据库时,由于不熟悉可能会设计出性能低下、成本高昂的方案。本博客我们将通过一个完整的游戏项目案例,展示如何使用通过Amazon Q CLI 集成DynamoDB MCP (Model Context Protocol)工具,从客户需求出发,通过调研流程,最终生成高效的DynamoDB数据模型。

DynamoDB MCP是一个基于Model Context Protocol的智能数据建模工具,该工具作为 DynamoDB MCP服务器的一部分提供。DynamoDB MCP 数据建模工具与支持 MCP 的 AI 助手集成,提供结构化的自然语言驱动工作流,将应用程序需求转换为 DynamoDB 数据模型。该工具基于专家工程化的上下文构建,使用最新的推理模型指导用户掌握高级建模技术,它集成了AWS DynamoDB的最佳实践和专家经验,能够实现:

  • 通过专业调研表系统性收集业务需求
  • 基于访问模式自动识别聚合边界
  • 在性能和成本间找到最优平衡点 创建高效DynamoDB数据模型

通过将专家上下文与最新推理模型相结合,这种方法大大缩短了开发初始 DynamoDB 设计所需的时间。以前需要数天甚至数周的研究和迭代工作,现在可以加速到几十分钟内完成。

快速配置Q CLI 集成DynamoDB MCP

什么是 Amazon Q CLI?

Amazon Q CLI 是一款命令行工具,它将 Amazon Q 的强大功能引入命令行界面。借助 Amazon Q CLI,用户可以完成以下或更多工作:

  • 获取 AWS 服务的帮助与推荐建议
  • 诊断并解决 AWS 资源问题
  • 生成并解析 AWS CLI 命令
  • 以对话方式与 AI 助手交互
  • 使用前提

开始实验前,请确保已经在本地电脑安装了必要的工具

  • Amazon Q CLI is installed, instructions: 安装适用于命令行的 Amazon Q
  • AWS CLI 已安装并配置,操作说明:安装或更新最新版本的 AWS CLI

您拥有适当的 AWS 权限,可以创建和管理实验中使用到的资源。

开始和 Q CLI 进行对话

在终端会话中,使用以下命令开始与 Q CLI 进行对话:

q chat –trust-tools=fs_read,fs_write

集成DynamoDB MCP

  • 需要安装uvx 软件 安装请参考:安装uvx
  • 需要配置dynamoDB使用的环境变量:AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 配置请参考:配置dynamodb mcp server
  • 修改Q CLI MCP 配置文件:
  • 重新运行** **Q CLI (q chat) MCP ** **Server** **已经成功集成到** **Q CLI(** **如下图** **):

    通过Q CLI 集成DynamoDB MCP 实现游戏场景智能数据建模

    游戏场景介绍

移动游戏平台服务超过500万注册用户,其中50万为日活跃用户。在正常时段,平台处理约20,000 RPS的请求,但在热门赛事或新英雄发布期间,流量可能在几分钟内激增至50,000 RPS,同时仍需支持各种具有不同性能要求的访问模式。每天产生约25万场游戏对局,这种规模引入了几个关键的数据建模挑战:

流量波动性 – 热门赛事可能瞬间使负载增加三倍。传统数据库往往难以应对这种变化,但当数据模型设计时考虑到最优分区时,DynamoDB 的按需扩展能够吸收突然的流量峰值。

多样化访问模式 – 在我们的示例中,用户可以通过多种方式进行查询,如按玩家排名、按游戏历史,需要满足每种模式都有不同的性能特征。

建模需求采集和智能建模

步骤** **1:** **输入建模需求:

ddb_mcp_blog 目录作为工作目录,从该路径启动 Q CLI 对话窗口,输入提示词:

>使用我的数据建模 MCP 工具来帮助设计 DynamoDB 数据模型

可以看到 Q CLI 开始思考并提出建模相关的调研问题- 需要了解您的应用程序详情和访问模式需求:

输入y

步骤** **2:** **输入建模调研问题回答:

>

## ** **项目背景

我正在为一个高流量的移动MOBA游戏平台, 设计DynamoDB数据模型。目前使用MySQL,但希望迁移到DynamoDB来更好地处理极端规模和流量。

## ** **用户规模 ** **## ** **核心业务实体** **## ** **主要访问模式** **## ** **数据访问关联性** **## ** **特殊需求** **步骤** **3:** **DynamoDB MCP ** **会基于输入的调研信息** **创建模型需求文档** ** dynamodb_requirement.md

输入y

DynamoDB MCP ** **会基于以上输入的调研信息** **创建** **dynamodb_requirement.md** **备注:** **DynamoDB MCP ** **可能会提示更多的调研问题** ** :** **这时请输入:

>请基于以上输入信息建模 目前还不能提供更详细信息

步骤** **4:DynamoDB MCP ** **基于需求文档** ** dynamodb_requirement.md ** **智能建模** **生成** **dynamodb_data_model.md

输入y

DynamoDB MCP ** **会基于以上生成的需求文档** **dynamodb_requirement.md ** **创建** **dynamodb_data_model.md ** **同时总结核心设计亮点

采用** **DynamoDB MCP ** **生成的** **dynamodb_data_model.md ** **有以下几部分组成:** **设计理念与方法

核心原则:

  • 基于访问模式驱动的聚合设计
  • 根据数据访问相关性(95%、30%、90%)进行整合
  • 针对高流量MOBA游戏平台优化(峰值50,000 RPS)
  • 聚合策略:

  • 单项聚合:Player+Stats(95%关联)
  • 项目集合:Player+Items(30%关联)
  • 分离表:MatchHistory(15%关联,无界增长)
  • 表结构设计** **主要表设计:

  • PlayerProfile表:玩家档案+统计+道具的混合聚合
  • Match表:对局+玩家表现的单项聚合
  • MatchHistory表:独立的对局历史表
  • ActivePlayersLeaderboard GSI:稀疏索引的排行榜
  • 分区键策略:

  • 使用自然分布键(player_id、match_id)
  • 避免热分区问题
  • 支持识别关系模式
  • 访问模式映射** **10** **个核心模式全覆盖:

  • 登录查询:单次GetItem操作
  • 排行榜:稀疏GSI查询
  • 对局创建/更新:原子操作
  • 道具购买:事务写入
  • Match历史查询:时间范围查询
  • 查询效率:

  • 消除不必要的GSI
  • 使用识别关系 减少50%写入成本
  • 单次查询获取相关数据
  • 性能与成本优化** **热分区分析:

  • 所有模式保持在分区限制内(3,000 RCU/1,000 WCU)
  • 自然键分布确保负载均衡
  • 成本节省:

  • 稀疏GSI节省80%存储/写入成本
  • 聚合设计减少50%查询次数
  • 识别关系消除额外GSI开销
  • 权衡决策** **关键权衡:

  • 存储 vs 查询性能:选择适度非规范化的数据冗余
  • 一致性 vs 可扩展性:基于业务需求选择最终一致性
  • 复杂性 vs 成本:通过聚合简化操作降低成本
  • 优化选择:

  • 嵌入式PlayerPerformances实现原子更新
  • 排行榜 增加用户名 非规范化的数据冗余 避免额外查询
  • 分离MatchHistory 控制无界增长

这个设计在保证高性能的同时实现了成本优化,完全满足高流量游戏平台的需求。每个部分都遵循了DynamoDB MCP工具提供的标准模板结构,提供了完整的数据建模文档,涵盖了从设计理念到具体实现的所有关键方面。

模型设计关键设计原则:** **基于访问模式的聚合** **减少了查询往返次数

通过分析实际查询需求将频繁一起访问的数据组织在同一个聚合中,使原本需要多次数据库调用的操作,合并为单次查询。

例如本游戏应用中,95%的玩家登录场景需要同时获取玩家基本信息和统计数据,因此将Player和PlayerStats设计为单项聚合存储在PlayerProfile表中,用一次GetItem操作替代了两次独立查询。同时,Match和PlayerPerformances由于访问相关性也被合并为单项聚合,实现了对局结果的原子更新

识别关系** **最小化了对** **GSI** **的需求

当子实体在业务逻辑上完全依赖父实体存在且查询时总是通过父实体ID进行时,采用父实体ID作为分区键、子实体ID作为排序键的设计模式。如PlayerProfile表中的道具数据,使用PK=player_id, SK=ITEM#{item_id}的设计,通过Query(player_id)直接获取玩家所有道具。

MatchHistory表使用PK=player_id, SK=date#match_id支持玩家历史查询,这种识别关系设计消除了创建专门GSI的需要,降低了50%的写入成本和存储开销

单表设计** **提高了效率和可扩展性

将相关但访问相关性适中(30-70%)的实体通过不同排序键前缀组织在同一张表中,实现了数据的逻辑分离和物理共存。如PlayerProfile表中玩家道具采用项目集合设计,既支持获取完整玩家信息的单次查询,也允许独立查询道具清单,在保持查询灵活性的同时,优化了运营成本和表管理复杂度。

具体模型设计信息** **请参考** **DynamoDB MCP ** **生成的** **dynamodb_data_model.md** **文件** **下一步** **:** **可调用** **DynamoDB MCP ** **基于** **dynamodb_data_model.md ** **生成** **DynamoDB ** **表结构

总结

DynamoDB MCP是基于Model Context Protocol的智能数据建模工具,通过Amazon Q CLI集成,将Amazon专家经验与AI推理模型深度融合,将传统需要数天甚至数周的DynamoDB架构设计工作缩短至几十分钟。该工具采用聚合导向设计理念,自动化完成容量规划、热分区风险评估和成本优化,可为各行业各类应用场景,提供智能的DynamoDB数据模型设计。

相关博客推荐

初识 Amazon DynamoDB 数据建模 MCP 工具

其他产品和服务推荐

S-BGP 是我们在由光环新网运营的亚马逊云科技中国(北京)区域和由西云数据运营的亚马逊云科技中国(宁夏)区域推出的一项成本优化型网络服务,旨在帮助我们的客户降低经过互联网传输数据出云(Data Transfer Out)的费用。 如果您想申请亚马逊云科技中国区域的 S-BGP 服务,请联系您的客户经理获取进一步帮助。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


在亚马逊云科技中国区域利用 S3  Object Lambda 轻松实现自定义图片缩放

AWS账单代付阅读(32)

亚马逊AWS官方博客

在亚马逊云科技中国区域利用 S3  Object Lambda 轻松实现自定义图片缩放

在网站开发中,不同终端设备往往需要不同分辨率的图片资源。传统做法是预先存储多种尺寸的图片,但这会增加存储成本和管理复杂度, 利用中国区已上线的 S3 Object Lambda 功能,我们可以实现动态图片缩放:

  • 按需生成任意尺寸的图片
  • 无需预存多个版本
  • 利用 S3 内置功能, 不用维护额外的 API 接口
  • 通过文件名参数直接指定目标尺寸

该方案既节省了存储空间,又简化了图片管理流程,让图片缩放变得更加灵活高效

方案架构

  • 用户如需要访问S3 原始文件, 如 image1.jpg, 直接调用 S3 bucket 的 get object 方法即可.
  • 用户如需要对 S3 中的图片文件进行指定分辨率的缩放, 则调用 S3 Object Lambda Access Point 并将 key 指定为 image1_300x200.jpg
  • 实现步骤

本方案测试步骤选择宁夏区域 (cn-northwest-1)部署, 您也可以选择北京区域 (cn-north-1).

  • 创建存储桶, 设为 image-resize-bucket01 并上传一个图片文件, 测试图片文件可在代码仓库中下载 image1 (默认分辨率为1280×720)
  • 创建 S3 Access Point, name设为 s3-access-point 配置如下:

a.

Data source: image-resize-bucket01

b.

Network origin: Internet

c.

Block all public access (推荐测试时使用)

d.

Access Point policy (测试时不添加 policy, 保持空白)

  • 创建 Lambda Function Execution Role, name 设为 ResizeImageObjectLambdaRole

a. Trust relationships:

b.

c. Permission policies (创建自定义policy, 方案测试中没有指定 Resource, 生产环境中需要指定)

d.

  • 创建 Lambda function, name设为 resize-image-lambda, 配置如下:

a.

Runtime: python3.11

b.

Architecture: x86_64

c.

Execution role: 选用上一步创建的role

d. 创建完成后上传 zip文件.

e.

f. 上传后会自动部署代码.

  • 创建Object Lambda Access Point, name 设为 resize-image-olap

a.

Supporting Access Point: 选择上述步骤中创建的 s3-access-point

b.

S3 APIs: GetObject

c.

Invoke Lambda function: resize-image-lambda

d.

Object Lambda Access Point policy, 本方案测试中不进行设置, 保持空

e.

Block all public access (推荐测试时使用)

功能测试

取 Object Lambda Access Point 的 ARN:

AWS CLI:

aws s3api get-object –bucket {your_arn} –key image1_300x200.png image1.png

Boto3 api:

价格估算

假设图片大小平均为 200kb, 每次调用后下载的图片大小也为调用一次的价格分为如下几个部分:

  • S3 api get-object 调用费用: ¥ [已去除电话] 每笔请求
  • Lambda 调用费用: [已去除电话] (512mb/GB 每秒) + [已去除电话] 每次调用
  • DTO (Data Transfer Out): 0.933 /GB

假设每次调用耗时 1 s, 则1000次调用费用为 ¥0.24, 其中约 80%为 DTO 费用.

总结与展望

该方案简单易用, 只需配置 S3 相关功能和 Lambda 而无需引入额外服务. 以下是可以优化的方向:

成本优化

  • 如上文价格估算所述, 可以考虑压缩图片以降低 DTO 成本.
  • Lambda 基础配置可以进行评估和优化, 并非每次任务都需要 512 MB 以上内存.
  • 可以打包 ARM 版本的 Lambda Function 以降低成本.
  • 性能优化

  • 每次调用Object Lambda 时 Lambda 冷启动可能会造成较高延时, 可以考虑使用Lambda预置并发, 但成本也会相应上升.
  • 可以优化 Lambda Function 的 resize image 逻辑, 测试不同图片处理库以及不同编程语言.
  • 相关链接:

    *前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。


AWS代付、代充值免实名

联系我们阿里云国际免实名