Serverless_Faas_采集数据到小程序数据库

magic
2024-02-09 / 0 评论 / 7 阅读 / 正在检测是否收录...

Serverless代表无服务器计算技术崛起,是微服务的一种表现形式。传统paas喜欢把FaaS(Function as a service) 就称之为Serverless,其实是不对的。单纯的Faas 能做的事是很有限的,一个微服务的应用没法完全依靠FaaS 运行起来, 必须得配合一些其他的服务,例如应用常见的文件、数据库、推送等服务。

作者更认为 Faas+Baas\=Serverless ,Serverless架构是BaaS实现的进一步升级,让应用适用于更多的场景。

目前国内推动Serverless 主要是阿里云、腾讯云、华为云等云厂商,大家看到国外 AWS Lamdba 做的比较成功,纷纷推出对应产品。

虽然大家对Serverless 技术看法不一样,但大家对他的优点认同是一样的。免运维、低成本、弹性应对流量。最大的缺点与厂商平台绑定,这个是所有Serverless都没法避免的。即使厂商平台想不绑定也不行,所以选择信誉好、企业成立时间长的平台尤为重要。

到今天(2018-05-23)为止我们看国内阿里云、腾讯云、华为云三大云厂商Serverless 已经逐渐成熟,但是还是没什么人用。什么原因?

我觉得是应用开发配套不够,要开发一个应用不是缺这个就是那个服务。目前这三家做的最好是阿里,他们的服务在不断完善中。

这里我就拿阿里举例,其他2个厂商也差不多是这样。看下图

Faas 支持多功能

  1. 首先推出Faas ,把他定位为 Serverless 解决应用开发中的问题。
  2. Faas 推出来后,不能只是输出个hello world! 或者说我这函数计算能力有多强吧
  3. 这时推出函数图像处理服务,像裁剪、压缩、分发等文件处理, 这个是因为阿里本身有文件服务,带API,所以云函数整合API即可调用。
  4. 顺便把公司内其他带API服务的产品,也整合,所以你看像敏感语音检测、对象存储(OSS)、转码、API网关等带API 调用服务也整合进来,这样Faas 就有了他的一些价值
  5. 这样Faas 写的代码,可以操作一些服务。这些API服务,曾经我们都需要在自己应用或者自己服务端操作,如果能写到Faas ,可以一定程度减少工作量。

大家可以看出,阿里这种他是从Faas发展出一些能力,慢慢增加,例如文件服务、网关服务、短信服务、云数据库服务、支付服务等等

文件服务、网关服务、短信服务、云数据库服务、支付服务等等这些是什么?
这就是Baas 是为APP提供整个配套的Baas , 最终不管是否叫Baas平台,但从Faas 的发展,逐渐完成了把这些服务整合为一个Baas服务。

目前函数FaaS(Function as a service)服务大家都有了,Serverless是否实用,就看大家把应用后端开发相关服务,需要的BaaS(后端即服务:Backend as a Service)相关功能,整合的是否易用,如果做到了,那Serverless就达到了厂家所宣称的低成本开发 , 否则按照目前这三家企业Faas的技术使用成本,是超过我自己购买云主机用后端语言写我需要的业务的成本。

这里我们看下Baas厂商是怎么做的

BaaS(后端即服务:Backend as a Service)+Faas(函数即服务 Function as a service)+SDK 形成一套应用服务。 有Baas+faas为什么还要一套SDK,没有SDK,一样是可以调用后端服务。

这里举个例子。在小程序里面,同样是需要给一个客户发送一条验证码短信。

不用SDK的代码:

wx.request({
url: '[http://api.bmob.cn/sms](http://api.bmob.cn/sms)', //仅为示例,并非真实的接口地址
data: {
phone: '1388888888' ,
},
header: {
'content-type': 'application/json' // 默认值
'appid':'1'
},
success: function(res) {
console.log("短信发送成功")
}
fail:function(res){
console.log("短信发送失败")
}
})

使用SDK的代码

Bmob.requestSmsCode(1388888888).then(function (res) {
console.log('短信发送成功');
})
.catch(function (error) {
console.log('短信发送失败');
});

下面代码明显简单易读一些,更麻烦的是小程序是这样发起请求的,快应用是另外的,H5又是ajax的,他们虽然传的参数一样,但请求写法完全不一样。这时如果你是用SDK, 微信小程序、H5、支付宝小程序、快应用、游戏Cocos、混合App等平台都是这一份代码调用。没SDK需要关心平台变化,代码又得重新,大量节约开发周期。这就是SDK的价值,提升开发效率。也是 Serverless 必不可少的一环。

大家都在讲Serverless效率更快,企业支付成本更低。成本我们先不谈,因为目前都是函数没运行不收费,虽然实用性还不够,前期有补贴,Faas相比docker实例暂时价格优势很明显。这个在未来还有待观察。我们讲Serverless 开发产品效率

这个链接,是阿里Serverless的一个真实例子,10分钟构建微信小程序。

[https://yq.aliyun.com/articles/435430?spm\=a2c4e.11153959.teamhomeleft.198.591748f2cvDStU](https://yq.aliyun.com/articles/435430?spm\=a2c4e.11153959.teamhomeleft.198.591748f2cvDStU)

代码开源在[https://github.com/awesome-fc/wx-demo](https://github.com/awesome-fc/wx-demo)

大家觉得可能吗,如果你能用Faas 10分钟对接好微信支付,已经是够快了。就这页代码[https://github.com/awesome-fc/wx-demo/blob/master/server/weixin/pay.py](https://github.com/awesome-fc/wx-demo/blob/master/server/weixin/pay.py) 10分钟能写出这一页代码,都是神一样的人物。何况还是构建整个微信小程序服务端。

这个例子最大的作用是告诉大家,Faas 也可以做出你之前PHP、JSP、.net 等后端语言做出一样强的功能,并且我是无需自己去部署服务端运行环境, 弹性伸缩计算。 单纯从开发的角度上来说, 使用自己熟悉PHP或其他后端语言开发效率,目前肯定比Faas 开发效率高。什么情况会比自己写后端语言效率更高,这个我前面讲过,当整合整套Baas 服务后,个别功能服务,会比自己用后端语言写更高效率。

这里我拿Bmob举个栗子:我要每小时采集一次IT之家接口数据,并且写入到数据库

[https://apiquan.ithome.com/api/post?categoryid\=0\&type\=0\&orderTime\=1526981875455\&visistCount\=\&pageLength\=](https://apiquan.ithome.com/api/post?categoryid\=0\&type\=0\&orderTime\=1526981875455\&visistCount\=\&pageLength\=)

Serverless Faas 服务代码:

function onRequest(request, response, modules) {
var http \= modules.oHttp;
var url \= '[https://apiquan.ithome.com/api/post?categoryid\=0\&type\=0\&orderTime\=1526981875455\&visistCount\=\&pageLength\=](https://apiquan.ithome.com/api/post?categoryid\=0\&type\=0\&orderTime\=1526981875455\&visistCount\=\&pageLength\=)'
http(url, function(error, res, body) {

//结果转为对象类型
var results \=JSON.parse(body);

var arr \= [];
//循环更新数据
for (var i in results) {
newdata \= {
"method": "post",
"path": "/1/classes/post",
"body":results[i]
};
arr.push(newdata)
}

//获取数组对象
var bat \= modules.oBatch;
//批量操作
bat.exec({
"data": {
"requests": arr
}
}, function (err, data) {
//回调函数
response.end(data);
return;
});

response.end(JSON.stringify(results.length));
});
}

Faas 在线写入这个代码,执行一次即可采集一次数据到数据库。当然这个方法也是支持链接访问,链接地址: curl -X GET [http://cloud.bmob.cn/8b46e79dd49843f6/caiji](http://cloud.bmob.cn/8b46e79dd49843f6/caiji) 或者SDK加密调用。定时任务也是完全没问题的

更多这篇教程,可以看这里[https://www.jianshu.com/p/e6ef296261c8](https://www.jianshu.com/p/e6ef296261c8) 。如果熟悉nodejs,几分钟写出来,绝对不成问题。

虽然阿里不会直接面对中小团队去做SDK,或者小程序、快应用的Faas功能封装,但其他后端方案,跟随着时间推移,相信阿里的Faas 会整个更多后端开发的服务功能,形成好用一套Serverless 解决方案,目前能调用的服务有限,操作有些复杂,大家可以去尝尝鲜。

0

评论 (0)

取消