写点什么

如何使用云开发数据库构建更生动的小程序?

  • 2020-07-13
  • 本文字数:1941 字

    阅读完需:约 6 分钟

如何使用云开发数据库构建更生动的小程序?

长连接服务被广泛应用在消息提醒、即时通讯、推送、直播弹幕、游戏等场景。本篇文章将介绍云开发数据库的长连接服务 - 实时数据推送,使用它来构建更生动的小程序。

什么是实时数据推送?

通过云开发数据库的实时数据推送能力,小程序端可实时监听数据库变更,即它支持根据开发者给定的查询语句进行监听,每当查询语句的结果发生变化时,小程序端就会收到包含更新内容的推送,并对实时数据变化做出响应。


具体示例如下图:客户端 1 修改数据且符合监听条件,当数据库收到变更时,会将客户端 1 的变更内容推送到其它客户端。


提供哪些能力来帮助开发者构建小程序

自建长连接服务,需要设计繁杂的系统架构,并且有大量的开发工作,使得开发成本较高。当长连接服务开发完成投入使用后,将不可避免的会带来额外的维护工作。对于基础设施、服务安全等维护也需要耗费大量的时间成本和人力成本。此时,开发者可以进行小程序的实际开发工作。接入微信鉴权体系来获取用户登录态、使用微信开放接口等,基于长连接服务来实现具体的业务逻辑。


使用实时数据推送有如下优势:


  1. 零开发


使用实时数据推送无需通过编写服务端代码来自建完整服务,降低了开发成本和开发者的使用门槛,可以将精力聚焦在核心业务的设计与开发上。


  1. 免鉴权


使用实时数据推送无需接入微信鉴权体系,天然集成了原生微信能力,与微信的登录无缝整合,开箱即用,免鉴权获取微信用户信息、使用微信开放接口。减少了开发者对鉴权功能的开发和维护工作。


  1. 零维护


使用实时数据推送无需维护基础设施、安全管理等问题,降低维护成本。

整体架构

大家都听过网上段子说哪有什么岁月静好,只是有人替你负重前行。我们刚才了解了实时数据推送的零开发、零维护、免鉴权等天然优势,那么这些能力岁月静好的背后是谁替它们负重前行呢?让我们来揭开实时数据推送技术架构的神秘面纱。



请求从小程序到接入层经过的是 WebSocket 协议,再到安全校验层进行权限验证。安全校验提供简单的 ACL 标记,也支持高级的数据库安全规则语法实现精细化访问权限控制,可以根据业务实际情况进行选择。对于路由层以及监听推送层,将从可用性、可靠性和性能方面来进行介绍。

可用性

对于服务首当其冲是可用性。首先是异常节点自动剔除来确保在部分节点出现问题时,服务正常可用。实时数据推送路由层通过 Tars 的熔断和自动剔除机制来屏蔽掉异常节点。监听推送层使用 ETCD 实时心跳检测,2 秒上报心跳、6 秒检测到异常,立即执行相关处理逻辑来实现异常节点自动剔除。其次通过一致性哈希方案提升性能、保证可用性。每次长轮询请求都有 QueryID,请求从路由层到监听推送层的对应关系由一致性哈希生成算法,使得监听推送层负载均衡。最后还有相同条件对应相同的 QueryID 来提高性能。

可靠性

从小程序到实时数据推送服务是长轮询且无状态,为业务可靠提供保驾护航。事件自增 ID 可以保证收到推送事件是有序的。此外,对事件进行了本地和 Redis 的两级缓存来确保数据安全。支持客户端掉线 3 分钟,事件不丢失,断线重连后仍能正常按序收到事件。

高性能

实时数据推送服务的性能方面,我们做了一些优化工作:


  1. 使用树的数据结构来保存 watch 条件作为索引,对监听条件匹配索引算法进行优化。

  2. 对于变更事件的匹配,采用多协程并发流水线:匹配事件、推送事件、缓存事件。

  3. 当短时间内有多条符合监听条件的事件产生时,多个事件将会在合并后再推送到客户端。减少了多次推送事件的请求网络耗时,性能提升明显。

简单易用的 API

实时数据推送提供了便捷的 API 供使用。开发者可根据实际场景,按指定集合、查询条件、排序方式、限制返回数量等来实现业务逻辑。更详细的说明可参考微信开放文档 - 云开发实时数据推送。


丰富的应用场景

实时数据推送可以应用到许多实际业务场景中,如即时通信、状态同步以及团队协作等方面。无论是小程序或小游戏都可以使用云数据库的实时数据推送来实现相关场景的实际业务功能。


  1. 即时通信

  2. a. 小程序:直播聊天室、弹幕等

  3. b. 小游戏:区服聊天、房间聊天、私信功能、动态消息等


成语偷菜小游戏就是一个经典的即时通信客户案例,它利用实时数据推送实现了偷菜的动态消息提醒。



下图是在线聊天室 Demo 演示,可在微信开发者工具中开通云开发体验。



  1. 状态同步

  2. a. 小程序:聊天提示状态好友正在输入、好友 1V1 问答 PK 等

  3. b. 小游戏:五子棋等


微信读书每日一答小程序的问答 PK 环节也使用到了实时数据推送,在对答游戏中即时同步双方答题的倒计时、分数、结果等状态。



下图是使用实时数据推送实现的五子棋小游戏,推送服务主要用于同步黑白两手棋子的状态。



  1. 团队协作

  2. a. 在线共享文档

  3. b. 项目管理协作

结语

以上是给大家分享的内容,希望能帮助到各位开发者们更好地应用实时数据推送,为小程序锦上添花。最后,欢迎关注云开发公众号,不定时推送最新功能以及云开发实战高质量技术文章。


2020-07-13 10:191634

评论 1 条评论

发布
用户头像
类似rethinkdb的做法?
2020-07-13 11:32
回复
没有更多了
发现更多内容

Android开发自学技巧!rxjava扔物线

android 程序员 移动开发

Android开发还会吃香吗,Android开发经典实战

android 程序员 移动开发

打破 Serverless 落地边界,阿里云 SAE 发布5大新特性

阿里巴巴中间件

云计算 阿里云 Serverless 微服务 云栖大会

Python代码阅读(第42篇):将输入转换成列表形式

Felix

Python 编程 Code Programing 阅读代码

42岁程序员面试,动脑学院vip课程百度云

android 程序员 移动开发

Android外包是如何转正网易的,大厂Android核心面试题出炉

android 程序员 移动开发

Android开发岗还不会这些问题,15个经典面试问题

android 程序员 移动开发

Android中高级面试必知必会,Android学习路线

android 程序员 移动开发

Android小程序开发实例,扔物线五期

android 程序员 移动开发

Android研发岗面试复盘总结,快速从入门到精通

android 程序员 移动开发

Activity的6大难点你会几个,面试复盘

android 程序员 移动开发

分布式事务最经典的七种解决方案

Java 程序员 架构 面试 分布式

android热更新,扔物线课程怎么样

android 程序员 移动开发

跨越行业绊脚石,阿里云函数计算发布7大技术突破

阿里巴巴中间件

阿里云 云原生 中间件 函数计算 云栖大会

android插件化资源冲突,动脑学院课程值得买吗

android 程序员 移动开发

跨越行业绊脚石,阿里云函数计算发布7大技术突破

997页手淘Android面试真题解析火爆全网,Android基础72问

android 程序员 移动开发

AndroidHook机制连简单实战都不会凭什么拿高薪,Android开发两年

android 程序员 移动开发

Android开发入门教程!扔物线学堂

android 程序员 移动开发

android热更新图片,动脑学院vip最新云盘

android 程序员 移动开发

Android程序员如何有效提升学习效率,不可多得的干货

android 程序员 移动开发

Android事件分发机制及设计思路,Android程序员校招蚂蚁金服

android 程序员 移动开发

Android免打包多渠道统计如何实现,技术实现

android 程序员 移动开发

Android开发面试题目,享学课堂android怎么样

android 程序员 移动开发

Android开发社招面试解答之性能优化,Android开发面试题及答案

android 程序员 移动开发

英特打造通向E级计算时代“利器”,XPU架构功不可没

科技新消息

Android事件分发机制收藏这一篇就够了,阿里一线架构师技术图谱

android 程序员 移动开发

Android体系化进阶学习图谱,动脑学院课程值得买吗

android 程序员 移动开发

Android大厂面试真题解析大全,腾讯T3大牛手把手教你

android 程序员 移动开发

打破 Serverless 落地边界,阿里云 SAE 发布5大新特性

互联网 科技

Android经典面试,享学三期Android架构师

android 程序员 移动开发

如何使用云开发数据库构建更生动的小程序?_服务革新_刘国玮_InfoQ精选文章