SmugMug 运营着两个非常大的在线照片平台, SmugMug的 和 Flickr的,使超过 100 亿客户能够安全地存储、搜索、共享和销售数百亿张照片。 客户上传和搜索数十年的照片,帮助将搜索转变为关键的基础设施,自 SmugMug 首次使用以来,搜索量稳步增长 亚马逊云搜索 在2012中,接着是 亚马逊开放搜索服务 自 2018 年以来,文档数量和搜索存储量达到数十亿字节。
在此,SmugMug 高级工程师 Lee Shepherd 分享了 SmugMug 的搜索架构,该架构用于将实时流量发布、回填和镜像到多个集群。 SmugMug 使用这些管道进行基准测试、验证和迁移到新配置,包括来自 i6xlarge 的基于 Graviton 的 r2gd.3.2xlarge 实例,以及测试 亚马逊 OpenSearch 无服务器。 我们涵盖了用于发布、回填和查询的三个管道,而不会引入尖峰的不切实际的流量模式,并且不会对生产服务产生任何影响。
有两个对该过程至关重要的主要架构部分:
- 索引数据的持久真实来源。 这是最佳实践 以及我们备份策略的一部分,以拥有 OpenSearch 索引之外的持久存储,以及 Amazon DynamoDB 提供可扩展性和集成 AWS Lambda 这简化了很多过程。 我们将 DynamoDB 用于其他非搜索服务,因此这是一个自然的选择。
- 用于将数据从事实源发布到 OpenSearch 的 Lambda 函数。 使用 函数别名 有助于同时运行同一 Lambda 函数的多个配置,并且是保持数据同步的关键。
出版
发布管道由用户输入关键字或标题、新上传或标签检测等事件驱动 亚马逊重新认识。 这些事件经过处理,结合了来自其他一些资产存储的数据,例如 Amazon Aurora MySQL 兼容版 和 亚马逊简单存储服务(Amazon S3),在将单个项目写入 DynamoDB 之前。
写入 DynamoDB 会调用 Lambda 发布函数,通过 DynamoDB 流 Kinesis 适配器,它从 DynamoDB 获取一批更新的项目并将它们索引到 OpenSearch 中。 使用 DynamoDB Streams Kinesis Adapter 还有其他好处,例如减少所需的并发 Lambda 数量。
发布 Lambda 函数使用环境变量来确定要发布到的 OpenSearch 域和索引。 生产别名配置为从 DynamoDB 表或 Kinesis Stream 写入生产 OpenSearch 域
测试新配置或迁移时,迁移别名配置为写入新的 OpenSearch 域,但使用与生产别名相同的触发器。 这样可以同时将数据双重索引到两个 OpenSearch 服务域。
以下是 DynamoDB 表架构的示例:
“LastUpdated”值在索引时用作文档版本,允许 OpenSearch 拒绝任何无序更新。
回填
现在更改已发布到两个域,新域(索引)需要用历史数据回填。 要回填新创建的索引,可以组合使用 Amazon Simple Queue Service(Amazon SQS) 并使用DynamoDB。 脚本使用包含以下指令的消息填充 SQS 队列: 并行扫描 DynamoDB 表的一部分。
SQS 队列启动一个 Lambda 函数,该函数读取消息指令,从 DynamoDB 表的相应段中获取一批项目,并将它们写入 OpenSearch 索引中。 新消息被写入 SQS 队列以跟踪该段的进度。 该段完成后,不再有消息写入 SQS 队列,并且进程自行停止。
并发性由段数决定,并由 Lambda 并发扩展提供额外控制。 SmugMug 能够在其 OpenSearch 配置上每小时索引超过 1 亿个文档,同时对生产域产生零影响。
基于 NodeJS AWS-SDK 的脚本用于为 SQS 队列提供种子。 以下是 SQS 配置脚本选项的片段:
以及生成的 SQS 消息的格式:
镜像
最后,我们的 镜像搜索查询 除了我们的生产域之外,还通过向 SQS 队列发送 OpenSearch 查询来运行结果。 SQS 队列启动 Lambda 函数,将查询重播到副本域。 这些请求的搜索结果不会发送给任何用户,但允许在测试中的 OpenSearch 服务上复制生产负载,而不会影响生产系统或客户。
结论
在评估新的 OpenSearch 域或配置时,我们感兴趣的主要指标是查询延迟性能,即占用的延迟(每次延迟),以及最重要的搜索延迟。 在转向 Graviton R6gd 的过程中,我们发现与 i40 相比,P50-P99 延迟降低了约 3%,CPU 使用率也有类似的提升(忽略 Graviton 的较低成本)。 另一个受欢迎的好处是,由于在 R1gd 和其他新实例上添加 G6GC,垃圾收集发生了变化,从而使 JVM 内存压力更加可预测和可监控。
使用此管道,我们还测试 OpenSearch Serverless 并找到其最佳用例。 我们对该服务感到很兴奋,并完全打算及时拥有一个完全无服务器的架构。 请继续关注结果。
作者简介
李·谢泼德 是一名 SmugMug 高级软件工程师
艾登·贝基洛夫 是 Amazon Web Services 首席技术客户经理
- :是
- :不是
- 1
- 100
- 12
- 14
- 20
- 2012
- 2018
- 40
- 7
- 9
- a
- Able
- 关于
- 账号管理
- 添加
- 增加
- 额外
- 后
- 让
- 允许
- 沿
- 还
- Amazon
- 亚马逊网络服务
- an
- 和
- 另一个
- 任何
- 建筑的
- 架构
- 保健
- AS
- 财富
- At
- Aurora
- AWS
- 备份工具
- 基于
- BE
- before
- 作为
- 基准
- 得益
- 好处
- 最佳
- 超越
- 亿
- 十亿美元
- 都
- 但是
- by
- 字幕
- 更改
- 采集
- 组合
- 结合
- 相比
- 兼容
- 完成对
- 并发
- 配置
- 配置
- 包含
- 控制
- 相应
- 成本
- 外壳
- 中央处理器
- 创建
- 危急
- 关键基础设施
- 合作伙伴
- data
- 几十年
- 检测
- 确定
- 决心
- 文件
- 文件
- 域
- 域名
- 驱动
- 每
- 使
- 使
- 端点
- 工程师
- 进入
- 完全
- 环境
- 醚(ETH)
- 评估
- 事件
- 例子
- 兴奋
- 少数
- 字段
- 寻找
- (名字)
- 适合
- 其次
- 针对
- 格式
- 止
- 充分
- 功能
- 收益
- 成长
- 有
- 高度
- 帮助
- 帮助
- 历史的
- 小时
- HTML
- HTTP
- HTTPS
- i
- i3
- ID
- 影响力故事
- 重要的
- in
- 包含
- 指数
- 指标
- 基础设施
- 实例
- 说明
- 积分
- 打算
- 有兴趣
- 成
- 介绍
- 所调用
- 项目
- 迭代
- 它的
- 本身
- JPG
- 保持
- 保持
- 键
- 关键词
- 标签
- 大
- 潜伏
- 启动
- 李
- 喜欢
- 生活
- 加载
- 占地
- 降低
- 主要
- 内存
- 的话
- 条未读消息
- 指标
- 迁移
- 迁移
- 移民
- 百万
- 百万客户
- 镜面
- 更多
- 最先进的
- 移动
- 多
- MySQL的
- 姓名
- 亦即
- 自然
- 需要
- 全新
- 新
- 下页
- 没有
- 数
- of
- 折扣
- on
- 在线
- 运营
- 附加选项
- 选择
- or
- 其他名称
- 我们的
- 并行
- 部分
- 模式
- 为
- 百分
- 性能
- 照片
- 图片
- 件
- 管道
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 可预见
- 压力
- 以前
- 校长
- 过程
- 处理
- 生产
- 进展
- 提供
- 提供
- 发布
- 出版
- 出版
- 达
- 减少
- 回复
- 要求
- 必须
- 导致
- 成果
- 运行
- 安然
- 同
- 锯
- 可扩展性
- 缩放
- 脚本
- 搜索
- 搜索
- 种子
- 段
- 中模板
- 出售
- 发送
- 发送
- 无服务器
- 服务
- 特色服务
- Share
- 分享
- 类似
- 简易
- 同时
- 自
- 单
- 片段
- So
- 软件
- 来源
- 团队
- 留
- 稳步
- 车站
- 存储
- 商店
- 商店
- 策略
- 流
- 这样
- 产品
- 表
- 需要
- 文案
- HAST
- test
- 测试
- 比
- 这
- 其
- 他们
- 那里。
- 博曼
- Free Introduction
- 三
- 通过
- 次
- 至
- 了
- 跟踪时
- 交通
- 触发
- 真相
- 转
- 二
- 下
- 更新
- 最新动态
- 上传
- 网址
- 用法
- 使用
- 用例
- 用过的
- 用户
- 使用
- 运用
- 验证
- 折扣值
- 版本
- 非常
- 是
- we
- 卷筒纸
- Web服务
- 欢迎进入
- 什么是
- ,尤其是
- 而
- 也完全不需要
- 写
- 写作
- 书面
- 和风网
- 零