Serverless 开发前端初尝试

啥是云开发

云开发serverless是一种模式,和传统模式的区别在于开发者不用维护服务器。服务器的日常维护, 负载均衡,扩容和减容, 运维,安全,日志等都交给了云开发服务提供商比如AWS Lambda,microsoft Azure,国内的微信等等。通常分为2类,Backend-as-a-Service (BaaS): 提供第三方服务比如鉴权,音频转文字之类的;开发者一般通过API调用。Function-as-a-Service (FaaS),serverless一般都是指Faas,开发者可以在本地编写服务端的逻辑,然后部署到云服务商提供的容器中。我们也可以开发一般serverless一半传统服务的应用

serverless app运行在哪里呢

云开发的应用部署在事件驱动的, 自动加载的容器中,比如用Knative for Kubernetes构建的Faas环境。Knative 是个开源的社区项目,可以在Kubernetes上创建容器镜像并在Kubernetes 平台上运行。

当代码运行时,服务商动态的分配资源给你,故当代码不再运行时,意味着你不用付钱。serverless容器有以下特点:

  • Stateless, 易于数据整合
  • 支持短时间内部署运行,释放,不需要永远占用资源
  • 事件驱动,包括应用内事件,云服务事件等等

这样的特性比较适合开发一些应用如聊天机器人,日历等。

serverless app的缺点

  • 云服务商对serverless 应用的规范限制
  • 云服务商的标准差异导致的迁移成本

微信小程序云开发尝鲜

先进行各种前期的项目配置:

  • 打开微信开发者工具,创建新项目
  • 填写appid,勾选云开发,选择一个模板如:todolist
  • 云开发实例没有的话创建一下
  • (刚创建的云开发环境可能会有10min左右的时间不可用)

可以看到project.config.json有个cloudfunctionRoot表示云函数文件夹,开发工具中可以见到该文件夹有个特殊的图标

点击控制台查看云开发管理台:
包含运营分析面板,数据库,存储,云函数等面板

数据库

JSON格式的数据存储,每一条记录都是JSON对象, 有_id字段作为唯一标识字段。而且发现界面也跟之前用过的mongoDB的GUI设计十分相似,比较好上手。简单介绍下增删改查的语法:

add

db.collection('todos').add({// The data field represents the JSON data to adddata: {// _id:'todo-identifiant-aleatoire', // You can choose a custom _id and use the one automatically assigned by the database in this scenariodescription: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],// Add a geographical location to the to-do (113°E, 23°N)location: new db.Geo.Point(113, 23),done: false},success: function(res) {// The res is an object with the _id field, marking the id of the record just createdconsole.log(res)}
})// 或者Promise式的写法db.collection('todos').add({// The data field represents the JSON data to adddata: {description: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],location: new db.Geo.Point(113, 23),done: false}
})
.then(res => {console.log(res)
})

get

db.collection('todos').doc(id).get({success: function(res) {// res.data contains the data of that recordconsole.log(res.data)}
})db.collection('todos').where({done: false
})
.get({success: function(res) {// res.data is an array containing the two records defined aboveconsole.log(res.data)}
})db.collection('todos').get({success: function(res) {// res.data refers to the data of all records (no more than 20) to which the user has access permission in the collectionconsole.log(res.data)}
})// 然而云函数的查询最大记录数限制为100。。。
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {// Get the total number of the collection records firstconst countResult = await db.collection('todos').count()const total = countResult.total// Calculate in how many times you can get itconst batchTimes = Math.ceil(total / 100)// Carry all the promise arrays with readconst tasks = []for (let i = 0; i < batchTimes; i++) {const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()tasks.push(promise)}// Wait allreturn (await Promise.all(tasks)).reduce((acc, cur) => {return {data: acc.data.concat(cur.data),errMsg: acc.errMsg,}})
}

update

const _ = db.command // 这里是命令方法
db.collection('todos').doc('todo-identifiant-aleatoire').update({data: {// Indicates that the database automatically increases the field by 10progress: _.inc(10) // or 'doing';这个方法表示increased by 10;},success: function(res) {console.log(res.data)}
})

delete

// The async await syntax is used
const cloud = require('wx-server-sdk')
const db = cloud.database()
const _ = db.commandexports.main = async (event, context) => {try {return await db.collection('todos').where({done: true}).remove()} catch(e) {console.error(e)}
}

云函数

云函数可以简单理解为运行在云端容器中的代码,微信开发者工具钟可以右键,然后点击上传即可运行。下面给这个todolist的新增按钮增加一个埋点功能实践一下云函数:
创建一个sensor云函数并上传:

在添加todo按钮处增加云函数调用:

接下来进行操作,点击添加todo:

看看我们的云端数据库就新增了sensors collection,且插入了一条记录:

Serverless 开发前端初尝试相关推荐

  1. 前端初尝试---品优购首页(只用HTML和CSS)

    品优购首页(只用HTML和CSS) 预览 主页HTML码 base.css common.css index.css 预览 主页HTML码 <!DOCTYPE html> <html ...

  2. 阿里云杜欢:云上Serverless开发能力将成为前端的“金手指”

    云 + 端模式成为当前前端开发的新风向,由此而来的 Serverless 正帮助前端工程师提升开发能力和效率.InfoQ 记者在近日有幸在 2019ArchSummit 全球架构师峰会北京站采访到了阿 ...

  3. 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务

    更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍如下: Puppeteer is a Node library which provides ...

  4. Serverless 实战 —— 前端也可以快速开发一个 Puppeteer 网页截图服务

    Serverless 实战 -- 前端也可以快速开发一个 Puppeteer 网页截图服务 更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍 ...

  5. Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践

    简介:当下,Serverless 概念很火,很多同学被 Serverless 的优势吸引过来,比如它的弹性伸缩,免运维,高可用,资费少.但真正使用起来去落地的时候发现问题很多,大型项目如何组织函数,性 ...

  6. 前端入门 前端自学路线 web开发前端如何学习

    本文介绍前端入门之路,以及之后对前端应该怎么学,大概学哪些东西.作者在前端.后端入门的时候,花了大量时间到CSDN.知乎.百度上去找资料,但是有的说的不是太复杂, 就是一句话带过,那个时候很苦恼.现在 ...

  7. 后端开发者开发前端必会的工具(一):样式调试篇

    又来为大家分享干货了,今天主要是分享一点关于后端工程师开发前端比较苦恼的一个问题<如何去调试前端?>,我相信这是所有后端开发者比较困惑的,如果有这个困惑的,记得关注"程序员晓晓& ...

  8. MEF 插件式开发 - DotNetCore 初体验

    背景叙述 在传统的基于 .Net Framework 框架下进行的 MEF 开发,大多是使用 MEF 1,对应的命名空间是 System.ComponentModel.Composition.在 Do ...

  9. Java开发 - Redis初体验

    前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库.两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的 ...

最新文章

  1. 《C++ Primer》 Part V (Advanced Topics)
  2. 开发常见错误解决(1)注册.NET EnterpriseServices COM+组件,事务服务不可用
  3. 解聘!“双一流”教授被通报批评
  4. asp.net中用后台代码创建datatable和html表格,ASP.NET中用后台代码创建DataTable和HTML表格...
  5. 实战:基于OpenCV进行长时间曝光
  6. 我是如何一步步拿下 Google Offer 的?
  7. QWidget中的ChildAt()函数使用试验
  8. Computer Vision阅读文章总结纪要
  9. 2018.08.22 NOIP模拟 string(模拟)
  10. Software caused connection abort: socket write error 问题原因推测
  11. 乐至天气预报软件测试,乐至天气预报15天
  12. chrome java支持_如何将JAVA插件支持Chrome
  13. 网管教程+从入门到精通软件篇
  14. (一)MATLAB中的输入与输出
  15. WKWebView使用及注意点(keng)
  16. 深入理解计算机系统 (第 1 节)
  17. quickBI嵌入自研系统
  18. 多级列表关联到标题样式
  19. Zookeeper的领导者选举机制解析
  20. linux git代码明明是最新版本的,status为啥全是modified?

热门文章

  1. 虚拟机 Ubuntu16.04开机蓝屏问题
  2. 浅谈CTF中各种花式绕过的小trick
  3. FPGA入门:QuartusⅡ实现半加器,全加器,四位全加器
  4. return int()函数 c++解说
  5. APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3)
  6. 知识图谱从入门到应用——知识图谱推理:基于表示学习的知识图谱推理-[嵌入学习]
  7. linux下u盘怎么找,redhat怎么找到u盘呢 ?
  8. Java: Tomcat到底是干嘛的?
  9. 会计学计算机技能,财经会计专业,需要懂IT技能吗?编程呢?
  10. UML类图以及常用集合