微服务架构 VSOA
本节介绍翼辉任务关键型云原生的微服务架构 VSOA,以及 VSOA 与 HTTP 在功能和性能方面的对比情况。
什么是 VSOA
VSOA(Vehicle SOA)是翼辉为了解决任务关键型系统不能适用当前微服务通信架构问题而设计的⼀个轻量级适用于任务关键领域的微服务通信架构,以方便开发者构建大型分布式松耦合软件系统,且支持并行开发。
其主要特点为支持多种编程语言、多 CPU 架构环境与多操作系统平台,同时不依赖任何第三方库,架构简洁、资源占用小、服务响应速度快。使用者无需单独学习 IDL(Interface description language)语言,具有开发成本低、开发效率高等特点。考虑到任务关键型场景的多样性和碎片化特点,VSOA 汇集订阅/发布、RPC、高带宽数据流以及自定义数据报等功能于一体,可满足任何分布式应用模型;同时提供非入侵式仿真测试工具与便捷的开发环境,让开发者在享受云计算先进的开发体验以及高效的生产效率的同时,继续保持任务关键领域对业务功能和性能的高可靠需求。
VSOA 功能特性
- 支持统⼀的 URL 资源标记
- 支持 URL 匹配订阅和发布模型
- 支持实时远程过程调用
- 支持并行多命令序列
- 支持可靠与快速数据发布与数据包
- 支持多路全双工高速并行数据流
- 支持网络 QoS 控制
- 轻松实现服务器容错设计
- 支持多种编程语言绑定
- 支持 IPv4/IPv6 双栈
关于 VSOA 功能特性的详细介绍请参见 VSOA 微服务架构。
VSOA 对比 HTTP
目前开源方案中没有统一的微服务治理框架,但通常可使用 HTTP、MQTT、gRPC、WebSocket 等组合进行开发。
下面以嵌入式应用场景为例,从功能和性能维度对 VSOA 和 HTTP 进行简要对比。
对比环境:
i5-10505 CPU@3.20GHz 32GB 内存的物理主机。
功能对比
对比项 | VSOA | HTTP(微服务框架通用协议) |
---|---|---|
C/C++ 开发成本 | 低 | 高 |
综合运维成本 | 低 | 高 |
实时性 | 高 | 低 |
多编程语言支持 | 支持 | 支持 |
双工数据流 | 全双工 | 半双工 |
基于 URL 的业务路由 | 支持 | 需要第三方服务网格软件 |
订阅发布 | 支持 | 不支持 |
服务定位 | 内置解析服务 | K8S DNS |
网络 QoS | 支持 | 不支持 |
安全认证 | ASIL-D ISO 26262 认证 | 无 |
性能对比
应用资源消耗测试
- C 应用资源消耗测试
对比项 | VSOA 应用 | HTTP 应用 |
---|---|---|
C 内存消耗 | 1.4 MB | 25 MB(基于 facil 框架) |
C 程序的大小 | 159 KB | 3 MB(基于 facil 框架) |
说明:
facil 框架是一套开源 C Web 应用框架。
- JavaScript 应用资源消耗测试
对比项 | VSOA Client | VSOA Server | HTTP Client | HTTP Server |
---|---|---|---|---|
内存消耗 | 78 MB | 65 MB | 95 MB | 84 MB |
程序包安装大小 | 1.6 KB | 100 KB | 1.9 KB | 4.3 MB |
1 秒请求次数 | 17585 次 | - | 1094 次 | - |
1000 次请求总用时 | 56.87 ms | - | 914 ms | - |
1000 次请求平均用时 | 0.057 ms | - | 0.914 ms | - |
实时性能测试
- VSOA JavaScript 实时性能测试(对比 IPtables 路由)
对比项 | VSOA 应用(Host Network) | Kubernets HTTP(IPtables 路由) |
---|---|---|
最大用时(毫秒) | 95 | 97 |
最小用时(毫秒) | < 1 | < 1 |
平均用时(毫秒) | 0.105 | 0.773 |
中位数用时(毫秒) | < 1 | 1 |
方差(稳定性) | 0.105 | 1.258 |
客户端容器 CPU 用量 | 6.6 % | 27.2 % |
客户端容器内存用量 | 107.596 MB | 150.896 MB |
服务端容器 CPU 用量 | 5.6 % | 12.60 % |
服务端容器内存用量 | 53.888 MB | 87.17 MB |
DNS 服务 CPU 用量 | - | 13 % |
DNS 服务内存用量 | - | 52.8 MB |
- VSOA C 实时性能测试
项目 | 具体内容 | 性能数据 |
---|---|---|
RPC | 实时性能 | 执行 1000 次,最大: 45 us,最小: 29 us,平均: 36 us |
RPC | 速度性能 | 每秒调用次数 27700 左右 |
发布订阅 | 实时性能 | 执行 1000 次,最大: 45 us,最小: 30 us,平均: 38 us |
发布订阅 | 速度性能 | 每秒调用次数 27700 左右 |
数据报常规通道 | 单向收发速度 | 728 Mbps |
数据报快速通道 | 单向收发速度 | 712 Mbps |
Stream | 双向通信数据流 | 897 Mbps |
VSOA JavaScript 实时性能测试(对比 VxLAN 路由)
对比环境为 3 节点 2C4G 2.7Ghz 阿里云虚拟主机,测试详情如下:
载荷大小:32字节 JSON + 4K Buffer
测试压力:500 rps (每秒 500 次请求)
测试请求总数:10 万次
对比项 | VSOA 应用 (Host Network) | Kubernets HTTP (VxLAN) |
---|---|---|
最大用时(毫秒) | 9 | 999 |
最小用时(毫秒) | < 1 | < 1 |
平均用时(毫秒) | 0.3163 | 888.7137 |
中位数用时(毫秒) | < 1 | 2 |
方差(稳定性) | 0.418 | 4078141.668 |
客户端容器 CPU 用量 | 4.51 % | 31.07 % |
客户端容器内存用量 | 72.61 MB | 82.99 MB |
服务端容器 CPU 用量 | 0.00 % | 27.60 % |
服务端容器内存用量 | 14.89 MB | 53.8 MB |
说明:
HTTP 服务中途出现过 k8s cluster.local 解析错误。