VTD Scale是建立在一个独立于领域的基础上的,这个基础被称为Scale。
Scale的基础是只关注工作节点功能的执行,而不直接支持任何特定的领域(如VTD)。
有些工作节点的功能,如下载器(Downloader)和充填器(Applicator),它们被视为跨越所有领域,因此被包含在Scale基础之中。
技术
VTD Scale依赖于几项开源技术。
关键技术
- Spark用于以下功能:
1.1 分布式处理引擎,能够管理成千上万的并行工作节点。
1.2 数据帧可以作为内存中的SQL数据库公开。这样支持数据分析。 - Livy用于促进Spark的并发性。
- Kubernetes用于容器编排。
- Jupyter用于集群内的交互式Python执行,并且提供一系列的教程。
可选技术
- Hadoop分布式文件系统(HDFS)用于数据帧和结果文件的中间存储。长期存储最好使用AWS S3或Azure Storage。
- Elastic Kibana Logstash(ELK)用于日志记录和度量。
- 应用程序性能监控(APM)用于监控性能。
Demo相关技术
部署图
上图显示的是一个简化的部署图。下文是一个典型的互动过程的执行流程。
- 所有东西都在Kubernetes内部管理。
- 从左边开始,用户将与Jupyter交互,以便于部署工作容器。
2.1 使用公有云(Azure或AWS)的API,向Kubernetes集群添加新节点。
2.2 使用Kubernetes的API,创建一个新的状态集(StatefulSet)[1]。 - 使用Jupyter,用户提交一个Spark作业。
- 这个作业会被发送至Spark主节点,以便于分配资源。
- 这个作业被分成若干部分,并发送给多个Scale工作舱。大写字母“N”表示有可能用到大量的机器。
- Spark工作节点会协调所有的工作容器。
- 所有的Scale工作容器都包含一个小型的Scale程序库。需要这个API才能使Spark工作节点连接至Scale工作容器。
- Spark工作节点会迭代运行每个仿真任务。
- 大多数作业的第一步是向下载器发送任务。下载器将从Git或HDFS中拉取任务数据,然后复制到工作舱的短期本地存储中。
- 下一步是填充器(Applicator)的工作。这将从本地存储中读取泛化XML文件,然后创建具体的仿真输入文件。
- 在启动VTD仿真之前,每个VTD边车(Sidecar)[2]都需要进行“预热”。为边车提供的输入与它们的主工作节点相同。
- VTD仿真的工作节点将读取具体的仿真输入文件,连接至工作舱的GPU(如果需要的话),然后等待VTD边车的连接。然后,仿真开始运行。结果和日志会写入临时文件。
- 处理器读取结果文件,然后返回关键结果(例如:安全系数)。
- 如果经过配置,Spark工作节点将把文件从本地存储转移至HDFS。
- 还可以将Spark数据帧保存至HDFS。数据帧包含前一步创建的文件的引用路径。
Kubernetes节点分组
Scale节点被划分为若干个节点分组。每个节点分组都有一个特定的机器类型(如果:cpu、memory、disk、gpu/no-gpu等等)。
节点分组 | 用途 | 何时创建 | AWS机型 | Azure机型 |
---|---|---|---|---|
system | Kubernetes核心服务(例如:caredns、etcd等等) | 安装期间 | t3a.large[3] | Standard_DS2_v2[4] |
core | Scale核心服务(例如:REST服务、Jupyter、Spark主节点) | 安装期间 | t3a.large | Standard_DS2_v2 |
hdfs | Hadoop分布式文件系统的相关节点 | 安装期间 | t3a.large | Standard_DS2_v2 |
logging | ElasticSearch、Kibana、Logstash(ELK)和应用性能监控(APM) | 安装期间 | t3a.large | Standard_DS2_v2 |
cpu | 不需要gpu的工作节点 每个节点包含1个工作节点 | 安装之后 | t3a.large | Standard_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节点分组负责管理这些工作负载。
容器
节点分组 | 容器 | 镜像 | 描述 |
---|---|---|---|
core | scale-admin | docker.io/mscsoftware/scale-admin | Web服务器,所有服务的快速启动面板 |
core | scale-collector | docker.io/mscsoftware/scale-collector | Kafka生产者/消费者,用于收集工作节点的使用情况 |
core | scale-services | docker.io/mscsoftware/scale-services | 动态伸缩部署,连接至公有云和Kubernetes API |
core | spark-master | docker.io/mscsoftware/scale-spark | Spark独立任务调度器 |
core | jupyter | docker.io/mscsoftware/scale-spark | 使用Scale API的交互式Python工具 |
core | jenkins | docker.io/mscsoftware/scale-jenkins | 使用Scale API的CI/CD框架 |
core | ingress-controller | quay.io/kubernetes-ingress-controller/nginx-ingress-controller:master | 面向所有外部服务的NGINX反向代理 |
core | superset | docker.io/amancevice/superset:0.37.1 | BI演示器 |
core | git | docker.io/mscsoftware/scale-git | Git服务器,包含demo数据 |
core | gitea | docker.io/gitea/gitea:1.8.3 | Git网络服务器,用于演示CI/CD工作流 |
core | scale-kafka | docker.io/bitnami/kafka:2.5.0-debian-10-r16 | scale-collector的持久化存储 |
core | scale-zookeeper | docker.io/bitnami/zookeeper:3.6.0-debian-10-r58 | scale-collector的持久化存储 |
hdfs | hdfs-nn | docker.io/mscsoftware/scale-spark | HDFS的名称节点 |
hdfs | hdfs-dn | docker.io/mscsoftware/scale-spark | HDFS的数据节点(带有复制) |
logging | apm | docker.elastic.co/apm/apm-server:7.5.1 | 应用性能监控 |
logging | curator | docker.io/python:3.6-alpine | 清理日志索引 |
logging | elastic-search | docker.elastic.co/elasticsearch/elasticsearch:7.5.1 | 日志、指标、性能数据的持久化存储 |
logging | kibana | docker.elastic.co/kibana/kibana:7.5.1 | 可视化弹性搜索数据的Web前端 |
logging | kube-state-metrics | quay.io/coreos/kube-state-metrics:1.8.0 | 收集Kubernetes指标 |
worker | downloader | docker.io/mscsoftware/scale-worker-downloader | 从HDFS或Git下载文件至本地临时存储 |
worker | applicator | docker.io/mscsoftware/scale-worker-applicator | 将模板化输入转换为具体输入 |
worker | simulator | docker.io/mscsoftware/scale-worker-vtd-simulator | 基于CPU的VTD仿真 |
worker | simulator | docker.io/mscsoftware/scale-worker-vtd-simulator-gpu | 基于GPU的VTD仿真 |
worker | sidecar | docker.io/mscsoftware/scale-worker-vtd-sidecar | 支持CPU/GPU的VTD仿真,并且将引用客户软件 |
worker | processor | docker.io/mscsoftware/scale-worker-vtd-processor | 从VTD仿真结果文件中提取关键结果 |
worker | sampler | docker.io/mscsoftware/scale-worker-sampler | 支持闭环重新采样 |
worker | spark-executor | docker.io/mscsoftware/scale-spark | 协调发送给工作节点的任务,连接至Spark主节点 |
all | metric-beat | docker.elastic.co/beats/metricbeat:7.5.1 | (守护程序集) 收集节点指标,然后发送给ElasticSearch |
all | file-beat | docker.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/
Add Comment