不是,除了JavaScript的执行,运行时重新研发了整个网络协议栈,为了监控内存,运行时使用特殊的租户识别数据结构,并且内置了大量的安全策略和资源使用侦测手段。另外,和node.js/deno不同,用户使用的API完全在运行时native实现,和用户JavaScript隔离。
是的,大部分情况下,客户的代码高概率会和其他客户运行在同一个地址空间,甚至是同一条线程上。但是我们会根据客户等级选择不同的调度域进行调度,例如免费客户就不可能和付费客户运行在同一个进程。另外,由于资源配额和运行时配置的不同,安全策略也会有差异,运行时会有多个分组,不同等级客户的代码会在相互隔离的运行时中运行,互不干涉。
边缘函数在底层运行时架构中,设计了详细的重试和兜底策略,会根据客户代码的特殊行为,甄别出具体异常情况,返回状态码,并针对状态码制定重试策略,同时您也可以自定义重试URL。
状态码 | 含义 | 说明 | 策略 |
---|---|---|---|
599 | 客户代码出错 | 可能是某个promise被拒绝,也可能是抛出了没有捕获的异常。运行时监听所有的promise异常,如果任何promise被拒绝或异常没有被捕获,并且发生在回复发送的过程中,那么运行时会截断回复,取消请求上下文。 | 幂等请求在本Pop内再次请求一次 |
598 | 客户限流 | 客户代码拥有过多的上下文,或者资源(内存、CPU执行时间等)严重不足。 | 幂等请求跨Pop再次请求一次。您也可以通过创建工单申请调整资源或限流策略。 |
597 | 客户被封禁 | 因为安全原因被封禁,一般封禁时间几分钟,几分钟后自动恢复。 | 幂等请求跨Pop再次请求一次 |
596 | 全局限流 | 边缘函数所在的边缘节点资源到达上限,开始熔断限流。 | 幂等请求跨Pop再次请求一次 |
594 | 未识别客户 | 非边缘函数的客户的流量进入到运行时。 | |
593 | 服务发现基础设施出错 | 平台服务异常。 | 幂等请求跨Pop再次请求一次 |