轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)
首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。
备注: 本文介绍的技巧需要 Fun 版本大于等于 3.6.4。
效果预览
本文涉及到的两个应用示例部署后的链接,点击预览效果:
- Gin 简单示例:http://gentest.functioncompute.com/ping
- Beego 简单示例:http://beegotest.functioncompute.com
- Gin 博客网站示例:http://mdblog.functioncompute.com
环境准备
首先按照 Fun 的安装文档里介绍的方法将 Fun 安装到本机。
PS: 本文介绍的方法,不需要安装 Docker,仅仅安装 Fun 即可,最简单的方式就是直接下载可执行的二进制文件。
安装完成后,可以执行 fun --version 检查 Fun 是否安装成功。
示例一:迁移 gin 示例到函数计算
首先我们按照官方示例的步骤,安装 gin(需要 golang 版本在 1.11+ 以上):
go get -u github.com/gin-gonic/gin
创建一个 example.go,内容填写如下:
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080") }
使用下面的命令启动应用:
go run example.go
然后访问 localhost:8080/ping,可以看到返回结果如下:
最后直接使用 fun deploy 即可部署。
fun deploy
我们这里详细介绍下第一次部署流程:
- Fun 首先检测到这不是一个 Fun 项目,会提示是否自动创建(按下回车或者输入 y 即可)
- 然后 Fun 又会尝试去检测应用的启动端口(函数计算要求必须启动在 0.0.0.0:9000),如果不匹配,则会协助修改:
- 按下回车,Fun 会自动检测构建生成的可执行程序,如果检测不到,则提示用户使用指定命令进行编译
- 按下回车后,就会自动进行编译了,编译完成后,会自动生成 Fun 所需要的 bootstrap 文件以及 template.yml 文件,然后会进行自动部署操作,在部署前,会首先列出本次部署带来的变更:
- 如果确认上面的变更没有问题,再按下回车即可开始资源的部署流程。
部署完成后,可以看到会自动生成一个可以测试访问的临时域名 14118335-1911504709953557.test.functioncompute.com,通过这个临时域名,可以用于开发、测试时预览应用。
使用该临时域名,访问应用的 API 接口 14118335-1911504709953557.test.functioncompute.com/ping 测试,效果如下:
备注:临时域名仅仅用作演示以及开发,是有时效的,如果用作生产,请绑定已经备案的域名。
示例二:迁移 beego 示例到函数计算
首先我们按照官方示例的步骤,搭建 beego 应用:
go get github.com/astaxie/beego
创建一个 hello.go,内容填写如下:
package main import "github.com/astaxie/beego" func main(){ beego.Run() }
使用下面的命令启动应用:
go run hello.go
然后访问 localhost:8080,可以看到返回结果。
最后部署,直接使用 fun deploy 经历类似示例一的流程后,就可以通过 Fun 返回的临时域名预览应用了。
示例三:迁移 gin 搭建的博客应用到函数计算
示例三我们选择一个稍微复杂一些的应用,我们按照官方帮助文档的步骤,搭建一个基于 gin 的 blog 应用:
1. 克隆项目到本地(直接下载 zip 包也可以):
git clone https://github.com/tanhe123/mdblog.git
2. 修改配置文件
在 config
目录下,有一个配置文件 config.example.toml
,将其复制一份,并修改名称为 config.toml
,然后修改里面的几个配置:
- 将 port = 8091 修改为 port = 9000,表示应用启动时,启动在 9000 端口。
- 将 debug = true 修改为 debug = false,表示使用生产版本
- 将 dir = "logs" 修改为 dir = "/tmp",表示日志写到 /tmp 目录(不挂载 NAS 的情况下,函数计算只有该目录是可以写的)
3. 编译并运行应用
go build # 会生成一个 mdblog 的二进制可执行程序 ./mdblog # 直接运行该可执行程序
如果遇到网络问题,可以使用 https://goproxy.cn/ 加速。
访问 http://localhost:9000 预览效果
4. 部署
最后,本地测试没问题后,我们需要发布到函数计算上,虽然这个示例比起上面两个代码层面要复杂很多,但部署流程是一样的,直接执行 fun deploy
然后一路回车即可。
本示例生成的临时域名为:https://14118335-1911504709953557.test.functioncompute.com
打开可以看到如下效果:
打开具体的一篇博客,效果如下:
总结
我们通过三个示例介绍了如何部署一个 go 应用到函数计算上,从这三个例子我们可以发现,迁移一个 go 应用到函数计算是非常容易的,主要精力还是放在了如何在本地配置并启动应用,然后部署只需要简单的通过 fun deploy
命令即可。部署完成后,即可享受到函数计算带来的弹性伸缩、按量付费、免运维等特性。
更多参考
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
老板放过我吧!我Java8还没用呢,又让我学习Java14
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 第14版包含的JEP(Java Enhancement Proposals,Java增强提案)比12版和13版加起来还要多。在这篇文章中,我将主要讨论以下几点: 改进的switch表达式,第一次出现在Java 12和13中,在Java 14中获得了完全的支持 instanceof支持模式匹配(语言特性) NullPointerException(JVM特性) 希望你在阅读完本文后,积极地代码中实验这些功能,为Java团队提供反馈,并为Java的发展做出贡献。 一、Switch表达式 java 14 中的switch表达式将会永久存在。 在之前的发布中,switch表达式只是一个“预览”阶段的特性。我想提醒一下,“预览”阶段的特性的目的是为了收集反馈,这些特性可能会随时改变,根据反馈结果,这些特性甚至可能会被移除,但通常所有的预览特性最后都会在java中固定下来。 新的switch表达式的优点是,不再有缺省跳过行为(fall-through),更全面,而且表达式和组合形式更容易编写,因此出...
- 下一篇
新冠疫情预测建模记录
持续到现在的新冠疫情,已经改变了千万人的命运,其中也包括我 面对这么残暴的天灾,我做了一个预测模型,希望能贡献自己一点微薄的力量,让天灾早点过去 有首歌唱得好: 让我悲也好,让我悔也好,让疫情过去没烦恼;让我苦也好,让我累也好,让我看见大家的笑…… 好了,废话结束,进入正题: 在这之前,github上已经有一个预测项目了: https://github.com/YiranJing/Coronavirus-Epidemic-2019-nCov 于是我将他的源码down下来仔细看了看 该项目作者实现了自己的SIR和SEIR模型(两种经典的传染病模型:https://baike.baidu.com/item/%E4%BC%A0%E6%9F%93%E7%97%85%E6%A8%A1%E5%9E%8B/5130035?fr=aladdin) 而模型的关键部分是定义了一个分布函数: def Binomial_log_like(n: int, p: float, k: int): loglik = lgamma(n+k+1) - lgamma(k+1) - lgamma(n+1) + k*np.lo...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案