13、云服务就绪性测试全解析

云服务就绪性测试全解析

1. 引言

云服务的蓬勃发展为地球科学应用提供了多种选择。将应用迁移到云服务的决策部分取决于服务的就绪性。我们可以通过GEOSS Clearinghouse(CLH)、Climate@Home和沙尘暴预报这三个地球科学应用来测试不同云服务(如NASA Nebula、Windows Azure和Amazon Elastic Cloud Computing(EC2))的就绪性,并将云托管应用的测试结果与传统集群进行比较。

2. 测试环境

2.1 网络

测试在位于不同地理位置的云服务上进行,这些服务通过National LamdaRail连接。对每个计算服务的性能进行端到端测试,使用Clearinghouse测试并发强度,通过发出不同数量的并发请求到运行在每个计算服务上的Clearinghouse。同时,还使用计算密集型的Climate@Home和沙尘暴预报模型对云服务进行测试。各计算服务的地理位置如下表所示:
| 计算服务 | 地理位置 | 云服务类型 | 托管组织 |
| — | — | — | — |
| EC2 | Reston, VA | IaaS | Amazon |
| Azure | Chicago, IL | PaaS | Microsoft |
| Nebula | Ames, CA | IaaS | NASA |
| 本地集群 | Fairfax, VA | 传统集群 | George Mason University (GMU) |

2.2 计算服务配置

计算服务实例根据可用的硬件配置进行配置,具体配置如下表:
| 服务名称 | CPU 核心数 | CPU 速度 (GHz) | 内存 (GB) |
| — | — | — | — |
| EC2 1 | 1 | 2.3 | 0.5 |
| EC2 2 | 2 | 2.3 | 7.5 |
| EC2 3 | 4 | 2.3 | 7.5 |
| EC2 4 | 8 | 2.8 | 7.5 |
| Azure 1 | 1 | 1.6 | 1.75 |
| Azure 2 | 2 | 1.6 | 3.5 |
| Azure 3 | 4 | 1.6 | 7 |
| Azure 4 | 8 | 1.6 | 14 |
| Nebula 1 | 1 | 2.9 | 2 |
| Nebula 2 | 2 | 2.9 | 4 |
| Nebula 3 | 4 | 2.9 | 8 |
| Nebula 4 | 8 | 2.9 | 16 |
| 本地服务器 | 8 | 2.4 | 23 |

3. 使用 GEOSS Clearinghouse (CLH) 进行并发强度测试

3.1 Clearinghouse 对计算服务的要求

CLH 是一个由 FGDC、GEO 和 NASA 合作的项目,用于支持全球范围内地球观测(EO)数据的共享。它提供了收集 EO 数据元数据的采集功能和在全球用户之间共享元数据的搜索功能。为支持采集 - 共享机制,CLH 使用了多种地理空间标准,如 CSW、SRU 和 RSS 用于搜索和发现,ISO 19139 用于元数据,以及与 Open Geospatial Consoritum (OGC) 相关的 WMS、WCS 和 WFS 标准用于数据访问和可视化。全球用户对 Clearinghouse 的访问在不同地区和不同元数据上具有不同的时空模式。

3.2 测试设计

为了比较不同云服务支持并发请求的能力,使用 CLH 进行了两个实验来比较并发访问的平均响应时间:
1. 并发搜索请求矩阵测试 :在四个计算服务(三个云服务(AWS、Azure 和 Nebula)和一个本地服务器)上运行 CLH,从一个服务向所有其他服务发出并发请求。使用 Apache JMeter 测试服务之间并发请求的性能,测试结果是一个 4 4 矩阵,可表示每个计算服务相对于其他计算服务的并发性能。
2.
负载平衡和可扩展性测试 *:负载平衡和自动扩展机制可以通过动态使用多个实例来帮助维持良好的性能。负载平衡实验比较在负载均衡器后面使用不同数量的实例时的并发性能;自动扩展实验跟踪云服务在并发请求数量增加时动态扩展新实例时的性能变化。

3.3 测试工作流程

3.3.1 并发搜索请求矩阵测试
graph LR
    A[启动 CLH 实例] --> B[设置 CSW GetRecords 请求]
    B --> C[设置 JMeter 测试计划]
    C --> D[运行 JMeter]
    D --> E[分析 JMeter 结果]

具体步骤如下:
1. 在不同云服务上安装 CLH :有两种安装方式:
- (a)使用虚拟映像启动实例,用于 Amazon AWS 的 AMI 映像可以通过在 AWS Marketplace 中搜索“CLH”来访问。
- (b)启动实例并安装 CLH。
2. 设置 CSW GetRecords 请求 :可以向 CLH 发出 CSW GetRecords 请求,该请求通常是一个 XML 文件,可保存在运行 JMeter 的机器上。以下是一个搜索水记录的 GetRecords 示例:

<?xml version="1.0"?>
<csw:GetRecords xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gmd="http://www.isotc211.org/2005/gmd" service="CSW" version="2.0.2">
    <csw:Query typeNames="csw:Record">
        <csw:Constraint version="1.1.0">
            <Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
                <PropertyIsLike wildCard="%" singleChar="_" escapeChar="\">
                    <PropertyName>AnyText</PropertyName>
                    <Literal>%water%</Literal>
                </PropertyIsLike>
            </Filter>
        </csw:Constraint>
    </csw:Query>
</csw:GetRecords>
  1. 设置 JMeter 测试计划 :设置测试计划以模拟对 CLH 的并发请求,并发数可以增加,如 1、50、100 等。通常需要设置两种类型的配置:线程组和控制器。线程组保存测试的基本信息,如线程数、加速期和循环次数;控制器保存 CSW 请求的信息。以下是一个模拟 100 个请求到 CLH 的 JMeter 测试计划示例:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.1">
    <hashTree>
        <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="GEOSSTestPlan_1" enabled="true">
            <stringProp name="TestPlan.comments">This the for the GEOSS Cloud Test</stringProp>
            <boolProp name="TestPlan.functional_mode">false</boolProp>
            <boolProp name="TestPlan.serialize_threadgroups">true</boolProp>
            <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
                <collectionProp name="Arguments.arguments"/>
            </elementProp>
            <stringProp name="TestPlan.user_define_classpath"></stringProp>
        </TestPlan>
        <hashTree>
            <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread_Group_1" enabled="true">
                <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
                <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
                    <boolProp name="LoopController.continue_forever">false</boolProp>
                    <stringProp name="LoopController.loops">1</stringProp>
                </elementProp>
                <stringProp name="ThreadGroup.num_threads">100</stringProp>
                <stringProp name="ThreadGroup.ramp_time">1</stringProp>
                <longProp name="ThreadGroup.start_time">1319814086000</longProp>
                <longProp name="ThreadGroup.end_time">1319814086000</longProp>
                <boolProp name="ThreadGroup.scheduler">false</boolProp>
                <stringProp name="ThreadGroup.duration"></stringProp>
                <stringProp name="ThreadGroup.delay"></stringProp>
            </ThreadGroup>
            <hashTree>
                <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_GetRecords" enabled="true">
                    <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
                        <collectionProp name="Arguments.arguments"/>
                    </elementProp>
                    <stringProp name="HTTPSampler.domain">clearinghouse.cisc.gmu.edu</stringProp>
                    <stringProp name="HTTPSampler.port">80</stringProp>
                    <stringProp name="HTTPSampler.connect_timeout"></stringProp>
                    <stringProp name="HTTPSampler.response_timeout"></stringProp>
                    <stringProp name="HTTPSampler.protocol"></stringProp>
                    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
                    <stringProp name="HTTPSampler.path">geonetwork/srv/en/csw</stringProp>
                    <stringProp name="HTTPSampler.method">POST</stringProp>
                    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
                    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
                    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
                    <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
                    <elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
                        <collectionProp name="HTTPFileArgs.files">
                            <elementProp name="/root/jakarta-jmeter-2.5.1/bin/post.xml" elementType="HTTPFileArg">
                                <stringProp name="File.path">/root/jakarta-jmeter-2.5.1/bin/post.xml</stringProp>
                                <stringProp name="File.paramname"></stringProp>
                                <stringProp name="File.mimetype">application/xml</stringProp>
                            </elementProp>
                        </collectionProp>
                    </elementProp>
                    <boolProp name="HTTPSampler.monitor">false</boolProp>
                    <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
                </HTTPSamplerProxy>
                <hashTree/>
                <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true">
                    <boolProp name="ResultCollector.error_logging">false</boolProp>
                    <objProp>
                        <name>saveConfig</name>
                        <value class="SampleSaveConfiguration">
                            <time>true</time>
                            <latency>true</latency>
                            <timestamp>true</timestamp>
                            <success>true</success>
                            <label>true</label>
                            <code>true</code>
                            <message>true</message>
                            <threadName>true</threadName>
                            <dataType>true</dataType>
                            <encoding>false</encoding>
                            <assertions>true</assertions>
                            <subresults>true</subresults>
                            <responseData>false</responseData>
                            <samplerData>false</samplerData>
                            <xml>true</xml>
                            <fieldNames>false</fieldNames>
                            <responseHeaders>false</responseHeaders>
                            <requestHeaders>false</requestHeaders>
                            <responseDataOnError>false</responseDataOnError>
                            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
                            <assertionsResultsToSave>0</assertionsResultsToSave>
                            <bytes>true</bytes>
                        </value>
                    </objProp>
                    <stringProp name="filename">/home/result/result.xml</stringProp>
                </ResultCollector>
                <hashTree/>
            </hashTree>
        </hashTree>
    </hashTree>
</jmeterTestPlan>
  1. 运行 JMeter :有两种运行方式:图形用户界面(GUI)和命令行。以下是使用命令行运行不同线程数的测试计划的脚本:
# 创建线程数数组
threads=(1 50 100 150 200 250 300 350 400 450 500 600 700 800 900 1000)
# 从本机使用 jmeter 运行测试到 GMU 服务器
for (( i = 0; i <=11; i++))
do
    for (( j = 0; j <=2; j++))
    do
        head=../jmx/GEOSSTestPlan_
        tail=.jmx
        planName=$head${threads[i]}$tail
        ./jmeter -n -t $planName
        sleep 20
    done
done
  1. 分析 JMeter 结果 :JMeter 将响应信息记录在结果文件中,测试人员可以比较响应时间。
3.3.2 负载平衡和自动扩展测试
graph LR
    A[启动 CLH 实例] --> B[设置负载平衡或自动扩展]
    B --> C[设置 CSW GetRecords 请求]
    C --> D[设置 JMeter 测试计划]
    D --> E[运行 JMeter]
    E --> F[分析 JMeter 结果]

测试人员可以逐步使用 10 到 400 个并发请求进行测试,并设置在测试中要启动的实例数量(如 1、2 和 5 个实例)。步骤 1、3、4、5、6 可参考矩阵测试,步骤 2 设置负载平衡或自动扩展,推荐使用 CPU 利用率作为资源触发条件。例如,测试人员可以设置可扩展性文件,当 300 秒内的平均 CPU 利用率大于 90% 时添加一个新实例,当 300 秒内的平均 CPU 利用率小于 75% 时移除一个实例。

3.4 测试结果分析

JMeter 在结果文件中记录响应信息,测试人员可以比较响应时间。例如,使用 Amazon EC2 扩展不同级别的并发请求时,使用 2 和 5 个实例扩展并发访问可以减少平均响应时间。在 50 到 60 个并发请求后,如果平均响应时间超过 4 秒,“2 个实例”和“5 个实例”组将启动一个新实例。由于启动 CLH 需要时间,当并发数为 80 时,平均时间开始减少。

4. 使用 Climate@Home 进行数据和计算强度测试

4.1 Climate@Home 计算要求

Climate@Home 项目旨在利用公民贡献者的计算资源创建一个用于大规模气候建模和模拟的虚拟超级计算机。选择 ModelE 作为气候模型,启用串行处理模式时,执行该模型的最低硬件要求相对较低,一台配备 1.5+ GHz 速度的一个 CPU 核心和 1G RAM 的 Linux 机器即可满足最低计算要求。此外,还需要考虑机器提供的初始数据存储容量,因为模型虽然只占用几兆字节的空间,但可能会产生大量输出。因此,云实例应分配足够的硬盘空间用于基本安装,包括模型、输入数据和模型输出。

4.2 测试设计

该测试的目的是展示不同云服务如何支持气候建模,具体分解为以下三个任务:
1. 确定具有成本效益的实例硬件配置 :通过比较不同硬件配置的虚拟实例执行模型运行的时间成本,确定具有成本效益的硬件配置。由于 ModelE 是基于 Linux 的应用程序,因此仅使用 Amazon EC2 或 Nebula(支持 Linux 实例)进行比较。创建一组具有不同 CPU 核心数和可比 RAM 的示例实例,以检查云实例的配置如何影响模型运行的执行时间。
2. 评估虚拟机实例的稳定性和可靠性 :通过记录多次运行的总失败次数和平均执行时间,评估虚拟机实例的稳定性和可靠性。在每个实例上执行多个具有不同模拟时间段(例如,一天、一个月)的模型运行。
3. 比较基于云的虚拟机和物理机的性能 :创建与物理机具有相同硬件配置的虚拟机实例,在虚拟机实例和物理机上执行相同的模型运行,比较它们的性能。

4.3 测试工作流程

graph LR
    A[配置计算环境] --> B[配置测试环境]
    B --> C[使用 Linux 脚本在所有机器上进行多次运行测试]
    C --> D[收集和分析日志文件]
    D --> E[清理和释放实例]

具体步骤如下:
1. 配置计算环境 :考虑不同模型运行的计算要求和可用资源,编译一份硬件配置列表,并根据这些配置创建实例。物理机配备 8 核 CPU 和 8G RAM,相应地,至少有一个实例应具有相同的硬件配置,其他实例的 CPU 配置可以是 1 核、2 核和 4 核。
2. 配置测试环境 :为所有机器选择相同类型的操作系统(OS),以最小化不同 OS 对测试结果的影响。操作系统还应满足编译 ModelE 的特殊要求(例如,gcc 版本)。在每台机器上正确安装和配置 ModelE,实例上的 ModelE 配置与物理机上的配置非常相似,但实例需要通过远程控制访问。
3. 使用 Linux 脚本在所有机器上进行多次运行测试 :共享脚本包含一个 Linux 程序,该程序不断修改 ModelE 配置文件中的模拟时间,然后触发模型模拟。脚本还控制模型模拟之间的睡眠时间,每次实验完成后重新启动模型执行以避免运行时错误。每个模型运行的状态和执行时间记录在日志文件中。以下是一个脚本示例:

#time:19491208
echo "Begin to run the model at " >logModel19491208.txt
cd decks
make setup RUN=E4M20one
cd ..
sleep 30 &
wait
date
sed -i 's/YEARE=1961,MONTHE=1,DATEE=1,HOURE=0/YEARE=1949,MONTHE=12,DATEE=8,HOURE=0/g' decks/E4M20one/I 
##replace simulation time here
date >>logModel19491208.txt
echo "----real start----" >>logModel19491208.txt
date >>logModel19491208.txt
time1=$(date +%s)
./exec/runE_new E4M20one -np 1
date >>logModel19491208.txt
echo "----real end-----" >>logModel19491208.txt
time2=$(date +%s)
echo "Model finished in: " $(($time2-$time1)) >>logModel19491208.txt
  1. 收集和分析日志文件 :由于日志文件分别存储在每个实例上,需要从每个实例收集日志文件,将文件从实例传输到计算机进行集成。
  2. 清理和释放实例 :测试完成后,关闭并妥善保存实例,以避免不必要的资源使用。

4.4 测试结果分析

虚拟机的配置包括 1 核、2 核、4 核和 8 核实例,具有可比的主内存。在每个实例上执行共享脚本后,每个模型运行的时间成本记录在带有每个模拟时间段结束时间标记的日志文件中。分析日志文件时,需要明确标记日志文件与机器配置的关联。

5. 使用沙尘暴预报进行云测试

5.1 沙尘暴预报计算要求

沙尘暴预报涉及模型输入和输出中的大量地球科学数据、密集的数据处理和计算。沙尘暴模拟的周期性现象需要多个计算资源并行执行模拟,以多次执行相同的密集计算。由于大量的数据交换和同步,CPU 和网络速度对模拟性能有显著影响。因此,用于沙尘暴预报的云虚拟机应具有快速的 CPU 速度和高带宽网络连接。

5.2 测试设计

将沙尘暴模型配置在本地高性能计算(HPC)集群和两个不同的云服务(Amazon EC2 和 NASA 的 Nebula)上。为了检查本地 HPC 集群和两个云服务的性能,设计了以下实验:
1. 不同服务的不同数量计算节点支持相同的沙尘暴模拟 :使用 Nebula、EC2 和 GMU HPC 集群的一个、两个、四个和八个计算节点测试相同的模拟任务。
2. 不同服务的相同计算资源支持不同的模拟任务 :使用两个计算节点在每个平台上运行七个模拟任务,检查不同平台的性能是否一致。
3. 超线程的影响 :超线程技术使单个物理处理器看起来像多个逻辑处理器,显著提高计算工作负载的性能。测试一个 EC2 实例在关闭和启用超线程功能前后的性能。

各计算服务的配置如下表所示:
| 配置 | EC2 4 | Nebula 4 | GMU HPC |
| — | — | — | — |
| CPU | 2.93 GHz | 2.8 GHz | 2.33 GHz |
| 处理器数量 | 2 | 2 | 2 |
| 每个节点的核心数 | 8 | 8 | 8 |
| 是否支持超线程 | 是(总共 16 个 CPU 核心) | 否 | 否 |
| 总内存 | 23 GB | 16 GB | 16 GB |
| 网络带宽 | 10 Gbps | 10 Gbps | 1 Gpbs |
| 虚拟化 | 裸机虚拟化 | 半虚拟化 | N/A |
| 资源安排策略 | 在较近的物理机器内分组 VMs | N/A | N/A |

5.3 测试工作流程

5.3.1 不同数量计算节点支持相同沙尘暴模拟的测试
graph LR
    A[为云平台构建图像并在本地集群上设置沙尘暴环境] --> B[准备测试脚本]
    B --> C[在 EC2 和 Nebula 平台上启动相同数量的 VMs]
    C --> D[配置云平台集群]
    D --> E[将测试脚本传输到 EC2、Nebula 和本地集群的主节点]
    E --> F[在每个平台上运行测试脚本]
    F --> G[检查和分析测试结果]
    G --> H[在 EC2 和 Nebula 平台上添加两个更多的 VMs,在本地集群上使用四个节点进行测试]
    H --> I[在 EC2 和 Nebula 平台上添加四个更多的 VMs,在本地集群上使用八个节点进行测试]
    I --> J[回收 VMs]

具体步骤如下:
1. 为云服务(EC2 和 Nebula)构建沙尘暴模型环境图像,并在本地 HPC 集群上设置沙尘暴环境 :构建本地 HPC 集群环境应遵循相同的程序,但不需要构建图像。
2. 编写用于运行模型和记录性能的测试 shell 脚本

#!/bin/sh
## usage: ./run_test.sh [test platform] [VM numbers]
platform=$1
vms=$2
## Run model and record time
cd /model_ directory/model
startTime='date +%s%N'
./run_model.sh
endTime='date +%s%N'
echo 'expr \( $endTime - $startTime \) / 1000000'
## compress and copy model output data back to repository
tar zcvf $platform.test.$ vms.tar.gz modeloutput
scp $platform.test.$ vms.tar.gz root@199.26.xxx.xxx:/state/partition1/
  1. 在 EC2 和 Nebula 平台上启动相同数量的实例 :根据步骤 1 创建的图像,消费者可以启动不同数量的实例,首先测试两个实例的性能。
  2. 配置云平台 :确保 MPICH2 在 VMs 上正常工作。
  3. 将测试脚本传输到 EC2、Nebula 和本地 HPC 集群的头节点 :将步骤 2 中编写的测试脚本复制到每个平台的头节点。
  4. 在每个平台上运行测试脚本 :如果脚本文件名为 run_test.sh,可以使用以下命令在 EC2 平台上运行两个实例的脚本:
[root@headnode~] chmod a+x run_test.sh
[root@headnode~] ./run_test.sh EC2 2VMs
  1. 检查每个平台的结果并分析结果 :由于模型在多个资源上运行,资源之间的网络通信有时可能会崩溃。因此,消费者应登录头节点,每 1 到 2 小时检查进度和模型输出,以确保模型正常运行。
  2. 在 EC2 和 Nebula 平台上添加两个更多的实例,并使用四个节点测试性能 :在两个实例的实验组完成后,启动另外两个实例,为 EC2 和 Nebula 形成一个四节点 HPC 集群,并向本地 HPC 集群添加两个服务器。
  3. 在 EC2 和 Nebula 平台上添加四个更多的实例,并使用八个节点测试性能 :重复步骤 8,构建八个实例并再次运行测试。
  4. 回收实例 :测试完成后,关闭并释放实例以供其他应用使用。
5.3.2 相同计算资源支持不同模拟任务的测试

测试过程与上述步骤类似,包括步骤 1 到 7。消费者可以启动任意数量的实例(例如,一个、两个或四个)来测试不同问题规模的模拟。

5.3.3 超线程技术测试

默认情况下,所有 EC2 实例都启用了超线程。可以使用以下命令禁用 EC2 实例的超线程:

for cpunum in $(
    cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
    cut -s -d, -f2- | tr ',' '\n' | sort -un); do
    echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
done

5.4 测试结果分析

典型的测试结果显示了不同进程数量下的模型运行信息,包括测试类型、模型运行目录、开始时间、完成时间等。通过处理测试文件输出,可以计算和分析使用 EC2 云服务的两个实例和不同进程数量进行三小时和 2.3 * 3.5 度模型预报的执行时间。通过组合不同的测试输出文件,可以进行更复杂的分析。

6. 总结

地球科学应用可能是数据、计算、并发和时空密集型的。通过使用 CLH、Climate@Home 和沙尘暴预报这三个地球科学应用,可以测试不同云服务的就绪性。文中介绍的测试方法、经验和脚本可用于测试其他云服务。

7. 问题探讨

  1. 地球科学应用的计算特征是什么?
    地球科学应用具有数据密集、计算密集、并发密集和时空密集等特征。例如,沙尘暴预报涉及大量地球科学数据的处理和计算,且需要在不同时间和空间进行模拟;Climate@Home 项目需要处理大规模的气候建模和模拟数据。
  2. 举例说明如何测试云应用响应并发强度的能力。
    使用 GEOSS Clearinghouse (CLH) 进行并发强度测试。通过并发搜索请求矩阵测试和负载平衡与可扩展性测试来比较不同云服务支持并发请求的能力。在并发搜索请求矩阵测试中,在四个计算服务上运行 CLH,从一个服务向其他服务发出并发请求,使用 Apache JMeter 测试性能;负载平衡和可扩展性测试则比较不同数量实例下的并发性能以及云服务动态扩展实例时的性能变化。
  3. 举例说明如何测试云应用响应数据强度的能力。
    使用 Climate@Home 进行数据和计算强度测试。通过比较不同硬件配置的虚拟机实例执行模型运行的时间成本,评估虚拟机实例的稳定性和可靠性,以及比较基于云的虚拟机和物理机的性能,来测试云服务支持气候建模时对数据强度的响应能力。
  4. 举例说明如何测试云应用响应计算强度的能力。
    同样在 Climate@Home 测试中,由于模型运行需要进行大量的计算,通过在不同硬件配置的实例上执行多次模型运行,记录执行时间和失败次数等,来测试云应用响应计算强度的能力。在沙尘暴预报测试中,多个计算资源并行执行模拟任务,也能体现对计算强度的测试。
  5. 使用沙尘暴模拟应用可以测试云托管应用的哪些能力?
    可以测试云托管应用在处理大数据量(模型输入和输出的大量地球科学数据)、密集计算(多次执行相同的密集计算)、资源并行处理(多个计算节点并行执行模拟)以及网络通信(大量数据交换和同步对网络的要求)等方面的能力。还可以测试超线程技术对性能的影响。
  6. 文中用于测试云服务就绪性的通用工具是什么?
    文中使用的通用工具包括 Apache JMeter 用于测试并发请求性能,Linux 脚本用于控制模型运行和记录执行时间,以及相关的配置文件和可扩展性文件用于设置负载平衡和自动扩展等。
  7. 阅读相关结果论文并描述结果,讨论结果的动态变化。
    通过对不同云服务在地球科学应用中的测试结果分析,不同云服务在并发强度、数据和计算强度等方面表现不同。例如,在并发强度测试中,使用多个实例进行扩展可以减少平均响应时间;在 Climate@Home 测试中,不同硬件配置的实例执行模型运行的时间成本不同。结果的动态变化可能受到多种因素影响,如网络状况、硬件资源的使用情况、并发请求的模式等。随着并发请求数量的增加,云服务可能需要动态扩展实例以满足需求,若扩展不及时可能导致响应时间增加;网络带宽不足可能影响数据传输速度,进而影响模型的执行时间。

7. 问题探讨(续)

  1. 地球科学应用的计算特征是什么?
    地球科学应用具有数据密集、计算密集、并发密集和时空密集等特征。例如,沙尘暴预报涉及大量地球科学数据的处理和计算,且需要在不同时间和空间进行模拟;Climate@Home 项目需要处理大规模的气候建模和模拟数据。
  2. 举例说明如何测试云应用响应并发强度的能力。
    使用 GEOSS Clearinghouse (CLH) 进行并发强度测试。通过并发搜索请求矩阵测试和负载平衡与可扩展性测试来比较不同云服务支持并发请求的能力。在并发搜索请求矩阵测试中,在四个计算服务上运行 CLH,从一个服务向其他服务发出并发请求,使用 Apache JMeter 测试性能;负载平衡和可扩展性测试则比较不同数量实例下的并发性能以及云服务动态扩展实例时的性能变化。
  3. 举例说明如何测试云应用响应数据强度的能力。
    使用 Climate@Home 进行数据和计算强度测试。通过比较不同硬件配置的虚拟机实例执行模型运行的时间成本,评估虚拟机实例的稳定性和可靠性,以及比较基于云的虚拟机和物理机的性能,来测试云服务支持气候建模时对数据强度的响应能力。
  4. 举例说明如何测试云应用响应计算强度的能力。
    同样在 Climate@Home 测试中,由于模型运行需要进行大量的计算,通过在不同硬件配置的实例上执行多次模型运行,记录执行时间和失败次数等,来测试云应用响应计算强度的能力。在沙尘暴预报测试中,多个计算资源并行执行模拟任务,也能体现对计算强度的测试。
  5. 使用沙尘暴模拟应用可以测试云托管应用的哪些能力?
    可以测试云托管应用在处理大数据量(模型输入和输出的大量地球科学数据)、密集计算(多次执行相同的密集计算)、资源并行处理(多个计算节点并行执行模拟)以及网络通信(大量数据交换和同步对网络的要求)等方面的能力。还可以测试超线程技术对性能的影响。
  6. 文中用于测试云服务就绪性的通用工具是什么?
    文中使用的通用工具包括 Apache JMeter 用于测试并发请求性能,Linux 脚本用于控制模型运行和记录执行时间,以及相关的配置文件和可扩展性文件用于设置负载平衡和自动扩展等。
  7. 阅读相关结果论文并描述结果,讨论结果的动态变化。
    通过对不同云服务在地球科学应用中的测试结果分析,不同云服务在并发强度、数据和计算强度等方面表现不同。例如,在并发强度测试中,使用多个实例进行扩展可以减少平均响应时间;在 Climate@Home 测试中,不同硬件配置的实例执行模型运行的时间成本不同。结果的动态变化可能受到多种因素影响,如网络状况、硬件资源的使用情况、并发请求的模式等。随着并发请求数量的增加,云服务可能需要动态扩展实例以满足需求,若扩展不及时可能导致响应时间增加;网络带宽不足可能影响数据传输速度,进而影响模型的执行时间。

8. 测试方法总结与建议

8.1 测试方法总结
测试类型 测试应用 测试目的 主要测试步骤
并发强度测试 GEOSS Clearinghouse (CLH) 比较不同云服务支持并发请求的能力 1. 安装 CLH;2. 设置 CSW GetRecords 请求;3. 设置 JMeter 测试计划;4. 运行 JMeter;5. 分析结果;可进行负载平衡和自动扩展测试
数据和计算强度测试 Climate@Home 展示不同云服务支持气候建模的能力 1. 配置计算环境;2. 配置测试环境;3. 使用 Linux 脚本进行多次运行测试;4. 收集和分析日志文件;5. 清理和释放实例
综合测试 沙尘暴预报 检查本地 HPC 集群和云服务的性能 1. 构建环境图像和设置环境;2. 编写测试脚本;3. 启动实例;4. 配置云平台;5. 传输脚本;6. 运行脚本;7. 检查和分析结果;可进行不同节点数量和不同模拟任务测试以及超线程测试
8.2 建议
  • 硬件配置选择 :在进行测试前,根据应用的计算和数据要求,合理选择云服务的硬件配置。例如,对于计算密集型的沙尘暴预报应用,选择 CPU 速度快、网络带宽高的云实例。
  • 资源监控与调整 :在测试过程中,密切监控资源使用情况,如 CPU 利用率、内存使用等。根据监控结果,及时调整负载平衡和自动扩展策略,以确保云服务的性能稳定。
  • 多次测试与结果分析 :进行多次测试,以获得更准确的测试结果。对测试结果进行深入分析,找出云服务的性能瓶颈和优势,为后续的优化和选择提供依据。

9. 未来展望

随着地球科学应用的不断发展和云服务技术的不断进步,云服务在地球科学领域的应用将更加广泛。未来的测试可能需要考虑更多的因素,如云服务的安全性、数据隐私保护等。同时,随着人工智能和机器学习技术的融入,地球科学模型的复杂度和计算量将进一步增加,对云服务的性能和可扩展性提出更高的要求。因此,持续改进和优化云服务的测试方法,以适应不断变化的需求,将是未来的重要研究方向。

10. 结语

通过对不同云服务在地球科学应用中的测试,我们可以更好地了解云服务的性能和适用性。合理选择和使用云服务,可以提高地球科学应用的效率和质量。希望本文介绍的测试方法和经验能够为相关领域的研究和实践提供参考,促进云服务在地球科学领域的更好应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值