Noslate Workers - 面向云原生的 JavaScript 容器方案

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. Noslate Workers 面向云原生的 JavaScript 容器方案 杜佳昆(凌恒) 大淘宝-跨端技术部-Node 架构-前端工程师
2. 目录 01 SSR 渲染业务的挑战 02 如何帮助业务应对挑战 03 面向未来探索
3.
4. SSR 渲染业务的挑战
5. Server Side Render 服务器端向客户端发送一个完全渲染的页 面(准确来说是仅仅是 html 页面)。 结合客户端的 JavaScript bundle 使得页 面可以运行起来
6.
7. 模版引擎
8. User Code User Code VM Context VM Context Node.js Process 函数计算 Pod 函数计算 Pod LRU Cache
9. 用户困扰 1. 额外学习成本 2. 使用现代化的方式构建丰富的 页面,以满足多样的业务需求
10. 开放 JavaScript 执行环境
11. 面临什么问题
12. User Code User Code VM Context VM Context LRU Cache Node.js Process 函数计算 Pod 函数计算 Pod 1. 用户代码不可信 2. Node.js VM 存在逃逸可能
13. 面临什么问题 代码执行隔离 业务代码多种多样,存在 相互影响的风险
14. User Code LRU Cache User Code LRU Cache Node.js Process Node.js Process 函数计算 Pod(页面 A) 函数计算 Pod(页面 B) 1. 业务成本不可控 2. 秒级冷启动速度难以满足需求
15. 面临什么问题 代码执行隔离 成本权衡 业务代码多种多样,存在 成本和弹性效率如何平衡 相互影响的风险
16. User Code LRU Cache User Code LRU Cache Node.js Process Node.js Process 函数计算 Pod(页面 A) 函数计算 Pod(页面 B) 业务缓存失效
17. User Code User Code Node.js Process Node.js Process 函数计算 Pod(页面 A) 函数计算 Pod(页面 B) Remote Storage(如:Redis) 网络稳定性
18. 面临什么问题 代码执行隔离 成本权衡 减少业务代码间的影响 成本和弹性效率如何平衡 缓存命中率 减少对业务逻辑的干扰
19. 如何帮助业务应对挑战
20. 社区是怎么做的 SnapStart Zero Cold Start Deno Deploy 加速 Java 函数启动速度,可 基于 V8 打造的运行环境,通 Secure by default 降到亚秒级 过 isolate 隔离逻辑执行,支 持通过 KV Storage 共享数据
21. 我们的思考 - 三层调度模型 Aworker Aworker Aworker Aworker Noslate Workers 毫秒级交付 容器化 – K8S、Docker Swarm 分钟级交付 传统 IaaS – 物理裸机、虚拟化架构 天级交付
22. Noslate Workers 基础架构 Inbound Noslated Outbound 负载均衡、实例调度、弹性策略 Aworker Node.js 自研 Web-interoperable Runtime Turf 资源隔离、实例管理 Inbound Outbound Control
23. Noslate Workers 基础架构 Inbound Noslated Outbound 负载均衡、实例调度、弹性策略 Aworker Node.js 自研 Web-interoperable Runtime Turf 资源隔离、实例管理 Inbound Outbound Control
24. Noslate Workers 基础架构 Inbound Noslated Outbound 负载均衡、实例调度、弹性策略 Aworker Node.js 自研 Web-interoperable Runtime Turf 资源隔离、实例管理 Inbound Outbound Control
25. Turf 基于 OCI 标准的轻量容器管理组件,负责 Noslate Workers 运行实例的管理,提供实例间的资源隔离能力。 1. JavaScript 代码运行在 VM 里,它并不直接调用系统调用; 2. JavaScript 依赖库可能很多很大,基本都会依赖于外部服务; 3. 需要能够提供即时响应请求的启动速度; 目标:提供一定程度的隔离性和共享文件系统与系统服务
26. Turf 调度单元 进程 传统容器 fork(2) 是一个系统调用,用于创建进程。创建的这个进程与原来进程几乎完全相同。 1. 新进程可以继承母进程的当前状态,而无需从 main() 开始初始化; 2. PCB、栈、内存页,页表都是纯内存复制,所以进程创建快 (<1ms); 3. CopyOnWrite,新进程可以继承母进程的静态页表,可节省系统内存;
27. Turf 隔离能力 CGroup Seccomp/Setuid Rootfs System Call Hooks 资源隔离,最小化授权
28. Turf 交付产物 Sandbox.json Image
29. Noslate Workers 基础架构 Inbound Noslated Outbound 负载均衡、实例调度、弹性策略 Aworker Node.js 自研 Web-interoperable Runtime Turf 资源隔离、实例管理 Inbound Outbound Control
30. Aworker Web API 1. 遵循 Web API 标准的 Web-interoperable JavaScript 运行时,实现了近似 Service Worker API 的规范,提供了基本的 Request-Response 服务 API。 2. 提供更加高层次、抽象的定义,不会泄漏系 统底层状态
31. Aworker 为极速启动设计 1. 单进程单线程运行架构 2. 通过 Warmfork 和 Startup Snapshot 能力,实现了更快的水平及垂直 3. 提供 busyloop 检测能力,防止过度消耗资源
32. Aworker Node.js 进程模型 Aworker 进程模型 1. 使用了 Linux AIO 特性替掉了 libuv 中同步的文件系统操作 2. 使用 V8 的 SingleThread 模式 运行架构
33. Aworker Warmfork
34. Aworker Warmfork 配置种子沙盒 Turf 运行种子进程 创建克隆沙盒 启动克隆沙盒 启动种子沙盒 Seed 种子报告 ForkWait Turfd 种子就绪 libturf 发起克隆 克隆完成 调用 fork 加载用户代码 Aworker
35. Aworker 无 Warmfork:450ms 有 Warmfork:40ms
36. Aworker Startup Snapshot Startup Snapshot 相当于从 V8 Context 对象与它的 globalThis 开始,遍历堆中所有的对象并将对象关系与引用序列化成 特有的字节码,形成一个线性的可存储状态。并在恢复时,解释执行这些字节码,恢复堆中的对象内容与他们之间的引用关 系。
37. Aworker Startup Snapshot 1. Node.js 最终有 2-5 倍的优化效果(100ms→20ms); 2. Aworker 内建的模块 Snapshot 后,裸启动耗时 10ms;
38. Aworker Startup Snapshot 局限性 1. Startup Snapshot 对内存开销敏感,如果应用启动阶段用了大量内 存,可能造成负优化; 2. 用户代码启动需要没有歧义的状态,比如 IP 地址、日期、连接状态、 服务发现结果等,针对这些歧义内容用户代码需要在进程恢复时有修 正能力;
39. Noslate Workers 基础架构 Inbound Noslated Outbound 负载均衡、实例调度、弹性策略 Aworker Node.js 自研 Web-interoperable Runtime Turf 资源隔离、实例管理 Inbound Outbound Control
40. Noslated Noslate Container Deamon,作为 Noslate Workers 解决方案的核心,提供了 Serverless 需要的 Worker 实例调度、弹 性扩容、配置管理、流量管理等能力。 Noslated Client 与外部交互 Control Plane Data Plane 流量分发 过载保护 配置管理 Outbound 代理 KV Storage 实例管理 弹性调度
41. Noslated Noslate Container Deamon,作为 Noslate Workers 解决方案的核心,提供了 Serverless 需要的 Worker 实例调度、弹 性扩容、配置管理、流量管理等能力。 Noslated Client 与外部交互 Control Plane Data Plane 流量分发 过载保护 配置管理 Outbound 代理 KV Storage 实例管理 弹性调度
42. Noslated 弹性调度 Data Plane request Control Plane Aworker Turfd 扩容 扩容 fork connect 流量拉起 install installed fetch response response request drained stop worker kill signal disconnect uninstall 即抛模式
43. 总结 代码执行隔离 以进程为执行容器隔离业务代码,通过 turf 实现系统资源 的隔离控制。同时在 Aworker 中提供对 busyloop 的执 01 行时间限制。 成本权衡 02 通过 Noslated 的即抛模式,实现每个渲染任务独立、全 新的执行环境,配合 Aworker 的 Warmfork 能力保证响 应及时。 缓存命中率 03 数据面提供了具备 LRU 能力的 KV Storage 和 Cache API, 可以用来在函数间共享数据
44. 业务成果 1. 支持开发者使用 JavaScript 编写页面 业务开发者可以低成本、简单的通过 SSR 渲染服务输出所需页面 2. 同场景下机器成本减少约 30% 改造前 改造后 机器利用率 40% 80% 机器成本 万 QPS 约 1000C 万 QPS 约 700C
45. 面向未来探索
46. 一、探索更多业务场景 1. 使用 Noslate Workers 自建业务所需的 FaaS 平台 2. 基于 Context 1:N 执行业务逻辑的可行性 二、参与标准建设 1. Winter CG 社区 2. CNCF Landscape – Serverless Installable Platform 三、和上层调度结合 1. 感知 Noslate Workers 函数分布,更均衡的调度流量 2. 反压联动,资源消耗更加合理,弹性更加平滑
47. Noslate Project 云原生 JavaScript 容器方案 面向 Node.js/V8 的离线 Corefile 调试工具,提供 V8 堆内存检查、 Heap Snapshot 诊断文件导出、Backtrace 等特色调试功能,并配套一 个高性能的运行态 Corefile 获取和压缩工具。 面向弹性场景进行优化,提高了用户代码的加载速度提高冷启动 效率,主要包括 Require 关系加速、Bytecode Cache。同时还 包含来自阿里云基础软件团队面向 ARM 架构的性能优化特性。 https://noslate.midwayjs.org/
48. 扫码回复「D2」 获取第十七届 D2 演讲 PDF 材料 后续也将推送 D2 会后技术文章,敬请关注!!
49. 感谢大家观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.124.0. UTC+08:00, 2024-04-27 08:13
浙ICP备14020137号-1 $访客地图$