对于广大开发者而言,搭建一个自己的 Web 服务是最为常见的开发场景之一。无论是全栈网站的搭建,还是创建 API 接口,都需要一个可以快速接收并处理 HTTP 请求的 Web 框架。Serverless 时代来临,既希望享受云计算带来的弹性伸缩、免运维等众多优势,却又囿于基于事件触发带来的改造成本而无法轻易尝试。Web 服务如何与 Serverless 完美适配成了我们需要攻克的难题。
01.
Web 服务开发发展趋势
从发展历程来看,Web 服务开发可以分为三个阶段:本地服务器部署 - 云主机部署 - Serverless 部署。
第一阶段:开发者需要自己购买服务器,将搭建的 Web 服务部署在机器上,虽然开发者对于机器的可操作范围更大,可对于 Web 场景来看,开发者往往不需要对机器进行多余操作,这样反而带来了额外的机器维护成本。
第二阶段:开发进入云时代,大家更倾向与于在云上购买主机部署服务,免去维护成本后,极大提升了开发效率,这个也是目前使用最为广泛的开发方式,但主机仍基于使用量的预估来提前购买,并且会为未使用的计算资源付费,这样的方式仍有一定资源与成本上的浪费。
第三阶段:Serverless 正式登上舞台,SCF 云函数自身有着自动扩缩容、按量计费等众多优势,完美适应开发者对于低开发&维护成本的需求,是 Web 服务部署的完美平台。但由于云函数是事件型函数,只能接受事件类型触发,无法直接接收处理原生 HTTP 请求,虽然云函数推出了众多解决方案,帮助开发者自动进行格式转换,但转换层的创建以及处理链路长仍是不可忽视的迁移成本。
02.
传统 API 网关 事件函数方案问题
API 网关会自动对传入的 HTTP 请求进行格式转换,转换为函数可以处理的 JSON 事件格式。函数侧,在原生 Web 服务框架前添加一个适配层函数,将事件 JSON 结构体再转化成标准的 Web 请求,提供给后端框架进行处理。
问题:
1. 改造成本高,需要添加适配层做格式转换,并对 Web 框架的监听方式进行修改。
2. 调试成本高,本地代码和云端代码不⼀致,本地和云端调试体验不统⼀,对于本地调试的实现有阻碍。
3. 转换链路长,性能有损耗,⼀次请求需要多四次转换:
1. http request -->> event
2. event -->> http request
3. http response -->> APIGateway 需要的返回结构
4. APIGateway 需要的返回结构 -->> http response
针对这些的问题,腾讯云 Serverless 推出的全新函数类型 - Web Function,实现 Serverless 与 Web 服务最优雅的结合。
03.
Web Function - 下一代建站方案
1. 用户发送的 HTTP 请求经过 API 网关后,网关侧将原生请求直接透传的同时,在请求头部加上了网关触发函数时需要的函数名、函数地域等内容,一起传递到函数环境,触发后端函数执行;
2. 函数环境内,通过内置的 Proxy 实现 Nginx 转发,并去除掉头部非产品规范的请求信息,将原生 HTTP 请求通过指定端口发送给用户的 Web Server 服务;
3. 用户的 Web Server 配置好指定的监听端口(9000
)和服务启动文件后部署到云端,通过该端口获取 HTTP 请求并进行处理。
04.
Web Function 优势
- 函数可以直接接收并处理 HTTP 请求,API 网关不再需要做 json 格式转换,减少请求处理环节,提升 Web 服务性能。
- Web 函数的编写体验更贴近编写原生 Web 服务,保证和本地开发服务体验一致。
- 丰富的框架支持,您可以使用常见的 Web 框架(如 Node.js Web 框架:
Express
、Koa
)编写 Web 函数,也可以将您本地的 Web 框架服务以极小的改造量快速迁移上云。 - Web 函数自动为您创建 API 网关服务,部署完成后,网关侧会自动生成一个默认 URL 供用户访问和调用,简化了学习成本和调试过程。
- 控制台提供了测试能力,您可以在函数控制台快速测试您的服务。
05.
Web Function 内测申请
Web 函数(Web Function)是云函数的一种函数类型,区别于事件函数(Event Function)对于事件格式的限制,专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行。
腾讯云 Serverless 即将推出「Web Function」,现开放内测申请:
- 内测申请链接:https://cloud.tencent.com/apply/p/bq2gg6hddzd
(长按识别,申请内测体验「Web Function」)
推荐阅读
One More Thing
欢迎进入千人 QQ 群 (871445853) 交流 Serverless!
- GitHub: github.com/serverless
- 官网: cloud.tencent.com/product/serverless-catalog
点击「阅读原文」,即可申请内测「Web Function」,欢迎体验使用。