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

VTD Scale是建立在一个独立于领域的基础上的,这个基础被称为Scale。

Scale的基础是只关注工作节点功能的执行,而不直接支持任何特定的领域(如VTD)。

有些工作节点的功能,如下载器(Downloader)和充填器(Applicator),它们被视为跨越所有领域,因此被包含在Scale基础之中。

技术

VTD Scale依赖于几项开源技术。

关键技术

  1. Spark用于以下功能:
    1.1 分布式处理引擎,能够管理成千上万的并行工作节点。
    1.2 数据帧可以作为内存中的SQL数据库公开。这样支持数据分析。
  2. Livy用于促进Spark的并发性。
  3. Kubernetes用于容器编排。
  4. Jupyter用于集群内的交互式Python执行,并且提供一系列的教程。

可选技术

  1. Hadoop分布式文件系统(HDFS)用于数据帧和结果文件的中间存储。长期存储最好使用AWS S3或Azure Storage。
  2. Elastic Kibana Logstash(ELK)用于日志记录和度量。
  3. 应用程序性能监控(APM)用于监控性能。
  1. Git用于演示仿真输入数据如何利用版本控制系统(VCS)。
  2. Superset用于演示如何将商业智能网络应用集成至Scale。
  3. Jenkins用于演示如何将CI/CD管线集成至Scale。

部署图

上图显示的是一个简化的部署图。下文是一个典型的互动过程的执行流程。

  1. 所有东西都在Kubernetes内部管理。
  2. 从左边开始,用户将与Jupyter交互,以便于部署工作容器。
    2.1 使用公有云(Azure或AWS)的API,向Kubernetes集群添加新节点。
    2.2 使用Kubernetes的API,创建一个新的状态集(StatefulSet)[1]
  3. 使用Jupyter,用户提交一个Spark作业。
  4. 这个作业会被发送至Spark主节点,以便于分配资源。
  5. 这个作业被分成若干部分,并发送给多个Scale工作舱。大写字母“N”表示有可能用到大量的机器。
  6. Spark工作节点会协调所有的工作容器。
  7. 所有的Scale工作容器都包含一个小型的Scale程序库。需要这个API才能使Spark工作节点连接至Scale工作容器。
  8. Spark工作节点会迭代运行每个仿真任务。
  9. 大多数作业的第一步是向下载器发送任务。下载器将从Git或HDFS中拉取任务数据,然后复制到工作舱的短期本地存储中。
  10. 下一步是填充器(Applicator)的工作。这将从本地存储中读取泛化XML文件,然后创建具体的仿真输入文件。
  11. 在启动VTD仿真之前,每个VTD边车(Sidecar)[2]都需要进行“预热”。为边车提供的输入与它们的主工作节点相同。
  12. VTD仿真的工作节点将读取具体的仿真输入文件,连接至工作舱的GPU(如果需要的话),然后等待VTD边车的连接。然后,仿真开始运行。结果和日志会写入临时文件。
  13. 处理器读取结果文件,然后返回关键结果(例如:安全系数)。
  14. 如果经过配置,Spark工作节点将把文件从本地存储转移至HDFS。
  15. 还可以将Spark数据帧保存至HDFS。数据帧包含前一步创建的文件的引用路径。

Kubernetes节点分组

Scale节点被划分为若干个节点分组。每个节点分组都有一个特定的机器类型(如果:cpu、memory、disk、gpu/no-gpu等等)。

节点分组用途何时创建AWS机型Azure机型
systemKubernetes核心服务(例如:caredns、etcd等等)安装期间t3a.large[3]Standard_DS2_v2[4]
coreScale核心服务(例如:REST服务、Jupyter、Spark主节点)安装期间t3a.largeStandard_DS2_v2
hdfsHadoop分布式文件系统的相关节点安装期间t3a.largeStandard_DS2_v2
loggingElasticSearch、Kibana、Logstash(ELK)和应用性能监控(APM)安装期间t3a.largeStandard_DS2_v2
cpu

不需要gpu的工作节点

每个节点包含1个工作节点

安装之后t3a.largeStandard_DS2_v2
gpu

需要gpu的工作节点

每个节点包含2个工作节点

安装之后p2.xlarge[5]Standard_NC6_Promo[6]

只有cpu和gpu节点分组是可伸缩的。

容器清单

此处列出的容器和Scale运行在相同的Kubernetes命名空间中(例如:default)。

kube-system、kube-noe-lease、kube-public等排除在外。

system节点分组负责管理这些工作负载。

容器

节点分组容器镜像描述
corescale-admindocker.io/mscsoftware/scale-adminWeb服务器,所有服务的快速启动面板
corescale-collectordocker.io/mscsoftware/scale-collectorKafka生产者/消费者,用于收集工作节点的使用情况
corescale-servicesdocker.io/mscsoftware/scale-services动态伸缩部署,连接至公有云和Kubernetes API
corespark-masterdocker.io/mscsoftware/scale-sparkSpark独立任务调度器
corejupyterdocker.io/mscsoftware/scale-spark使用Scale API的交互式Python工具
corejenkinsdocker.io/mscsoftware/scale-jenkins使用Scale API的CI/CD框架
coreingress-controllerquay.io/kubernetes-ingress-controller/nginx-ingress-controller:master面向所有外部服务的NGINX反向代理
coresupersetdocker.io/amancevice/superset:0.37.1BI演示器
coregitdocker.io/mscsoftware/scale-gitGit服务器,包含demo数据
coregiteadocker.io/gitea/gitea:1.8.3Git网络服务器,用于演示CI/CD工作流
corescale-kafkadocker.io/bitnami/kafka:2.5.0-debian-10-r16scale-collector的持久化存储
corescale-zookeeperdocker.io/bitnami/zookeeper:3.6.0-debian-10-r58scale-collector的持久化存储
hdfshdfs-nndocker.io/mscsoftware/scale-sparkHDFS的名称节点
hdfshdfs-dndocker.io/mscsoftware/scale-sparkHDFS的数据节点(带有复制)
loggingapmdocker.elastic.co/apm/apm-server:7.5.1应用性能监控
loggingcuratordocker.io/python:3.6-alpine清理日志索引
loggingelastic-searchdocker.elastic.co/elasticsearch/elasticsearch:7.5.1日志、指标、性能数据的持久化存储
loggingkibanadocker.elastic.co/kibana/kibana:7.5.1可视化弹性搜索数据的Web前端
loggingkube-state-metricsquay.io/coreos/kube-state-metrics:1.8.0收集Kubernetes指标
workerdownloaderdocker.io/mscsoftware/scale-worker-downloader从HDFS或Git下载文件至本地临时存储
workerapplicatordocker.io/mscsoftware/scale-worker-applicator将模板化输入转换为具体输入
workersimulatordocker.io/mscsoftware/scale-worker-vtd-simulator基于CPU的VTD仿真
workersimulatordocker.io/mscsoftware/scale-worker-vtd-simulator-gpu基于GPU的VTD仿真
workersidecardocker.io/mscsoftware/scale-worker-vtd-sidecar支持CPU/GPU的VTD仿真,并且将引用客户软件
workerprocessordocker.io/mscsoftware/scale-worker-vtd-processor从VTD仿真结果文件中提取关键结果
workersamplerdocker.io/mscsoftware/scale-worker-sampler支持闭环重新采样
workerspark-executordocker.io/mscsoftware/scale-spark协调发送给工作节点的任务,连接至Spark主节点
allmetric-beatdocker.elastic.co/beats/metricbeat:7.5.1

(守护程序集)

收集节点指标,然后发送给ElasticSearch

allfile-beatdocker.elastic.co/beats/filebeat:7.5.1

(守护程序集)

收集日志,然后发送给LogStash

序列图

下图是关键的执行序列。

安装

部署

带有边车的具体执行

非阻塞式作业提交

结果流/小批量

注释

[1] Stateful的用途:K8S用来管理有状态服务,可以参考:https://blog.csdn.net/sanpangouba/article/details/83417221

[2] 边车(SideCar)设计模式:VTD的容器化辅助服务,包括传感器、控制器和物理车辆仿真器,参考:http://vires.mscsoftware.com/features/

     设计思想可以参考:https://blog.csdn.net/doctor_who2004/article/details/103624807

[3] Azure Standard_DS2_v2机型:https://docs.microsoft.com/en-us/azure/virtual-machines/dv2-dsv2-series

[4] AWS t3a.large机型:https://aws.amazon.com/cn/blogs/aws/now-available-amd-epyc-powered-amazon-ec2-t3a-instances/

[5] Azure Standard_NC6_Promo机型:https://docs.microsoft.com/en-us/azure/virtual-machines/nc-series

[6] AWS p2.xlarge机型:https://aws.amazon.com/cn/blogs/aws/new-p2-instance-type-for-amazon-ec2-up-to-16-gpus/

Write a comment...