首页
免费后端云服务
关于
推荐
免费图床源码
Search
1
小程序后端入门系列视频教程【一-微信开发工具介绍】
9,715 阅读
2
微信小程序三级联动之多列选择器
9,598 阅读
3
小程序开发免费后端之神秘利器分享
9,526 阅读
4
Golang-开发企业级资源权限管理【第一步表设计】-1
9,075 阅读
5
学会微信服务端开发第一步
8,972 阅读
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
登录
Search
Magic
累计撰写
119
篇文章
累计收到
21
条评论
首页
栏目
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
页面
免费后端云服务
关于
推荐
免费图床源码
搜索到
117
篇与
的结果
2024-06-23
【Serverless架构】小程序云实现原理分析
小程序云实现原理分析小程序基于最新的Serverless架构,无论官方称之为什么,特征都属于Baas或者Serverless服务。整个小程序云服务,包含了,客户端嵌入SDK,封装云函数上传命令,服务端主要在Faas云函数内部封装了openid、文件存储请求全局系统对象,方便大家请求微信与腾讯云接口, 云函数数据库操作,沿用了客户端SDK,由于JavaScript跨平台特性,js代码可以直接放到node里面执行,云函数里的wx-server-sdk,其实就是客户端的SDK。 客户端wx.cloud, 相当于微信开发工具写入了全局变量wx.cloud=wx-server-sdk库。 我们从客户端到服务端的顺序分析客户端-》中间层-》数据库1.客户端SDK目前客户端大家是不需要自己引入的,直接写入开发工具对象,只要微信基础库版本到达 2.2.3 或以上的就可以使用其实还有个服务端SDK,在云函数。看不见的wx.cloud对象,cloud对象,是一个js SDK,通过jssdk赋值给全局对象, 由于云函数的数据库操作方法写法与客户端一致,我们可以猜测,客户端SDK,与云函数的wx-server-sdk库 是同一个库。我们对比下2者的代码客户端 (小程序开发工具)db.collection('todos').doc('<some-todo-id>').get().then(res => { // res.data 包含该记录的数据 console.log(res.data) })服务端 (Faas)const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { try { return await db.collection('todos').doc('<some-todo-id>').get() } catch(e) { console.error(e) } }核心代码客户端 db.collection('todos').doc('<some-todo-id>').get() 服务端 return await db.collection('todos').doc('<some-todo-id>').get()可以看到2者操作是相同的,只不过服务端用了es7的await异步对象,可以return 拿到结果集合。而客户端使用了 Promise风格,如果反编译微信开发工具,在wx.cloud对象里面,一定是可以找到大量与wx-server-sdk一模一样的代码。2. 中间层封装当我们开发登陆的时候,第一步需要拿到openid,客户端会请求云函数,云函数请求微信接口,最终返回openid,可我们看到云函数里面并不需要我们去请求微信的接口,而是直接event.userInfo.openId返回了openid。看代码exports.main = (event, context) => { console.log(event) console.log(context) // 可执行其他自定义逻辑 // console.log 的内容可以在云开发云函数调用日志查看 return { openid: event.userInfo.openId, } } 这里帮我们省略了很多代码,原本的流程是需要通过客户端code换区openid接口地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code抓包看下,测试出来,只要访问这个地址,即可访问openidhttps://servicewechat.com/wxa-qbase/qbasecheckresult?event_id=HKnup_IMP8wWCsHwx0UyYsJMU0YPQm7u8eERg7Ll0wGB9CMSBtppMnu4P6Ytr6DFG2Vl_EGZS3nyEBw15OPCERLEi4Ok0HWC6g返回结果{ "base_resp": { "ret": 0 }, "status": 1, "content": "{\"openid\":\"oWPQH0WVoCkpiw3ErLYAIVnudjfA\"}", "service_errcode": 0, "service_errmsg": "", "func_req_id": "0f9c7a3f-b63c-11e8-b8ac-525400e8849e" }可以看到, 只要带一个参数event_id,就可以拿到openid, 云函数return的内容,会在返回的content字段表现。在请求从客户端,到达服务器之后,服务器获取到openid,记得这个openid比较特殊里有个情况是, 任何请求到服务器,都会获取openid, 第一次会从微信接口获取,写入到内存,第二次会直接从内存取。 这里用redis的情况可能性比较大。第二次请求直接取redis 值就可以了。 取到后写入event.userInfo对象。所以在任何云函数里,只要event.userInfo.openId,你都可以拿到openid。授权后,event.userInfo还包含头像等其他信息。其他云函数的操作,都封装在wx-server-sdk 这个代码,大家可以在每个云函数的依赖node_modules目录找到, 大家开发时遇到错误,也不要急,这里有个看错误技巧。以 6 开始的是由微信服务器侧产生的错误码以 5 开始的是由腾讯云侧产生的错误码以 4 开始的是本地 SDK 产生的错误3.数据库文档很多地方使用了,文档,集合概念,操作数据库传入参数也是mongodb的风格,很明显的使用了非关系类型,Mongodb数据库。 每个应用一个Collection。 云数据相当于Mongodb UI控制台。连显示结构也没改。 相比之前的Wafer套件,可以说这次是一个全新的解决思路。跟Bmob一样实现一个人全栈小程序开发,唯一效率比Bmob低的是,这个人必须掌握nodejs,Bmob的服务如果做小程序,相比小程序云,大部分需求是不需要掌握nodejs。总结:整套可以理解为mongodb+Faas的结合,封装了数据存储操作SDK。 与阿里的Serverless服务一样,以Faas为核心, Faas目前内置只封装了openid,去掉了定时任务,网关等功能,任何功能自己通过faas去实现,但只限定小程序内调用。相比阿里的Serverless 更贴地气,因为这次有了客户端SDK,再加云函数SDK,让Serverless找了到落地的可能。 最后脑洞问题:能否自己用阿里云Serverless 搭建一个小程序云?答案是可以的mongodb+Faas目前阿里的都有,并且目前阿里Faas功能更强大,唯一差个小程序客户端操作数据库的SDK。未来有机会,可以出个教程如何使用Faas实现一套自己的小程序-云
2024年06月23日
6,386 阅读
0 评论
20 点赞
2024-03-21
普及小程序-Serverless-云开发-【一】
普及小程序 Serverless 云开发 【一】什么是小程序 Serverless ?之前跟大家介绍过Serverless由Baas+Faas 组成,听着很高深,其实很好理解。可以理解为为你提供了开发过程中后端服务+自定义后端服务。你不需要去管什么后端语言,什么后端数据库,什么后端攻击,什么后端架构,什么后端维护等,只要做好客户端UI,连接上后端就好了。Bmob 作为国内第一家Serverless服务商,提供移动后端云服务。在这块已经服务了大量APP很多年。这里解释下之前叫Baas 为啥现在叫Serverless,这是因为大家对Serverless的形式有不一样的认可,一部分人认为Serverless = Faas+各种服务。 一部分人认为Serverless+Baas。大家的共同认知都是无服务器计算。未来不再需要去购买任何服务器去提供API,也不需要操作关心任何并发维护等问题。由于不需要写后端,不需要购买服务器,这块在APP领域,可操作性极高。我们从13年成立,就有大量APP开发者使用我们服务,到今天,已经接近30w开发者,涉及各行各业。 客户服务展现形式也是非常丰富,单片机、智能家居、智能手表、无人售货机柜、商场资讯地图引导柜机,机器人,共享单车、游戏,APP,小程序等等客户。除了Bmob Serverless外,国内2大云厂商也建立自己Serverless体系阿里云的Serverless就是 Faas+各种服务(数据库、网关、负载均衡等等)从Faas 里面调用各种服务,通过官网暴露给客户端。腾讯云的Serverless偏向于Baas+Faas 可以看下腾讯云Serverless的相关文章http://www.cnblogs.com/qcloud1001/p/9486751.html所以这也出现了2个例子:阿里Serverless开发一个微信红包小程序应用教程https://blog.csdn.net/zhoushuntian/article/details/79289215腾讯出的小程序云开发一个小程序教程https://zhuanlan.zhihu.com/p/42327375在熟悉Faas情况下,阿里的比传统小程序PHP API开发,在运维上与硬件成本上,有着明显优势。由于大家理念不同,腾讯小程序云,他是直接建立了一套Baas与小程序结合,跟Bmob后端云一样,即使你完全不懂Faas,也能开发大部分常用的小程序。 明显这种方式更简单实用。为什么是常用的应用可以用Baas做,而不是所有,因为有些特别应用,需要一些特别操作。例子一:http://www.91ud.com/app/15895.html这个基于Serverless开发的一个例子,是基于Bmob后端云小程序,开发的一个小程序,叫趣猫。他的业务是一个淘宝客的业务,搜索跟推荐分成是他主要的功能, 其中搜索,如果不配合Faas,是没法实现, 因为他的搜索,其实是搜索淘宝客API的数据,整个淘宝推广的商品都可以搜索出来,有token授权,需要Faas访问淘宝API,返回数据给小程序客户端。例子2:第二个基于Serverless开发的一个例子,小程序纸塘壁纸最近增加了一个功能,壁纸更新提醒通知,当后台有壁纸更新了, 会自动发送一条模板消息给我。这个也是基于Faas,单纯的Baas是没法实现这个功能。 当然,Bmob之前的Baas服务是包含了Faas服务,只是这2年Faas比较炒作的比较火。大家都把他(Faas)单独领了出来,作为Serverless架构的核心。我们则认为Baas与Faas同样重要。之前我有文章写过,阿里的Faas 推广力度,与体验领先于腾讯的Faas , 由于阿里与腾讯的理解不一样,这次在Serverless领域,个人认为腾讯云一定会超过阿里的Serverless。阿里云的Serverless就是 Faas+各种服务,不是玩微服务这个领域的人,很多人都不知道阿里的Serverless怎么结合到自己业务上。腾讯云理解为Baas+Faas,Baas有客户端的存在,更容易落地。大家理解的Serverless不一致,做的事情也不一致。像阿里Faas+各种服务(今天去看阿里官方还不断在给Faas增加可调用的服务,到目前阿里Faas几乎可以操作阿里云的大部分产品,数据库,redis,云存储等等服务),并不断在宣传Faas是如何去调用这些服务。腾讯云的行动告诉你什么叫Serverless(Baas+Faas),这次推出小程序云,以产品的形式告诉大家他眼中的Serverless服务。按照2018年7月份微信小程序官方公布的数据,目前注册开发者以及到达了150W+,这150w的开发者,大部分是一些小的cp厂商,这些小的CP厂商,大有可能接下来新开发的小程序都基于Serverless开发,而整个Serverless 市场,会比目前大很多倍。Serverless虽然好用,按照阿里的策略,很多人是看不懂无服务函数是干嘛的,为什么我要用它,而不是用云主机。因为设置太复杂了,概念很多,甚至好多人到今天还没搞懂计费原理。腾讯云的策略,由于有了小程序Baas与客户端打通,大部分情况不用自己去Faas里面写接口,使用非常简单,在Serverless这块领域,很快腾讯云就会超过阿里云,由于很多初级开发者都不会用,很难推广开来,这次小程序云对国内整个行业来说,都是一个很好的教育。算得上是国内推广Serverless行业的又一次里程碑,未来Serverless会像目前云主机一样普及。到底怎么使用?有些前端对Serverless与小程序云的关系可能不太能理解,我下面用小程序云来代替Serverless这个词。前期准备:申请公测资格 网址:下载bate版开发工具控制台操作:打开小程序云控制台,在bate版小程序开发工具上传的左侧有个按钮。点开后,看到一个类似这样的界面点击数据库,创建一个自己前端想显示的数据结构。例如这里建个team表代码操作:我们把这条数据在小程序内显示? 这里我跟Bmob后端云做个对比初始化微信wx.cloud.init({ env: 'test-x1dzi' })Bmob后端云app.js 引入var Bmob = require('../dist/Bmob-1.0.1.min.js');wx.Bmob.initialize("你的Application ID", "你的REST API Key", "你的MasterKey");2.第二步,查team表,打印出返回的数据微信db.collection('team').get().then(res => { // res.data 是一个包含集合中有权限访问的所有记录的数据,不超过 20 条 console.log(res.data) })Bmob后端云//构建team表对象 const query = Bmob.Query("team"); //查询数据 query.find().then(res => { //res 集合中所有数据,默认100条 console.log(res) });可以看到,除了需要引入SDK , 2个在使用上几乎一致。小程序云开发与使用Bmob开发几乎雷同。文档地址:https://bmob.github.io/hydrogen-js-sdk/#/?id=%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8-1关于定价:腾讯云,最低版本API 3w 天数据库 1G 存储 5G目前还不知道腾讯云的最低基础版上线是否收费,如果免费,那就很赞了。按照经验,这个额度大部分小应用都够了。Bmob小程序云 最低版本(免费)API 100w 月数据库 表行 10w存储 免费20G流量 每月送20G这个套餐免费,基本够用,收费套餐,大部分小程序都很难用得完。目前小程序云还缺乏解决2个问题:1.关于更好的功能实用性:目前小程序云暂时比不上,Bmob后端云,像导入导出,生成小程序二维码、解密手机号,运动步数,支付,退款,短信,这些基础Baas服务端封装,小程序云暂时都还没有。然后就是数据安全与稳定性了,目前暂时没看到有任何关于备份的介绍,应用受到CC、DDOS 等攻击,这个费用是谁来承担,腾讯云之前的业务是客户自己解决,Bmob等 Baas 都是无需用户去承担这个费用的。2.服务售后我们都知道Baas 跟业务有深度关系,不像传统的云主机,我只保证云主机不死机就好了。基本卖出去就等着收月租。Baas领域开发者会遇到各种问题,你可以说你平台是标准的,文档都有,那么多技术人员在用,可开发者技术能力,理解能力参差不齐,就很难解决一些问题。 所以在传统的Baas 服务,都很重视问题反馈,像Bmob 就有几十个QQ解答群,加上工单。其他所有的Baas几乎没有哪家没工单服务的,有些工单还收几百块/月,大量工单,技术人员有限,这是没办法的,很多人问的问题,明显是技术基础不过关,对自己业务逻辑理解不够,就使劲提工单,而有些业务与Baas结合问题工单比较难形容,不知道Baas是否可以实现,所以有时候就用上了即时通讯,QQ,微信等来协助开发者解决问题。 所以这也是腾讯小程序云待解决的问题。总结:目前小程序云刚出来,还需要完善,对国内Serverless 市场来说,是一次里程碑式的意义。有望让中小企业普及Serverless 技术。
2024年03月21日
8,820 阅读
0 评论
11 点赞
2024-03-02
mongodb运维(2)-mongostat命令
mongostat的功能类似于Unix / Linux文件系统使用vmstat,监控数据库上各项操作的统计,如增删查改的数量、联机数、內存使用状况…等,默认情况下,mongotop返回值的每一秒。官方详细文档:https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod1. mongostat 使用帮助及参数说明2. 监控数据参数说明insert 表示每秒插入数据库的对象数量,如果跟在一个*后面,表示这是复制操作、query 每秒查询操作数量、update 每秒更新操作数量、delete 每秒删除操作数量、getmore 每秒get more操作的数量、command 每秒执行数据库命令操作的数量(比如插入、查找、更新、删除等等)、flushes 每秒执行fsync操作的数量、mapped 映射数据的总量,以兆字节M表示。这里的数据是从上次mongostat显示到这次的数量、vsize mongod或mongos进程用掉的虚拟内存,以兆字节M表示、locked db 这里的值表示当前列出的数据库在锁定状态上花销的时间加上mongod进程在全局锁上花销的时间,以百分比表示、idx miss 表示需要一个页面错误来加载一个Btree节点的索引访问尝试的百分比、qr 客户端等待从MongoDB实例读操作的队列长度、qw 客户端等待从MongoDB实例写操作的队列长度、ar 正在执行读操作的客户端数量、aw 正在执行写操作的客户端数量、netIn MongoDB实例接收到的网络流量,用字节bytes表示,包括mongostat本身连接MongoDB实例产生的流量、netOut MongoDB实例发送出去的网络流量,用字节bytes表示,包括mongostat本身连接MongoDB实例产生的流量、conn 打开的连接数总数、set replica set的名称、repl replica set的状态 PRI 表示是Primary,SEC表示是Secondary问题: 哪些工具可以实时监控MongoDB的整体性能?答案是:我觉得最合适是mongostat ,虽然mongotop 可以看到具体集合,综合性能还是mongostat合适。一般来说,我们想看目前机器的负载,可以使用mongostat,这个数值的多少,没有一个标准答案,每个人的服务器配置不同,业务代码sql、表的数据量都会影响着这个数值。
2024年03月02日
264 阅读
0 评论
8 点赞
2024-02-09
Serverless_Faas_采集数据到小程序数据库
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 支持多功能首先推出Faas ,把他定位为 Serverless 解决应用开发中的问题。Faas 推出来后,不能只是输出个hello world! 或者说我这函数计算能力有多强吧这时推出函数图像处理服务,像裁剪、压缩、分发等文件处理, 这个是因为阿里本身有文件服务,带API,所以云函数整合API即可调用。顺便把公司内其他带API服务的产品,也整合,所以你看像敏感语音检测、对象存储(OSS)、转码、API网关等带API 调用服务也整合进来,这样Faas 就有了他的一些价值这样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 解决方案,目前能调用的服务有限,操作有些复杂,大家可以去尝尝鲜。
2024年02月09日
3 阅读
0 评论
0 点赞
2023-11-14
Serverless架构小程序云实现原理分析
【Serverless架构】小程序云实现原理分析 小程序基于最新的Serverless架构,无论官方称之为什么,特征都属于Baas或者Serverless服务。整个小程序云服务,包含了,客户端嵌入SDK,封装云函数上传命令,服务端主要在Faas云函数内部封装了openid、文件存储请求全局系统对象,方便大家请求微信与腾讯云接口, 云函数数据库操作,沿用了客户端SDK,由于JavaScript跨平台特性,js代码可以直接放到node里面执行,云函数里的wx-server-sdk,其实就是客户端的SDK。 客户端wx.cloud, 相当于微信开发工具写入了全局变量wx.cloud\=wx-server-sdk库。我们从客户端到服务端的顺序分析客户端-》中间层-》数据库1.客户端SDK 目前客户端大家是不需要自己引入的,直接写入开发工具对象,只要微信基础库版本到达 2.2.3 或以上的就可以使用其实还有个服务端SDK,在云函数。看不见的wx.cloud对象,cloud对象,是一个js SDK,通过jssdk赋值给全局对象, 由于云函数的数据库操作方法写法与客户端一致,我们可以猜测,客户端SDK,与云函数的wx-server-sdk库 是同一个库。我们对比下2者的代码客户端 (小程序开发工具)db.collection('todos').doc('<some-todo-id>').get().then(res => { // res.data 包含该记录的数据 console.log(res.data) }) 服务端 (Faas)const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() exports.main = async (event, context) => { try { return await db.collection('todos').doc('<some-todo-id>').get() } catch(e) { console.error(e) } } 核心代码客户端 db.collection('todos').doc('<some-todo-id>').get() 服务端 return await db.collection('todos').doc('<some-todo-id>').get() 可以看到2者操作是相同的,只不过服务端用了es7的await异步对象,可以return 拿到结果集合。而客户端使用了 Promise风格,如果反编译微信开发工具,在wx.cloud对象里面,一定是可以找到大量与wx-server-sdk一模一样的代码。2. 中间层封装 当我们开发登陆的时候,第一步需要拿到openid,客户端会请求云函数,云函数请求微信接口,最终返回openid,可我们看到云函数里面并不需要我们去请求微信的接口,而是直接event.userInfo.openId返回了openid。看代码exports.main = (event, context) => { console.log(event) console.log(context) // 可执行其他自定义逻辑 // console.log 的内容可以在云开发云函数调用日志查看 return { openid: event.userInfo.openId, } } 这里帮我们省略了很多代码,原本的流程是需要通过客户端code换区openid接口地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 抓包看下,测试出来,只要访问这个地址,即可访问openidhttps://servicewechat.com/wxa-qbase/qbasecheckresult?event_id=HKnup_IMP8wWCsHwx0UyYsJMU0YPQm7u8eERg7Ll0wGB9CMSBtppMnu4P6Ytr6DFG2Vl_EGZS3nyEBw15OPCERLEi4Ok0HWC6g 返回结果{ "base_resp": { "ret": 0 }, "status": 1, "content": "{\"openid\":\"oWPQH0WVoCkpiw3ErLYAIVnudjfA\"}", "service_errcode": 0, "service_errmsg": "", "func_req_id": "0f9c7a3f-b63c-11e8-b8ac-525400e8849e" }可以看到, 只要带一个参数event\_id,就可以拿到openid, 云函数return的内容,会在返回的content字段表现。在请求从客户端,到达服务器之后,服务器获取到openid,记得这个openid比较特殊里有个情况是, 任何请求到服务器,都会获取openid, 第一次会从微信接口获取,写入到内存,第二次会直接从内存取。 这里用redis的情况可能性比较大。第二次请求直接取redis 值就可以了。 取到后写入event.userInfo对象。所以在任何云函数里,只要event.userInfo.openId,你都可以拿到openid。授权后,event.userInfo还包含头像等其他信息。其他云函数的操作,都封装在wx-server-sdk 这个代码,大家可以在每个云函数的依赖node\_modules目录找到, 大家开发时遇到错误,也不要急,这里有个看错误技巧。以 6 开始的是由微信服务器侧产生的错误码 以 5 开始的是由腾讯云侧产生的错误码 以 4 开始的是本地 SDK 产生的错误3.数据库 文档很多地方使用了,文档,集合概念,操作数据库传入参数也是mongodb的风格,很明显的使用了非关系类型,Mongodb数据库。 每个应用一个Collection。 云数据相当于Mongodb UI控制台。连显示结构也没改。相比之前的Wafer套件,可以说这次是一个全新的解决思路。跟Bmob一样实现一个人全栈小程序开发,唯一效率比Bmob低的是,这个人必须掌握nodejs,Bmob的服务如果做小程序,相比小程序云,大部分需求是不需要掌握nodejs。总结: 整套可以理解为mongodb+Faas的结合,封装了数据存储操作SDK。 与阿里的Serverless服务一样,以Faas为核心, Faas目前内置只封装了openid,去掉了定时任务,网关等功能,任何功能自己通过faas去实现,但只限定小程序内调用。相比阿里的Serverless 更贴地气,因为这次有了客户端SDK,再加云函数SDK,让Serverless找了到落地的可能。最后脑洞问题:能否自己用阿里云Serverless 搭建一个小程序云?答案是可以的mongodb+Faas目前阿里的都有,并且目前阿里Faas功能更强大,唯一差个小程序客户端操作数据库的SDK。未来有机会,可以出个教程如何使用Faas实现一套自己的小程序-云
2023年11月14日
6 阅读
0 评论
0 点赞
1
...
3
4
5
...
24