|
| 1 | +--- |
| 2 | +title: Cloudflare Workers 处理函数计算中的 CPU 性能问题 |
| 3 | +author: iugo |
| 4 | +categories: [Cloudflare Workers, 函数计算] |
| 5 | +--- |
| 6 | + |
| 7 | +原文: |
| 8 | +<https://blog.cloudflare.com/unpacking-cloudflare-workers-cpu-performance-benchmarks/> |
| 9 | + |
| 10 | +原文主要讲述了 Cloudflare Workers 和 Vercel 在 CPU 性能方面的一些对比, |
| 11 | +在应用上的重点是 React SSR 类应用的 TTFB 测试. |
| 12 | + |
| 13 | +其中我认为的一些关键点是: |
| 14 | + |
| 15 | +1. 函数计算的调度问题 (非 CPU 计算消耗). |
| 16 | +2. Node.js 对 V8 调参导致的性能问题. |
| 17 | +3. 代码中处理 buffer 不当导致的内存占用及后续 GC 的问题. |
| 18 | +4. Node.js 的非 Web 标准化问题, 比如 Streams API. |
| 19 | +5. Cloudflare Workers 团队在解决自己问题的过程中如果发现了生态问题, 甚至竟品问题, |
| 20 | + 也期望一并解决. |
| 21 | + |
| 22 | +我们的核心业务均由函数计算承担, 在此处有许多经验. 函数计算中的几大时间消耗为: |
| 23 | + |
| 24 | +1. 调度时间 |
| 25 | +2. (可能) 冷启动时间 |
| 26 | +3. 执行时间 (被计算为 CPU 消耗) |
| 27 | + |
| 28 | +一般来说, "执行时间" 与函数计算无关. 函数计算需要重点考虑的, 是 "调度时间" 和 |
| 29 | +"冷启动时间". |
| 30 | + |
| 31 | +作为用户, 一些配置会影响到调度时间, 比如使用什么操作系统, 是否要接入 VPC 等. |
| 32 | + |
| 33 | +想要优化冷启动时间, 则应该将重点放在 "架构" 上. 一般来说, 解释型语言的冷启动时间会小很多. |
| 34 | +比如函数计算一般使用 Python, JavaScript, 而不使用 Java. |
| 35 | + |
| 36 | +另外一种优化就是 "预热", 可以理解为提前启动. 但是预热是有成本开销的, |
| 37 | +并且我认为预热是有悖于函数计算模式的. 我更倾向于减少冷启动时间, 而不是预热. |
| 38 | + |
| 39 | +Cloudflare Workers 针对调度问题的优化, 是所有用户乐于看到的. 加量不加价, |
| 40 | +并且默认生效, 用户无需任何额外配置. |
| 41 | + |
| 42 | +Node.js 的非 Web 标准化问题, 就是我们几年前选型 Deno, 而非 Node.js 的关键原因. |
| 43 | +即便我们不是全栈团队, 也希望在 JS 领域, 技术栈尽量统一, 减少不必要的消耗. |
| 44 | + |
| 45 | +最后, 看到问题就想要去解决, 无论这个问题是否影响到自身利益, |
| 46 | +这不仅是工程师应该有的素质, 也是每一个人应该有的素质. |
| 47 | +就像走路时如果看到了脚边的垃圾, 可以顺手捡起来扔到垃圾箱中. |
| 48 | + |
| 49 | +不是鼓励大家无偿奉献, 而是举手之劳, 何乐而不为? |
| 50 | +每个人多付出 1%, 就会让整个世界进步不只 100%. |
0 commit comments