无需修改代码,用 fcapp.run 运行你的 REST 应用
作者:落语|阿里云 Serverless 技术研发
背景
阿里云函数计算产品 [ 1] 在较早的时候支持了 HTTP 触发器 [2 ] 能力,支持用户使用 HTTP 协议进行函数调用。函数计算后端通过一个共享的 APIServer 组件对所有客户提供响应 HTTP 触发器调用的服务,需要依赖 URL 中的 Path 将客户流量路由到客户的函数容器内部。容器内收到的 HTTP 请求 Path 会带有函数计算的路由标识,如果客户在函数计算部署 REST 风格的应用,那么就会遇见 404 问题。
在一开始,函数计算并不是为客户运行中小型规模应用而设计的。函数计算提供了原生的 REST 架构,将每个函数视为一个独立的资源,通常一个函数只负责一小块功能,也就是一个 API。如果一个函数只对应一个 API,那么在函数代码中也不必去实现一套路由逻辑去响应不同 URL Path 路径的请求了。
函数计算在近两年引入了 Custom Runtime/Custom Container Runtime [3 ] 类型的函数,客户可以直接在函数计算上运行自己存量的应用,而不必按照函数计算推荐的架构去拆分自己的应用。客户以及社区内比较成熟的项目的开发习惯是采用 MVC 等架构,在一个程序中开发大量的 REST API,在进程内按照报文中的 HTTP Path 进行路由,将不同路径的请求“转发”至不同的方法或函数进行处理。
在这样的背景下,客户可以在函数计算运行存量的 REST 应用,但应用无法正常对外提供服务。客户花费大量的精力对存量的应用进行改造,而且这个改造仅仅在函数计算是必须的,是一种典型的平台携裹用户的产品设计。
使用 fcapp.run 调用函数
为了解决上述的问题,并兼容存量的函数以及客户习惯,函数计算为每个新创建的 HTTP 触发器分配了一个独立的域名,例如{random-string}.cn-shanghai.fcapp.run
。使用该域名访问函数计算,函数计算会按照域名进行路由,将流量转发至函数容器内,避免对客户代码造成侵入性。
使用 fcapp-test.run 进行本地网页测试
由于中国大陆政策的影响,函数计算主域名无法在互联网为客户提供网站类型的业务,所有的函数请求结果将被转为下载行为 [4 ] 。对于纯 API 类型的函数,我们认为将请求结果转为下载是没有影响的。但对于网站属性的函数,返回的 HTML 文本以及 JavaScript 代码强依赖浏览器的解释器才能正常展示。我们判断让开发者能够实时看到函数返回的页面是一个强诉求。
在生产场景,我们推荐客户为函数绑定已备案的域名来解决这个问题,而在测试环境有更加简洁的方案。在测试阶段可以临时通过测试域名 fcapp-test.run 以及添加本地的 host 解析绕过这个问题,请求结果将不会被转为下载行为,可以正常进行网页调试。
# 1. 从页面获取fcapp.run的域名 FC_DOMAIN='wordpress-xxxxx-serverlordpress-ydziwvakfn.cn-shenzhen.fcapp.run' FC_TEST_DOMAIN=`echo ${FC_DOMAIN} | sed 's/fcapp.run/fcapp-test.run/g'` echo "FC域名: ${FC_DOMAIN}" echo "FC测试域名: ${FC_TEST_DOMAIN}" # 2. 查询域名解析的IP FC_IP=`ping ${FC_DOMAIN} -c 1 | HEAD -1 | awk '{print $3}' | sed 's/[():]//g'` echo "FC IP: ${FC_IP}" # 3. 修改host文件,将测试域名的本地解析指向fcapp.run的解析 # 如果没有权限需要手动加 sudo -- sh -c "printf '\n${FC_IP} ${FC_TEST_DOMAIN}\n' >> /etc/hosts" cat /etc/hosts # 4. 使用测试域名在浏览器访问函数 curl -v "${FC_TEST_DOMAIN}"
了解 TCP 协议以及 HTTP 协议的同学可以很容易地理解背后的技术细节。客户端在发起 HTTP 请求时,首先会通过域名解析查询到域名对应的 IP 地址,并发起 TCP 连接。接下来会通过建立的 TCP 连接,将 HTTP Request 报文发送至 Server 端。如果客户端直接向函数计算的 Server 发起 TCP 连接,并将可以与函数关联的域名发送至函数计算,那么函数计算就可以返回客户期望的内容。
函数计算在后端进行了处理,兼容了 fcapp-test.run 域名的访问,但并不提供权威 DNS 解析。客户只需要在本地进行 Host 配置或者使用自建的 DNS 服务器,将 fcapp-test.run 的域名解析至函数计算 Server,就能够正常测试函数。该方案既满足了中国大陆法律法规的要求,又以极低的成本满足了客户调试页面的需求,极大地优化了客户在函数计算的研发体验。
使用函数计算运行 wordpress 官方镜像
通过以上的方案,函数计算支持客户在不修改任何业务代码的前提下迁移自己的 REST 应用。下面使用 wordpress 官方镜像进行说明。
前置条件
-
开通函数计算账号。
-
将 wordpress 镜像转存到阿里云容器镜像服务中。
-
创建或使用已有的 mysql 实例,并为 wordpress 服务初始化相应的账号以及数据库。如果使用阿里云 RDS 实例,请确保函数服务的 VPC 配置与 RDS 实例的 VPC 配置一致,且白名单配置正确。
创建相应的函数以及服务
使用 wordpress 官方镜像创建函数,并设置容器内监听端口为 80。
注入数据库配置
修改函数配置,将 mysql 的数据库配置以环境变量的方式注入函数容器内。
无需备案,测试 wordpress 函数功能
查看创建的触发器分配的域名 [5 ] ,按照上述文档配置,使用 fcapp-test.run 域名进行测试。
上线你的函数
对外提供网站类型服务只能通过已备案域名来实现。函数计算用户可以通过配置自定义域名 [6 ] 的功能,将域名与函数进行绑定,使用自己的域名对外提供服务。同时也可以使用任意标准的网关类型的云产品或者开源产品,使用 fcapp.run 的内网域名上线你的函数。
小结
作为 Serverless 技术的标志性产品之一,函数计算长久以来专注于提升产品适用的场景。fcapp.run 域名以及相关产品特性的引入,标志着函数计算在 REST 场景以及 Web 场景的很大一步。客户从此可以将 REST 应用零改造地部署在函数计算上,研发测试的体验以及正式上线的方案都做到了优秀。非常欢迎同学们使用函数计算,并提出宝贵的意见。
相关链接
[1] 函数计算产品
https://fcnext.console.aliyun.com/overview
[2] HTTP 触发器
https://help.aliyun.com/document_detail/71229.html
[3] Custom Runtime/Custom Container Runtime
https://help.aliyun.com/document_detail/132044.html
[4] 下载行为
https://help.aliyun.com/document_detail/71229.html
[5] 分配的域名
https://help.aliyun.com/document_detail/74769.html#h3-url-2
[6] 自定义域名
https://help.aliyun.com/document_detail/90763.html
点击此处,前往函数计算官网查看更多!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
闲置计费 | Serverless 冷启动与成本间的最优解
作者:萧起|阿里云 Serverless 高级开发工程师 听说你也做过这样的技术选型 小王是一名程序员,公司的应用是跑在自建机房的服务器上,所有的底层服务和运维都需要自己亲自下手来做,每次升级、机器扩容都带来比较大的运维压力,同时为了能及时扩容堆了不少闲置的机器,机器成本一直比较高。最近公司新开发了两个应用系统,小王在做技术选型,打算拥抱云计算,把新应用部署在云上,设计一套高弹性、低成本、运维简单,能轻松应对业务突发流量上涨的架构方案,让自己可以把更多精力投入到业务开发中,减轻自己的运维负担。 这两个应用有几个共同的特点: 两个应用都属于在线应用,对调用延迟、服务稳定性有比较高的要求。 应用流量随业务变化比较大,而且很难提前预估业务量会上涨多少,对弹性有比较高的要求。 有明显的业务低峰期,低峰期调用量比较低,预计低峰期主要集中于晚上。 应用启动时间长:一个是 Java SpringBoot 的订单系统,一个是基于大规格镜像的 AI 图片识别系统,启动时间将近 1 分钟。 小王的需求总结起来有三个: 一是希望在运维上省事省心,交付 jar 包或者镜像后,只需简单的配置应用就能运行起来,不...
- 下一篇
TiDB 查询优化及调优系列(三)慢查询诊断监控及排查
本章节介绍如何利用 TiDB 提供的系统监控诊断工具,对运行负载中的查询进行排查和诊断。除了上一章节介绍的通过 EXPLAIN 语句来查看诊断查询计划问题外,本章节主要会介绍通过 TiDB Slow Query 慢查询内存表,以及 TiDB Dashboard 的可视化 Statements 功能来监控和诊断慢查询。 下载 TiDB 社区版 咨询 TiDB 企业版 免费试用 TiDB Cloud 适用于中国出海企业和开发者 Slow Query 慢查询内存表 TiDB 默认会启用慢查询日志,并将执行时间超过规定阈值的 SQL 保存到日志文件。慢查询日志常用于定位慢查询语句,分析和解决 SQL 的性能问题。通过系统表information_schema.slow_query也可以查看当前 TiDB 节点的慢查询日志,其字段与慢查询日志文件内容一致。TiDB 从 4.0 版本开始又新增了系统表information_schema.cluster_slow_query,可以用于查看全部 TiDB 节点的慢查询。 本节将首先简要介绍慢查询日志的格式和字段含义,然后针对上述两种慢查询系统表给出一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度