作者:Rostislav Markov 和 Matt Noyce,发表于2023年3月24日,来源于 Amazon DynamoDB,Amazon EC2,Amazon Elastic Kubernetes Service,Amazon EventBridge,Amazon FSx for Lustre,Architecture,AWS Batch,AWS Lambda,AWS Step Functions
在基因组研究中,自动化基准测试可以帮助识别更快、更便宜的工作流程。通过准确的资源规划和成本透明,企业可以有效评估工作流程性能。此外,自动系统减轻了开发和运行基准测试的负担。
运行 基因组工作流程 可能需要数小时,涉及大规模的计算实例处理数据,规模达到 PB 级别。基准测试Benchmarking可以帮助你评估工作流程的性能,发现更快更便宜的运行方式。
然而,实际中由于基准测试的工作量大,性能评估往往不规律。因此,我们在本博客中讨论如何使生命科学研究团队能够自动化这些评估。

实施自动化基准测试解决方案带来的好处包括:
益处描述更准确的企业资源规划通过历史数据分析,提高资源规划的准确性。降低企业成本通过比较不同资源类型的性能,帮助企业降低运营成本。成本透明度量化定期的费用分摊,提高成本透明度。我们已使用自动化基准测试比较不同服务的处理时间,包括 Amazon Elastic Compute Cloud (Amazon EC2)、AWS Batch、AWS ParallelCluster、Amazon Elastic Kubernetes Service (Amazon EKS) 和本地的 HPC 集群。科学家、金融家、技术领导者和其他利益相关者可以根据消费者、工作流程类型和时间段,生成报表和仪表板来比较消耗数据。
我们的自动化基准测试解决方案在两个维度上测量性能:
时长:测量特定数据集上工作流程启动的持续时间定价:测量相关的成本该解决方案还可以扩展到其他性能指标,如每秒迭代次数或计算节点上的进程/线程分布。
我们的要求包括:
基于工作流程状态如准备、等待、就绪、运行、失败、完成的一致时长测量基于单价的可扩展定价模型例如,与特定时间点的 Amazon EC2 现货价格 相比较的 Amazon EC2 按需定价可扩展、高性价比且灵活的数据存储,支持历史基准测试和估算最小化基础设施管理开销我们选择了无服务器设计模式,使用 AWS Step Functions 进行编排,应用 AWS Lambda 执行代码,并利用 Amazon DynamoDB 跟踪工作流程启动 ID 和状态如在 第三部分 中所述。假设基因组工作流程运行在 AWS Batch 上,并且基因组数据存储在 Amazon FSx for Lustre 中在 第一部分 中有提到。AWS Step Functions 允许我们将处理过程细分为更小的步骤,避免单体应用代码。我们的评估过程分为四个步骤:
通过 DynamoDB stream 监视已完成的工作流程启动,使用目标为 Step Functions 工作流的 Amazon EventBridge pipe。这种事件驱动的方法比周期性轮询更有效,使我们避免在 DynamoDB 流的所有记录中解析状态和成本值时编写自定义代码。收集与工作流程启动相关的所有计算资源的列表。设计一个 Lambda 函数,查询 AWS Batch API见 第一部分来描述计算环境参数,如 Amazon EC2 实例 ID 及其详细信息,例如处理时间、实例系列/大小和分配策略例如 现货实例、保留实例、按需实例。计算所有消耗资源的成本。我们通过另一个 Lambda 函数实现这一点,该函数根据从 AWS Price List Query API 获取的单价来计算总价。我们的状态机更新 DynamoDB 表中的总价,而无需额外的应用代码。图1可视化这些步骤。
图1 自动化基准测试基因组工作流程
飞鱼加速器电脑版AWS Step Functions 可靠地编排我们的基准测试工作流程,使我们的应用代码易于维护。图2总结了我们将要描述的状态机转换。
图2 AWS Step Functions 状态机的自动化基准测试
收集消费细节将 DynamoDB 流视图类型配置为 New image 以便在改变后完整传递整个项。我们设置了一个 Amazon EventBridge pipe,与 事件筛选 的 DynamoDB 流作为 源。我们的事件筛选器使用 多重匹配 处理状态为 COMPLETE 的记录,但没有成本条目,以避免无限循环。一旦我们的状态机更新了 DynamoDB 项目中的工作流程价格,DynamoDB 流中的结果记录将不会通过我们的事件筛选器。
我们的事件筛选的语法如下:
json{ dynamodb { NewImage { status { S [COMPLETE] } totalCost { S [{ exists false }] } } }}
我们使用 输入转换器 来简化后续解析,去除事件中的不必要元数据。
流记录中消耗的资源包括 AWS Batch 的自动扩展组 ID 和 Amazon FSx for Lustre 的卷 ID。我们使用 DescribeJobs API (describejobs 在 Boto3 中) 来确定使用了哪些计算资源。如果响应是 EC2 实例的列表,我们将查找消费信息,包括使用的开始时间和结束时间,使用 ListJobs API (listjobs 在 Boto3 中) 分别获取每个计算节点的信息。我们使用 describevolumes 对识别出来的 EC2 实例加以过滤,以获得 Amazon Elastic Block Store (Amazon EBS) 卷的大小和类型。
计算价格另一个 Lambda 函数可通过 AWS Price List Query API 的 GetProducts 请求获取所有消耗资源的单位价格,并解析出 pricePerUnit 值。对于现货实例,我们使用 describespotpricehistory 在 Boto3 中指定的时间范围和实例类型来接收价格。
工作流程启动价格的计算基于以下因素:
自动扩展节点组中 EC2 实例的数量和大小EBS 卷的大小和 Amazon FSx for Lustre处理持续时间我们的基于 Python 的 Lambda 函数计算总成本,向上取整,并以以下格式返回价格明细:
totalcost str instancecost str volumecost str filesystemcost str
最后,我们通过 Amazon States 语言直接使用 UpdateItem 将价格明细更新到 DynamoDB 表中。
请注意,AWS 信贷和企业折扣可能不会在 AWS Price List Query API 的响应中反映,除非特定应用到此 AWS 账户。这通常被视为符合最小权限原则的最佳实践。
在之前的实践中,我们也使用了 AWS Cost Explorer 来代替 AWS Price List API。AWS Cost Explorer 的数据每24小时至少更新一次。你可以在 DynamoDB 表项中标记待定价格状态,并使用 Wait 状态来延迟计算过程。
所提出的解决方案也可以扩展到其他计算服务,如 Amazon Elastic Kubernetes Service (Amazon EKS)。对于 Amazon EKS,事件通过来自 DynamoDB 表的集群 ID 进行丰富,价格计算还应包括控制平面的成本。
生命科学研究团队利用 基准测试 来比较工作流程性能,指导架构决策。这类评估工作量较大,因此进行的频率较低。
在本博客中,我们展示了生命科学研究团队如何对科学工作流程进行自动化基准测试。通过自动化基准测试,团队获得的洞见表明了持续优化的机会,比如调整计算节点的配置。评估数据也可以按需用于其他目的,包括费用分摊。
请继续关注我们的下一篇文章,我们将展示如何利用历史基准测试数据进行未来工作流程启动的价格估算。
标签:基因组学
Rostislav 是 AWS 专业服务的首席架构师。在 AWS 行业担任技术领导,他与 AWS 客户和合作伙伴合作进行云转型项目。在工作之外,他喜欢与家人在户外活动,打网球和滑雪。
Matt Noyce 是一名高级应用架构师,主要与 AWS 专业服务中的医疗和生命科学客户合作。他与客户共同构建、架构和设计满足他们业务需求的解决方案。在闲暇时间,Matt 喜欢跑步、徒步旅行和探索新城市与地方。
电话:13594780107
联系人:周经理
邮箱:addictive@hotmail.com
网址:https://www.ghcyd.com
地址:泉州市刊舌入口209号