YoMo 技术笔记
2021.10.23
目标网址
https://github.com/yomorun/yomo-wasmedge-tensorflow
技术细节
yomo
- 边缘计算领域打造的低时延流式数据处理框架,构建可靠、安全的低时延实时计算应用,挖掘 5G 潜力,释放实时计算价值。
- QUIC 协议通讯:
- From Wiki:通用的传输层网络协议,由 Google 设计,在 Google 浏览器的基本所有连接中,超过一半的连接使用 QUIC。
- 快速 UDP 互联网连接 quick udp internal connection:用 UDP 在两个端点之间创建若干个多路连接来实现目标,有时候称呼为 TCP/2
- 2018 年 10 月,IETF 的 HTTP 工作组和 QUIC 工作组共同决定将 QUIC 上的 HTTP 映射称为 HTTP3,以提前使其成为全球标准。
- FRP(函数式响应式编程)
- Map reduce filter 进行响应式编程,通常用于 GUI、机器人、音乐
- 代表:React
- 可以用于流处理
- Yomo-source
- 物联网设备、智能设备产生的海量实时数据
- 使用 Y3 Codec 进行编码
- 基于
QUIC
传输数据
- Zipper
- 由 source 的连续数据流和流函数进行连接,流函数对数据流进行操作。
- 为 zipper 定义工作流配置的方法:构建.yaml 文件
# zipper/workflow.yaml
name: Service # 名称
host: localhost
port: 9000
functions: # 流函数列表
- name: Noise
- name: MockDB
- 流函数 stream-function
- FRP:简化流计算
- QUIC 传输协议:提高传输速度,并将 QUIC 流映射为 Rx 流
- zipper 发送给流函数的数据流是不可变的
- Rx
- ReactiveX:使用可观察序列编写异步和 event-based 程序
- Rx 库兼容几乎全部的主流编程语言
- 给出的例子
- YoMo 使用噪声传感器模拟数据
- 用 YoMo 传输二进制数据
- 多数据源计算:传统需要多线程、并发、竞赛、锁定、缓存各种问题,现在 YoMo 解决了。
Y3
- 索引地址:
- YoMo Codec 的 Golang 实现,是一个快速和低 CPU 损耗的编解码器,专注于边缘计算和流处理。
- 在传统的 HTTP 通信中,经常会使用 JSON 作为消息的编解码器,因为格式简单、易于读写、支持多种语言
- 为什么要用 YoMo Codec
- YoMo 对消息进行流式处理,从中提取受监听的 key-value 进行处理。如果 JSON,必须接收到完整数据包后才能反序列化
- YoMo Codec 将对象数据描述为一组 TLV 结构,解码时候判断当前 T 是否被监听,否则跳到下一个 TLV 结构;避免 JSON 解码用到大量反射[Golang 速成 ]的问题
Serverless
- 参考论文:Survey on serverless computing
- FaaS:传统的服务器端软件不同是经应用程序部署到拥有操作系统的虚拟机或者容器中,一般需要长时间驻留在操作系统中运行,而 FaaS 是直接将程序部署上到平台上即可,当有事件到来时触发执行,执行完了就可以卸载掉。
- 适合以下场景:
- 异步的并发,组件可独立部署和扩展
- 应对突发或服务使用量不可预测(主要是为了节约成本,因为 Serverless 应用在不运行时不收费)
- 短暂、无状态的应用,对冷启动时间不敏感
- 需要快速开发迭代的业务(因为无需提前申请资源,因此可以加快业务上线速度)
- Serverless 的使用场景示例如:
- ETL
- 机器学习及 AI 模型处理
- 图片处理
- IoT 传感器数据分析
- 流处理
- 聊天机器人
QUIC
- 内容很多,慢慢看
WasmEdge
- 轻量级、高性能、可扩展的虚拟机
- 市场上最快的 Wasm 虚拟机
- 给 Wasm 字节码程序提供一个良好定义的执行沙盒
- 【按作者自己的说法】WasmEdge 是目前唯一稳定支持 Tensorflow 的 WebAssembly 虚拟机, 与纯 JS 版本相比,这些模型性能平均提高了 10 倍。
- 与 Docker 之类的容器相比,它为开发人员提供了更抽象的代码执行环境,从而提高了开发效率。它可以直接部署代码和应用程序,而不必启动操作系统。Wasm 程序不需修改,就可以在不同的操作系统上运行。这与当今的云原生微服务架构配合得很好。
- WASM 消耗的内存和资源比操作系统级别的容器少得多。其模块化的安全模型允许为每个函数调用配置硬件和操作系统资源,从而在保证安全性的同时,保留了本机性能。
- 性能衡量 Article: https://arxiv.org/abs/2010.07115 高性能 Serverless 计算的轻量级设计
- 前端技术的一个例子:
- Wasm 是云原生应用程序的通用 Runtime
- 潜力在服务端
- 为什么边缘计算要用 WasmEdge
- a popular WebAssembly VM optimized for high-performance applications on the server-side.
- With advanced AOT (Ahead of Time compiler) support, the SSVM is already one of the fastest WebAssembly VMs.
- SSVM supports an extension for Tensorflow and other AI frameworks.
- Developers can write AI inference functions using a simple Rust API, and then run the function securely at native speed on CPU / GHPU / AI chips from the SSVM.
- SSVM will also support a golang SDK based on WebAssembly interface types specification and make golang / WebAssembly interoperations seamless.
Rust 程序设计语言+WebAssembly
- 一款可以替代 JavaScript 的技术
- Rust 编译器
- rustwasmc 工具链:用于将使用 Rust 编写的 rs 源码编译为 WebAssembly 字节码
- 前沿研究
- WIPROG: A WebAssembly-based Approach toIntegrated IoT Programming 【InfoCOM 2021 浙大、阿里】
yomo-wasmedge-tensorflow
-
组合技术
- 快:YoMo 低时延传输
- 安全:WasmEdge 沙盒,保证安全
- 优化:适合资源受限的边缘设备
-
处理 YoMo 图片流的图片识别函数用 Rust 编写,用 WasmEdge Tensorflow API 处理输入图片
技术突破点
- 流传输的编解码 Codec
- QUIC?
遇到问题
Buffer 问题
- 存在于 quic-go 中的问题,查阅:https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size