暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Serverless--全栈工程师的利器

MemFireDB 2021-09-14
851

背景

Serverless 是炙手可热的技术,被认为是云计算发展的未来方向。尤其是在前端研发领域,使用 Node 开发云函数,可以让前端工程师更加专注于业务逻辑,实现全栈工程师的角色转变。

Serverless 适用于事件触发的场景。当某个事件发生时,拉起并调用 Serverless 云函数,比如文件上传、消息队列中的消息事件、定时器事件,也可以是 IoT 设备的某个事件。还可以用于一些文件处理,比如图像处理、音视频处理和日志分析等场景。

当然,这些事件也包括 HTTP 请求事件,这是 Serverless 的一个很大的适用场景—— HTTP Service,主要实现基于 HTTP 应用的后端服务,比如 REST API、BFF 和 SSR 服务,以及业务逻辑的实现。

serverless这个方向国内的大厂基本都已经进入,且形成了自己的产品,阿里的mPaas,腾讯的叫做CloudBase。我们先看一下腾讯对于CloudBase的定位:

云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 Serverless 化能力,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用、Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。

实际的例子

上面的描述还比较抽象,接下来我们通过一个实际的例子来体验一下serverless技术给我们带来的便捷。因为有很多应用是通过小程序入口的,为了方便我自己后面扩展,也因为cloudbase提供了免费的套餐,这里我使用CloudBase进行测试。例子的内容是常见的数据库CURD操作,我们使用golang在cloudbase快速实现一个获取人员信息的接口,并快速部署上线提供公网访问。

准备测试环境

我们需要先开通腾讯云的账号,并登陆CloudBase serverless控制台,https://console.cloud.tencent.com/scf/ ,同时开通云数据库MemFireDB https://memfiredb.com/,最后就是我们自己的开发机了,这里我用的是centos7上的docker容器。CloudBase和MemFireDB的注册流程这里就不详细描述了,可以按照网站的引导一步步完成操作。这里介绍下开发环境的配置

获取镜像,使用docker search可以查看最新的镜像

使用docker pull拉取镜像

镜像获取成功后,使用docker images查看

使用docker run -it  /bin/bash 启动该镜像,并进入镜像中进行操作,这里我们还需要安装一下vim编辑器用来开发代码

Apt-get updateApt-get install vimApt-get install lrzsz

到这里我们所有的开发和测试环境就已经准备就绪了,接下来我们来编写代码

编写代码

serverless讲究的是每个云函数功能单一,短小精悍,所以我们只需要一个main.go可以,代码内容如下:

package mainimport ( "fmt" "context" "github.com/tencentyun/scf-go-lib/cloudfunction" "github.com/go-pg/pg/v10" "encoding/json")type Persons struct { Id int json:"id" Name string json:"name"}type DefineEvent struct { // test event define Key1 string json:"key1" Key2 string json:"key2"}type Header struct { Content_Type string json:"Content-Type"}type Resp struct { IsBase64Encoded bool json:"isBase64Encoded" StatusCode int json:"statusCode" Headers Header json:"headers" Body string json:"body"}func hello(ctx context.Context, event DefineEvent) (Resp, error) {opt := pg.Options{    Addr:     "",    User:     "",    Password: "",    Database: "",    OnConnect: func(ctx context.Context, cn *pg.Conn) error {        println("new connection created")        return nil    },}db := pg.Connect(&opt)defer db.Close()header := Header{Content_Type: "application/json"}resp := Resp {    IsBase64Encoded : false,    StatusCode : 200,    Headers : header,    Body : "hello world",}var persons []Personserr := db.Model(&persons).Select()if err != nil {    fmt.Println(err)    return resp, err}personstr, err := json.Marshal(persons)resp.Body = string(personstr)respstr, _ := json.Marshal(resp)fmt.Println(respstr)return resp, nil}func main() { // Make the handler available for Remote Procedure Call by Cloud Function cloudfunction.Start(hello)}

编译生成可执行程序并打包准备部署

Go mod init tcb-postgres-golangGo mod tidyGOOS=linux GOARCH=amd64 go build -o main main.goZip main.zip main
部署测试

先在MemFireDB中通过在线编辑器插入一些数据

在cloudbase中创建云函数,并上传上一步中编译好的可执行程序

按照下图中来配置云函数的各项参数,运行环境选在Go1,函数类型选择事件函数,函数代码选择“本地上传zip包”,并选择我们上一步中准备好的main.zip,填好之后点击“完成”

部署完成后会跳转到函数管理页面,点击“测试”按钮,可以看到函数执行是否正常

增加触发方式,选择API网关触发,为了方便测试,我们这里可以选择“免鉴权”,请求方法选择“Get”,最后点击“完成”按钮

最后可以看到该接口的调用地址,我们可以在浏览器上直接访问该地址


浏览器返回的内容

到这里我们的接口就已经开发部署完毕了,我们无需购买任何云资源,也无需安装部署自己的服务器,只需要开发自己的业务代码就可以快速的上线服务,服务后面的高可用和扩展完全交由cloudbase平台托管。

注意事项

SCF 运行返回 "error":403,"error":"Invalid scf response format. please check your scf response format." 怎么办?

API 网关会将云函数的返回内容进行解析,并根据解析内容构造 HTTP 响应。通过使用集成响应,可以通过代码自主控制响应的状态码、headers、body 内容,可以实现自定义格式的内容响应,例如响应 XML、HTML、JSON 甚至 JS 内容。在使用集成响应时,需要按照 API 网关触发器的集成响应返回数据结构,才可以被 API 网关成功解析,否则会出现{"errno":403,"error":"requestId xxx , Invalid scf response. expected scf response valid JSON."}
错误信息。

总结

本文介绍了serverless的背景和场景,并通过利用CloudBase和云数据库MemFireDB快速构建了一个人员信息查询的接口的例子来演示Serverless的便捷性。正如CloudBase描述的那样:为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 Serverless 化能力,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用、Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。


阅读原文 |快速体验





MemFire Cloud是基于MemFireDB云原生和线性扩展能力而打造的数据库云服务,致力于为互联网用户提供一站式数据库自助服务,实现按需使用,随用随取,最大化的节约成本,加速用户的业务创新。




点一下阅读原文,获得更多惊喜



文章转载自MemFireDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论