Page tree
Skip to end of metadata
Go to start of metadata

VTD Scale是建立在几个基础概念之上的。

关键特性

  1. 具有一个自动部署到Kubernetes的安装程序(从Dockerhub拉取所有软件)。
    同时支持Azure和AWS。
  2. 利用HTTPS客户端证书和IP白名单进行安全的互联网访问控制。
  3. 具有一个管理门户网站,包含所有服务和文件的快捷面板。
  4. 具有八个交互式Python教程笔记本,涵盖的主题包括:
    • 工作节点部署(部署、伸缩、解除部署)
    • 具体研究
    • 开环研究
    • 闭环研究
    • 基于过去研究的数据分析
    • 使用CPU或GPU的VTD仿真
    • 使用边车的VTD仿真
    • 可伸缩性测试
  5. 具有一个泛化组件,能够将任何文本文件模板化,并且在Scale研究中使用模板。
  6. 演示工具的本意是让客户自行扩展:
    • 能够提取安全和舒适因数的后处理器
    • 能够本地重采样以支持闭环的采样器
    • 使用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文件包含以下信息:

  1. 对基线(通常是具体的)仿真输入的引用
  2. 参数列表。每个参数都包含以下内容:
    1. 名称(ego_speed、road_width、player2_color)
    2. 分组(例如:场景或被测系统(SUT))
    3. 类型(例如:字符串、浮点数、整数)
    4. 随机变量细节(离散、均匀、正太、最大值、最小值等等)
  3. 填充器(Applicator)列表。填充器定义如何应用一个参数的值,以及如何更新一个或多个仿真输入文件。支持两种填充器类型:
    1. Mustache模板使用一个标准的模板引擎
    2. 基于逻辑的XPath
  4. 约束列表。约束会限制一个或多个参数的变化(例如: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).

仿真一个预定义的样本(参数的键/值对列表)。

闭环执行

仿真基于先前结果产生的样本。这种循环可以执行任意多的次数。

Write a comment...