Edge Function
by Teobler on 28 / 11 / 2022
views
几个星期前恰逢 NextConf
,看过几个分享后想深入了解下这个大家评价颇高的框架,于是去浅翻了它的源码和各种资料。
过程中总是出现一个叫做 Edge Function
的概念,但又没有更深一步的解释,中文资料也很模糊,于是顺藤摸瓜去了解这个东西。虽然浮于表面,但也把整个框架摸清楚了,也更理解了狼叔说的 Next 和 Vercel 的野心。
什么是 Edge Function
一言以蔽之:
Edge Functions are serverless functions at The Edge.
所以为了解释清楚这个概念,我们需要逐层分解。
Edge VS Center
想要理解这个概念必须先引入别的概念,因为 Edge
这个单词是相对于 Data Center & Cloud
来说的。
早期的服务都是部署在机房中的,所有的服务资源、计算资源被统一部署在一个归属于某一个组织的机房内,用户在访问这些资源的时候其地理位置和网络位置其实是以这个以机房为中心(Center)的边缘(Edge),访问流量必须通过网络路由从边缘位置‘跳’过来。地理上距离机房越远的用户其延迟就越明显。
比如一个美国的用户想要访问一个日本公司的服务,用户的流量需要跨越小半个地球,理所当然地增加了用户的访问时间和响应速度。
这个问题在云这个概念出现以后得到了缓解,在云时代,组织部署的服务依托于云厂商,云厂商会在全球不同地方兴建自己的机房并划分不同的 region。于是组织可以根据需要将自己的服务部署到不同的 region。于是这个中心更加靠近用户了,用户可以获得更短的时延和更好的用户体验。
即使划分了 region,对于 region 地理边缘的用户依然处于这个网络的边缘,所以 Edge 的思想在这基础上更进一步,如果有一种 Edge Gateway/Server,它被分布式密集部署在很多地方,那么用户的每一次请求理论上都有一个距离很近的服务在处理。这将大大缓解服务中心压力并提升边缘设备的用户体验,广义上来说这也是 IoT 的雏形。
Function
理解完了 Edge
我们需要理解下一个单词 - Function
。当然,这里提到的 Function
不同于我们编程语言中的 Function
,它指的是 Serverless Function
。所以我们需要先明白 Serverless
这个概念。
这张图清晰直观地解释了各个概念之间的区别,其本质是服务厂商提供的服务触及到了哪一层。以 SaaS
举例,服务厂商提供了从最底层到最上层的服务,作为用户你只需要按照规则使用这个服务即可,这也是大多数普通用户接触的最多的形式,比如 Google Apps
,只需要做简单配置就可以应用在整个企业中。
而 Serverless
则让企业/个人从繁杂的基础设施中解放出来,将更多的精力放到代码上面来,让厂商来帮你处理基础设施部分,这带来了一些便利,放然也会有一些问题,我们稍后会提到。
到这里 Edge Function
是什么已经解释的很清楚了,在了解的过程中我发现 Vercel 和 Netlify 这两个在国外如火如荼的厂商在 runtime 的选择上走了不同的道路,Vercel 选择了大家熟知的 V8 + webassembly
的路,Netlify 则选择了 Deno
。不得不说 Rust 改变前端工具链和基础设施这条路真的是如火如荼。
Edge Function 想要解决什么问题
对于使用者来说,由于 Edge Function
是基于 Serverless
的,所以 Serverless
所具有的好处和坏处它都会有,比如大多数企业想要的节省成本,去 DevOps,自动扩容等等。同时由于引入了边缘的概念,它还能有效降低时延,提供更好的用户体验。
但有利有弊,虽然它能够提供一整套基础设施,但问题恰好也出现在这里,假如你需要对你的基础设施进行一些定制化,你是没有办法做到的,换句话说,你只能选择使用厂商提供的东西,不能做定制化。同时它的维护也会是一个问题。