分类 Bmob后端云 下的文章

Bmob FaaS 或“函数即服务” 介绍

函数即服务是一种新的软件基础设施术语,它比容器颗粒更小。

FaaS与Baas很类似,都是为了提高开发效率,解决微服务中所遇到的问题,先对而言Faas灵活度更高。大家一般把 Faas+Baas=Serverless.

Bmob在国内最早做这个的企业之一,当时还完全未有借鉴,在走这条路的过程中也遇到了许许多多困难。
什么是函数服务有人举了个很好的例子.
来源阿里云社区.png

图侵权删

Serverless是一种基于互联网的技术架构理念,它具有

1、低运营成本;
2、简化设备运维;
3、提升可维护性;
4、简单易用,更快的开发速度;
5、相对小企业可靠性更好好

面临的问题

1.用户无数的Function 如何处理?
2.如何实现弹性部署?
3.如何集成日志、监控等工具?
4.服务问题?
5.安全问题?

第一个问题:用户无数的Function 如何处理?

1.我们可以给每个用户Function建立一个文件夹
2.我们可以每个用户一个容器

第二个问题:如何实现弹性部署?

1.如果要实现这一秒1K QPS,下一秒1W QPS。负载均衡有限的弹性部署中小云厂家是可以做到,并且你有活动还可以手动给你账户定制QPS。
2.如果要实现这一秒1K QPS,下一秒10W QPS、100W QPS,这种目前只能自有机房的厂家玩(像目前腾讯、阿里云都支持,他们今年也都推出了Faas,目前都在公测阶段),费用也不会低。不过流量到这一级别很多企业早已经用自己系统了,至少目前国情是这样。

发展历程.png

第三个问题:如何集成日志、监控等工具?

1.这个主要分2种,一种提供给用户,一种提供内部使用。
2.提供给用户的有函数回调结果日志,定时任务日志。监控QPS流量等。

第四个问题:服务问题?

1.Faas服务问题是个人认为最难解决的问题,由于各个厂家对Faas的封装没有一个统一的标准,大家代码也互不兼容。并且都封装了一些自己内部的函数,由于发展初期用户很难子啊各大网站找到答案,导致部分用户遇到问题需要人工技术支持才能走入正轨,这是Faas普及的一大难点。

第五个问题:安全问题?

1.目前市场做防攻击的上市企业防攻击技术是比较成熟的,只要你攻击很快很准确的监控并定位攻击流量,大多数恶意行为都能被监测隔离,被清洗掉。虽然不能吹嘘的像个别企业说能做到:到达服务器的攻击流量也能很快的被隔离,关进小黑屋,不过换个ip 还是可以的,相比一些中小企业直接暴露ip还是安全很多。

有些人说Baas 厂家提供的云函数、云逻辑之类不能称之为Faas,主要说出2点。

  1. 像亚马逊的Lambda,每 100 万个请求 0.20 美元,他们是按照单个请求计费的
  2. 说Baas的云逻辑没有自动伸缩功能。据我了解虽然没法跟有机房的厂家比,做到类似无限伸缩,不过Bmob、与AV的Faas产品都是可以根据业务定制的。

有些人说Baas 随着serverless的发展,以后小公司就不需要运维工程师了

  1. 个人觉得这天还早,除非国内各大平台的Faas 都能统一标准。
  2. 这种新型产品,由于需要对外界暴露函数访问域名,目前政策也还不太明朗,如果手动绑定自己域名就加重了使用成本。
对于初创团队或者企业新业务来说使用这种服务是最合适的,因为Serverless能做到快、好、省。不过对于Serverless的普及,个人觉得国内难度还是很大,由于完全由第三方管理目前最大的挑战还是信任与服务问题。不过在国内,已经超过10W+开发者已经接受这种模式。

微信小程序会员卡开发跳坑

最近看好多人问,小程序里面怎么显示会员卡,然客户领取后,去对应店铺核销。

本身以为会很简单,最后费了好大心思才找到对应文档。 会员卡是见过微信最差的文档了,没说明参数从哪里获取。这篇文章带大家跳坑

看了一下文档,大概是这样一个函数,可以让用户领取会员卡

wx.navigateToMiniProgram({
  appId: 'wxeb490c6f9b154ef9', //固定为此 appid,不可改动
  extraData: data, // 包括 encrypt_card_id, outer_str, biz三个字段,须从 step3 中获得的链接中获取参数
  success: function() {
  },
  fail: function() {
  },
  complete: function() {
  }
})

这里的 extraData: data, // 包括 encrypt_card_id, outer_str, biz三个字段,须从 step3 中获得的链,是关键。

extraData,值文档说的第三步,在文档里面很难找到第三步获取开卡组件参数内容。也找不多哪个接口有返回这三个参数 encrypt_card_id, outer_str, biz。

文档上面有个开卡组件文档,我们打开

https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1479824356&version=1&lang=zh_CN&platform=2&token=

image.png

既然开卡组件文档没有,那我们去公众号文档,会员卡相关文档看下。

找到卡券-小程序打通

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V

找到:接口1:获取开卡插件参数

image.png

红色箭头返回的URL,就带了我们需要的encrypt_card_id, outer_str, biz 三个参数, 只是文档没有说明,这个是url里面带的值,而不是返回的参数,所以给查找带来了麻烦。

我们试试

image.png

(这里之前记得先调用公众号access_token接口,然后去公众号后台拿到卡片ID)

真的拿到了,我们需要的三参数, 然后通过url解析,得到参数。

wx.navigateToMiniProgram({
  appId: 'wxeb490c6f9b154ef9', //固定为此 appid,不可改动
  extraData: data, // 包括 encrypt_card_id, outer_str, biz三个字段,须从 step3 中获得的链接中获取参数
  success: function() {
  },
  fail: function() {
  },
  complete: function() {
  }
})

小程序里做个按钮,领取会员卡。点击事件执行上面代码

提示此小程序未绑定公众账号

此时我们登陆公众账号,绑定这个小程序。

绑定后,继续提示错误

"navigateToMiniProgram:fail appId "wxeb490c6f9b154ef9" is not in navigateToMiniProgramAppIdList"

image.png

看英文的意思是说小程序wxeb490c6f9b154ef9未绑定此公众号。 这里wxeb490c6f9b154ef9 并不是我们自己的一个小程序appid ,而是文档规定必须填写的wxeb490c6f9b154ef9,这个是官方的一个小程序appid, 原理是我们执行调整小程序,跳转到官方小程序领取会员卡。

比较麻烦的是,绑定官方开卡这个小程序,需要官方同意才可以,这里添加了绑定,官方2天没同意,已经失效。

到此,就实现了微信小程序,跳转到卡卷小程序,领取会员卡的开发过程。

Faas(Functions-as-a-Service ) 函数即服务,四大升级,助力移动开发。

云函数支持小程序语法

云函数升级,支持JavaScript语法操作数据库,以后会JavaScript,或者小程序开发,即可开发云函数,不再需要学习新的云函数语法。

升级一:语法升级

查询2条用户信息

小程序,H5写法

const query = Bmob.Query("_User");
  query.limit(2)
  query.find().then(res => {
    console.log(res)
  }).catch(err => {
    console.log(err)
 });

云函数写法

function onRequest (request, response, modules) { //系统内置代码
  
  let Bmob = modules.oBmob;
  const query = Bmob.Query("_User");
  query.limit(2)
  query.find().then(res => {
    const b = JSON.stringify(res)
    response.send(b);
  }).catch(err => {
    const e = JSON.stringify(err);
    response.end(e)
  });

}                                                                                    

运行效果

http://cloud.bmob.cn/c8bed465c9e6a524/aabb

升级二:web预览升级

1.外观升级

曾经云函数,返回直接返回一个json数据不美观,也不好看。

image.png

现在可视化展现接口细节。如果用浏览器直接打开一个 API 地址通常会得到一坨神奇的 JSON。

使用 restc 之后不仅格式化高亮了结果,而且还可以看到 HTTP 响应头。并且支持参数调试

image.png

对比:

image.png

2.功能升级

参数调试介绍:

云函数代码,接收参数name,点击send,打印:欢迎使用Bmob

  function onRequest(request, response, modules) {
      //获取SDK客户端上传的name参数
      var name = request.body.name;
      if(name == 'bmob')
        response.end('欢迎使用Bmob');
      else
        response.end('输入错误,请重新输入');
    }

image.png

这里感谢下饿了么团队,开源这么好用的HTTP 服务器中间件

升级三:开发调试升级

我们用网页编写云函数时,经常函数没写完,不小心忘记保存关闭了网页,代码需要重新写。新出的Bmob云函数本地开发调试工具,不再会发生这种问题。本地开发工具绑定Bmob应用,写好代码,命令自动上传,并返回函数结果。

使用文档地址:

https://github.com/bmob/bmobup

升级四:函数模板服务

年初,我们推出了函数模板服务,当你需要写一些常用功能代码时,可以使用我们的函数模板服务。例如你想开发公众号,有菜单管理函数、自动回复函数, 如果你想开发小程序,有手机号解密函数模板,如果你先采集数据,有数据采集模板。

如果你写了个功能,觉得大家可能用得上,也可以发布分享给大家使用,大家创建的时候只需要选择需要的模板即可。

image.png

大家对云函数有更多需求,可以给我提建议喔。