!
也想出现在这里? 联系我们
广告区块

Serverless–全栈工程师的利器

背景

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可以查看最新的镜像

Serverless--全栈工程师的利器

 

使用docker pull拉取镜像

Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器

 

使用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中通过在线编辑器插入一些数据

Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器
Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器

 

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

Serverless--全栈工程师的利器

 

浏览器返回的内容

Serverless--全栈工程师的利器

到这里我们的接口就已经开发部署完毕了,我们无需购买任何云资源,也无需安装部署自己的服务器,只需要开发自己的业务代码就可以快速的上线服务,服务后面的高可用和扩展完全交由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 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。

https://www.168zkw.com/users/10914
https://www.xiaoweio.com/users/362
https://www.3dscg.com/users/6186
https://www.zhaitushe.com/users/2426
https://changshaseo.net/users/6
https://www.yiyihe.cn/users/528
https://zhkee.com/users/7010
https://www.ymc9.cn/users/cvwCtBsln
https://www.scratch5.com/users/18200
https://www.aihub.cn/users/6580
https://gxhyw.com/users/cBwxwuqks
https://www.xqlxx.com/users/dzCuuksnk
https://www.aihubpro.cn/users/9489
https://www.jdlingyu.com/users/316041
https://www.ccaonline.cn/users/75778
https://www.024hh.com/users/2
https://www.ruodian360.com/users/dBtzuqqor
https://www.sbkko.com/users/eCwBkjjkp
https://www.mindyoga.cn/users/11
https://www.xcyz.cn/users/bywCtvBpm
https://www.znian.cn/users/dAuyynljn
https://www.juye.qxgov.cn/users/byAywACml
https://www.yunyingquan.com/users/1137
https://www.aqzyl.cn/users/dAxxuklpr
https://www.rontv.cn/users/138
https://ke.jdjcy.com/users/1853
https://www.gdgzgkw.cn/users/3767
https://www.axure.com.cn/users/175079
https://www.zanfang.net/users/evwBmmqnn
https://www.90lhd.com/users/ctztvvssn
https://www.7b3.cn/users/41276
https://www.npc.ink/users/31095
https://www.kx2222.com/users/13153
https://www.aqzyl.cn/users/dytCyklpp
https://www.oqyj.com/circle/ds23rf
https://www.oqyj.com/users/3439
https://www.9gjg.cn/index.php?homepage=oo1a3
https://www.51muying.com/index.php?homepage=ddfsd33
http://fzzszywlw.com/index.php?homepage=l6w4g3x
https://www.guojishuobo.com/profile/7
https://www.zhiyeeedu.com/user/3
http://www.51wbshop.cn/index.php?homepage=e8p3w5q
https://www.shejit.com/index.php?homepage=w1k0n9m
https://www.paukphaw.net/user/33
https://blog.lanluo.cn/user/0196
http://b2b.shaomingyang.com/index.php?homepage=u9s6n6d
http://u8x6x4f.mpmpc.cn/
https://www.antpedia.com/?225382
http://o5h2w4w.dalupifashang.com/
http://l0i3q8y.zhuoyue78.com/
https://www.liuexpo.com/index.php?homepage=v8w3p3o
http://huacai.seqill.com/index.php?homepage=d3d1k4y
https://www.lsspghs.com/index.php?homepage=p9k1s7j
http://www.86wheel.com/index.php?homepage=r1h5v7a
https://www.sanweiyu.com/users/344
https://www.qianyuange.com/profile/rar4
https://www.aiiaw.com/profile/67
https://www.fangsi.net/profile/0196
https://jiejingku.net/profile/12188
https://www.qingyise.net/u/01961
https://www.mumulaozei.com/user/3
https://tuibook.com/ucenter/0196
https://www.xinxianshier.com/membercenter/3
https://www.haozhuji.com.cn/user/287
http://www.shoplh.com/com/d0o7o1z/
http://www.zgksgjw.com/index.php?homepage=c1h8j7k
http://www.kttf.com/index.php?homepage=z5c4t1o
https://www.sk1z.com/user-information/rar405
https://www.pu-cat.com/com/f7q4y2p/
http://www.zgksgjw.com/index.php?homepage=o9p1n8r
http://www.oifdf.com/index.php?homepage=x7h8x4i
http://www.51wbshop.com.cn/index.php?homepage=b6q5u2d
http://www.wb688.cn/index.php?homepage=w4f7d2y
http://www.mzzss.com/index.php?homepage=t2o5b9r
https://www.51muying.com/index.php?homepage=k8l0h9e
http://www.gift4biz.com/com/h7t0c2d/
https://www.fbzzw.cn/com/g0g5v3f/
https://www.1310066.cn/index.php?homepage=v9y1r9t
http://www.mengamei.com/index.php?homepage=b1h6z6x
http://www.kinbei.com/com/r3x2w0f/
http://lcmanager.nnfeiliao.com/index.php?homepage=i1s7a7f
https://c6f7x5a.zw.org.cn/
http://k5l7k6o.yantaijixiao.cn/
http://douyinxcx.com/index.php?homepage=k5l7k6o
http://p3e9z6p.sanreqi.com/
http://bbs.abbmm.com/u.php?uid=103730
http://www.huatuo007.com/forum/u.php?uid=12872
http://dofcn.com/u.php?uid=929
http://vip.qd3709.com/index.php?homepage=h0m1t2y
http://yunshanglianmeng.net/index.php?homepage=t8r3f0b
https://cn.african-machine.com/index.php?homepage=k9g4x3t
http://zgjzzn.cn/index.php?homepage=k9l6i6e
https://www.zgyjxxw.com/index.php?homepage=l5z6p9j
https://www.chinadrink.net/com/j6s7o0p/
http://www.casmita.com/index.php?homepage=q2g3q6f
http://www.jn720.com/index.php?homepage=y3r7n2j
https://www.lsspghs.com/index.php?homepage=l8t9b3v
http://www.cav01.com/index.php?homepage=n8a8b6p
https://www.gdkcw.cn/index.php?homepage=v4e2g5q
http://www.foodwifi.net/index.php?homepage=w7t9q9o

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索