《【5miles吕艺】混合容器在微服务架构中的实践.pdf》由会员分享,可在线阅读,更多相关《【5miles吕艺】混合容器在微服务架构中的实践.pdf(34页珍藏版)》请在三个皮匠报告上搜索。
1、混合容器在微服务架构中的实践混合容器在微服务架构中的实践吕艺 5miles CTOPART ONE微服务架构介绍及应用场景微服务在微服务在 5miles 5miles 的应用场景的应用场景5miles,二手电商平台有 500+个容器微服务在微服务在 5miles 5miles 的应用场景的应用场景5miles,二手电商平台有 500+个容器PART TWO容器并不是只有docker混合容器的微服务架构混合容器的微服务架构1.重量级(容器+Linux OS+框架+应用)2.性能差,特别是启动时间,需要“热身”3.在安全和开销之间的取舍4.可移植性差-有没有可能编写一次,到处运行 当前微服务架构的
2、问题WebAssembly WebAssembly 介绍介绍WebAssembly WebAssembly 介绍介绍Docker 联合创始人 Solomon Hykes 2019年在推特上说:如果在如果在 2008 2008 年已经有了年已经有了 WASM+WASI WASM+WASI,那么我们压根无需创始,那么我们压根无需创始 Docker Docker 这个项目了。这个项目了。WASM WASM 就有这么重要!服务器上的就有这么重要!服务器上的 WebAssembly WebAssembly 是计算是计算的未来。的未来。混合容器的微服务架构混合容器的微服务架构为什么不试试 Wasm 容器除
3、了 Linux 容器之外的选择https:/cf.io/reports/cncf-annual-survey-2022/Wasm Wasm 容器是什么容器是什么只有 Linux 镜像的 1/100,内存占用也比较小启动时间快 1000 倍接近本机运行时性能默认安全且软件攻击面非常小跨平台完全可移植与 k8s、服务网格、分布式运行时兼容Wasm Wasm 容器容器 VS Linux VS Linux 容器容器来源:Arm Communityhttps:/ main()println!(helloworld);第一个测试:对比普通 rust 二进制文件,打包成docker镜像 和 Wasm 二进制
4、文件之间的大小Wasm Wasm 容器容器 VS Linux VS Linux 容器容器来源:Arm Communityfn main()println!(helloworld);Wasm 的启动时间约为普通容器的启动时间的 25%第二个测试:重复启动测试Wasm Wasm 容器容器 VS Linux VS Linux 容器容器来源:Arm Communityfn main()println!(helloworld);第三个测试:内存占用情况的测试WasmEdgeWasmEdgeCNCF 云原生计算基金会托管的项目对各种主流的 Rust 库支持完善,支持 tokio、Hyper、reqwest
5、 等库支持 MySQL 等兼容 MySQL 标准的数据库连接器能够被 K8s 等容器工具管理支持 TensorFlow、Pytorch、OpenVINO 等AI 框架github:https:/ THREE主流容器工具对 Wasm 容器的支持当今主流容器工具对当今主流容器工具对 Wasm Wasm 容器的支持容器的支持crun 从1.5版本开始支持WasmEdge 将 crun 重新编译,添加 WasmEdgecrun 会根据镜像注释来决定是启动 WasmEdge 还是启动 Linux container在 fedora 平台上,crun 发布了开箱即用的 WasmEdge 版本当今主流容器工
6、具对当今主流容器工具对 Wasm Wasm 容器的支持容器的支持使用 containerd-wasm-shim的方式,通过 runwasi 启动 Wasm 容器containerd 会查看镜像的目标平台是 wasm32 抑或是 x86 或 Arm如果是 wasm32,就会启动 WasmEdge,去运行 Wasm 镜像如果是 x86 或 Arm,就会启动 runc在这个方法下,runc 与 WasmEdge 处于一个层级当今主流容器工具对当今主流容器工具对 Wasm Wasm 容器的支持容器的支持Docker Desktop 集成了 WasmEdge打包镜像的工具支持打包镜像的工具支持build
7、ahDockerPART FOUR我们现在可以做什么实践:使用实践:使用 K8s K8s 管理管理 Wasm Wasm 容器与容器与 Linux Linux 容器容器Wasm Wasm 容器适用场景容器适用场景类 Serverless 的场景使用 Wasm 容器将前端收到的数据存到 MySQLNginx 与 MySQL 在 Linux 容器运行https:/ Wasm 容器适用场景容器适用场景AI 推理场景将前端收到的请求传给 AI 推理函数AI 推理函数运行在 Wasm 容器中Wasm 将推理结果返回给前端https:/ Wasm 容器适用场景容器适用场景Log 的处理使用 Wasm 容器将
8、 MySQL Binlog 同步到 KafkaMySQL 与 Kafka 仍然运行在 Linux 容器https:/ eksaws eks的测试的测试KWasmcrunWasmEdge同样的配置下,Wasm 容器里的 Rust 程序 8080 端口的冷启动比 Linux 容器里的 Go 程序 8081 端口快2倍,但是这远远没有达到业务要求。在在aws eksaws eks的测试的测试https:/kwasm.sh/Kwasm是一个Kubernetes Operator,它为你的Kubernetes节点添加WebAssembly支持。它通过使用一个包含了运行纯WebAssembly镜像所需的二
9、进制文件和配置变量的容器镜像来实现这一点。在在aws eksaws eks的测试的测试这里定义了一个名为 crun 的 RuntimeClass,其处理器(handler)也被设置为 crun。这意味着,为该 RuntimeClass 创建的任何 Pod 都将使用 crun 运行时来运行其容器。这里通过 annotation 规定了底层镜像是 Wasm在在aws eksaws eks的测试的测试ami 目前只能使用ubuntu的节点在在aws eksaws eks的测试的测试在在ekseks的测试的测试镜像大小621k内存占用3.89M在在ekseks的测试的测试测试代码运行结果PART FIVE总结与展望从实践谈谈从实践谈谈 Wasm Wasm 容器成为主流还需要什么?容器成为主流还需要什么?WASI 的规范需要更加成熟生态不够完善,目前得到最好支持的是 Rust 语言,但是门槛过高容器工具没有针对 Wasm 容器进行改造谢谢 谢谢 观观 看看thanks