轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)

本文涉及的产品
简介: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。本文将为大家介绍如何快速搭建基于 Serverless 的 Go 应用。

74.jpg
镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。
Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。

说明: 本文介绍的技巧需要 Fun 版本大于等于 3.6.4。

一、效果预览

本文涉及到的两个应用示例部署后的链接,点击预览效果:

  1. Gin 简单示例:http://gentest.functioncompute.com/ping
  2. Beego 简单示例:http://beegotest.functioncompute.com
  3. 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,可以看到返回结果如下:
3.png
最后直接使用 fun deploy 即可部署。

fun deploy

我们这里详细介绍下第一次部署流程:
1、Fun 首先检测到这不是一个 Fun 项目,会提示是否自动创建(按下回车或者输入 y 即可)
2、然后 Fun 又会尝试去检测应用的启动端口(函数计算要求必须启动在 0.0.0.0:9000),如果不匹配,则会协助修改:
4.png
3、按下回车,Fun 会自动检测构建生成的可执行程序,如果检测不到,则提示用户使用指定命令进行编译
5.png
4、按下回车后,就会自动进行编译了,编译完成后,会自动生成 Fun 所需要的 bootstrap 文件以及 template.yml 文件,然后会进行自动部署操作,在部署前,会首先列出本次部署带来的变更:
6.png
5、如果确认上面的变更没有问题,再按下回车即可开始资源的部署流程。
7.png
部署完成后,可以看到会自动生成一个可以测试访问的临时域名 14118335-1911504709953557.test.functioncompute.com,通过这个临时域名,可以用于开发、测试时预览应用。
使用该临时域名,访问应用的 API 接口 14118335-1911504709953557.test.functioncompute.com/ping 测试,效果如下:
8.png
备注:临时域名仅仅用作演示以及开发,是有时效的,如果用作生产,请绑定已经备案的域名。

示例二:迁移 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
打开可以看到如下效果:
9.png
打开具体的一篇博客,效果如下:
10.png

三、总结

我们通过三个示例介绍了如何部署一个 go 应用到函数计算上,从这三个例子我们可以发现,迁移一个 go 应用到函数计算是非常容易的,主要精力还是放在了如何在本地配置并启动应用,然后部署只需要简单的通过 fun deploy 命令即可。部署完成后,即可享受到函数计算带来的弹性伸缩、按量付费、免运维等特性。

阿里巴巴开源镜像站 提供全面,高效和稳定的镜像下载服务。钉钉搜索 ' 21746399 ‘ 加入镜像站官方用户交流群。”

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
9天前
|
Go 数据安全/隐私保护
go 基于gin编写encode、decode、base64加密接口
go 基于gin编写encode、decode、base64加密接口
11 2
|
1月前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
1天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
12天前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之在执行环境 custom pre-deploy 时,命令 "go mod tidy" 失败了,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
安全 Go
Golang深入浅出之-Go语言中的并发安全队列:实现与应用
【5月更文挑战第3天】本文探讨了Go语言中的并发安全队列,它是构建高性能并发系统的基础。文章介绍了两种实现方法:1) 使用`sync.Mutex`保护的简单队列,通过加锁解锁确保数据一致性;2) 使用通道(Channel)实现无锁队列,天生并发安全。同时,文中列举了并发编程中常见的死锁、数据竞争和通道阻塞问题,并给出了避免这些问题的策略,如明确锁边界、使用带缓冲通道、优雅处理关闭以及利用Go标准库。
37 5
|
1月前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
37 1
|
1月前
|
JSON 监控 安全
Golang深入浅出之-Go语言中的反射(reflect):原理与实战应用
【5月更文挑战第1天】Go语言的反射允许运行时检查和修改结构,主要通过`reflect`包的`Type`和`Value`实现。然而,滥用反射可能导致代码复杂和性能下降。要安全使用,应注意避免过度使用,始终进行类型检查,并尊重封装。反射的应用包括动态接口实现、JSON序列化和元编程。理解反射原理并谨慎使用是关键,应尽量保持代码静态类型。
36 2
|
1月前
|
存储 缓存 监控
【Go语言专栏】Go语言应用的性能调优实践
【4月更文挑战第30天】本文介绍了Go语言应用的性能调优技巧,包括使用`pprof`进行性能分析、选择正确算法与数据结构、减少内存分配、优化并发及避免阻塞操作、选用合适锁机制。此外,文章还提到了编译选项如`-trimpath`和`-ldflags`,以及系统资源和环境调优。通过实例展示了代码优化、并发处理和锁的使用。最后,推荐了进一步学习资源,鼓励读者深入探索Go语言的性能优化。
|
1月前
|
存储 NoSQL Go
【Go语言专栏】Go语言中的MongoDB操作与NoSQL应用
【4月更文挑战第30天】本文介绍了Go语言中操作MongoDB的方法和NoSQL应用的优势。MongoDB作为流行的NoSQL数据库,以其文档型数据模型、高性能和可扩展性被广泛应用。在Go语言中,通过mongo-go-driver库可轻松实现与MongoDB的连接及插入、查询、更新和删除等操作。MongoDB在NoSQL应用中的优点包括灵活的数据模型、高性能、高可用性和易于扩展,使其成为处理大规模数据和高并发场景的理想选择。
|
1月前
|
缓存 监控 前端开发
【Go 语言专栏】Go 语言中的 WebSocket 实时通信应用
【4月更文挑战第30天】本文探讨了Go语言在WebSocket实时通信中的应用。WebSocket作为全双工通信协议,允许持续的双向通信。Go语言凭借其高效和并发特性,适合构建实时应用。文中概述了在Go中实现WebSocket的基本步骤,包括服务器和客户端的建立与通信,并列举了实时聊天、数据监控和在线协作等应用案例。同时,强调了消息格式、并发处理、错误处理和安全性的注意事项。通过数据压缩、缓存管理和连接管理等策略可优化性能。Go语言还能与数据库和前端框架结合,提升用户体验。总之,Go语言为WebSocket实时通信提供了强大支持,有望在更多领域发挥作用。

热门文章

最新文章

相关产品

  • 函数计算