VTD Scale是建立在几个基础概念之上的。
关键特性
- 具有一个自动部署到Kubernetes的安装程序(从Dockerhub拉取所有软件)。
同时支持Azure和AWS。 - 利用HTTPS客户端证书和IP白名单进行安全的互联网访问控制。
- 具有一个管理门户网站,包含所有服务和文件的快捷面板。
- 具有八个交互式Python教程笔记本,涵盖的主题包括:
- 工作节点部署(部署、伸缩、解除部署)
- 具体研究
- 开环研究
- 闭环研究
- 基于过去研究的数据分析
- 使用CPU或GPU的VTD仿真
- 使用边车的VTD仿真
- 可伸缩性测试
- 具有一个泛化组件,能够将任何文本文件模板化,并且在Scale研究中使用模板。
- 演示工具的本意是让客户自行扩展:
- 能够提取安全和舒适因数的后处理器
- 能够本地重采样以支持闭环的采样器
- 使用Jenkins的CI/CD
- 使用Superset的BI
伸缩级别
集群
Scale被安装到一个集群中。
Kubernetes是集群管理器。
Kubernetes可能来自AWS或Azure。
多个Scale集群之间的协调是可以想象的,但目前还不支持。
Scale = 1
服务器
集群包含一组机器,有可能是虚拟机。
服务器的机型和配置(例如:memory、cpu和gpu)将根据提供给它的工作负载而变化。
其中一些服务器将支持工作节点,而其他服务器将支持Scale核心服务。
可以在Scale中动态地添加和移除支持工作节点的服务器。
支持Scale核心服务的服务器是固定的,只能由管理员使用集群和公有云的API进行修改。
有两种方式可以实现伸缩服务器:
- 第一种是横向伸缩 — 添加更多的服务器。
- 第二种是纵向伸缩 — 使用配置更好的服务器。
Scale ~ 1000
工作节点部署
包含在M台配置完全相同的服务器上运行的N个工作节点分组。
根据配置,M = N / sizeFactor
,其中sizeFactor >= 1,取决于服务器性能和预期工作负载的对比。
此处的伸缩取决于有多少套不同的软件需要同时部署。
例如,如果我们想同时运行一个基于CPU的研究和一个基于GPU的研究,那么至少需要部署两个工作节点。
Scale ~ 10
工作节点分组
一组正在运行的工作容器,它们正在等待任务的运行。
此外,有一个容器专门用于协调工作容器之间要做的所有工作。
如果目标是运行10K个并行仿真,那么至少需要10K个工作节点分组。
Scale = 10K
还应该提及的是,工作节点分组的复杂性是伸缩的另一个方面。
当涉及到联合仿真和协作时,工作节点分组可以封装重大的复杂度。
工作节点分组可以由单个仿真器组成,也可以包含在联合仿真中运行的多个仿真代理。
这种缩放可以在快速但低保真和高保真但慢速之间进行权衡。
工作节点容器
由工作节点镜像定义,这个镜像存储在Docker注册中心之中。
工作节点容器是一个REST服务,它封装一个或多个工作节点功能。
Scale ~ 5
工作节点功能
这是Scale中工作的原子单位。
工作节点功能接受一组特定的输入,然后返回一个输出。
例如:VTD仿真器、VTD后处理器、采样器。
最好的做法是,在一个工作节点容器内只有一个工作节点功能。
Scale ~ 1
部署工作节点镜像将创建在节点(Node)上运行的工作舱(Worker POD)。
scale.service API可以自动创建、添加和删除工作舱。
Scale泛化
Scale泛化管理仿真输入的输入参数。
通常,用户会从一个具体的仿真输入开始。
这将是在Scale之外创建的预先存在的工具。
泛化组件可用于创建一个“空间xml”文件。
空间xml文件包含以下信息:
- 对基线(通常是具体的)仿真输入的引用
- 参数列表。每个参数都包含以下内容:
- 名称(ego_speed、road_width、player2_color)
- 分组(例如:场景或被测系统(SUT))
- 类型(例如:字符串、浮点数、整数)
- 随机变量细节(离散、均匀、正太、最大值、最小值等等)
- 填充器(Applicator)列表。填充器定义如何应用一个参数的值,以及如何更新一个或多个仿真输入文件。支持两种填充器类型:
- Mustache模板使用一个标准的模板引擎
- 基于逻辑的XPath
- 约束列表。约束会限制一个或多个参数的变化(例如:parameter1 + parameter2 < 1.0)。
Scale工作节点
Scale工作节点是Scale内完成工作的原子单元。
它具有以下特性:
- 能够包装那些没有明确支持“云原生”的传统应用程序。
- 用于声明输入和输出的标准接口。
Scale提供将工作节点连接在一起的功能,可以组成简单和复杂的链路。
Scale工作节点功能是一个特定的功能,可以接受Scale上下文对象和一个或多个输入。
这个功能同步运行,并且返回一个输出。
输入和输出类型必须被声明,并且可被序列化。
Scale工作节点镜像是一个Docker镜像,用于封装一个或多个工作节点功能。
Scale工作节点容器是一个在特定服务器上运行的Scale工作节点镜像,可以随时使用。
Spark和Scale
Scale建立在Spark的基础之上。
数据帧
对于Scale来说,Spark数据帧管理数据。
数据帧是表格。
各个列都有标签和数据类型(例如:string、double、structure、map等等)。
数据帧不能修改。
它们是不可改变的。
在高层次上,一个工作节点接受一个输入数据帧,然后创建一个新的数据帧。
最简单的整合工作节点的形式是使用Spark的withColumn
。
例如:
dataframe_results = dataframe_inputs.withColumn('input_column', scaleUDF('myworker'))
scaleUDF
函数是一个连接,用来连接一个名为myworker
的工作节点容器。
有向无环图
有向无环图(DAG)是Spark将数据帧连接在一起形成一个加工流程的方式。
Spark会惰性评估DAG。
这就意味着工作节点功能只有在某些特定结果被要求时才会被调用。
这种方法使得Spark能够优化执行。
DAG不是Spark独有的。
在定义任务的批处理执行时,它们被用在很多地方。
例如:
仿真DAG
VTD Scale专注于三个基本流程。
具体执行
仿真一个特定的场景,给定一个运行就绪的仿真输入。
开环执行
Simulate a predefined sample (list of parameter key/value pairs).
仿真一个预定义的样本(参数的键/值对列表)。
闭环执行
仿真基于先前结果产生的样本。这种循环可以执行任意多的次数。
Add Comment