| 简介 小程序云开发-实时数据推送是小程序云开发即将发布的一项云服务,可以监听云端数据库的数据变化并实时推送到小程序,节省了开发者搭建成本,是小程序实时推送的高效实用解决方案。本文是前端峰会对腾讯高级工程师周子杰的专访,他将详细阐述实时数据推送服务的开发背景、技术方案以及未来相关产品规划。本次专访由“云加社区”支持。
前端峰会:请简单介绍一下自己和目前的工作。
周子杰:刚毕业时加入腾讯文档团队,负责腾讯文档实时编辑系统的开发和冲突处理算法的设计。今年转入腾讯云开发团队,负责打造低延迟、高并发、高可用的数据库实时推送服务。毕业三年来一直从事实时推送系统的工作,有时也做一些 Node.js 接入层的工作。目前是腾讯的资深研发工程师。
前端峰会:您之前负责腾讯文档实时编辑系统的开发,现在负责云端开发——实时数据推送系统。两者都对数据的实时性都有一定的要求。您觉得这两者之间有哪些相同点和不同点?
周子杰:从设计上来说它们有相似之处,但是各有侧重点:
前端峰会:请您讲讲前端是如何判断数据丢失的?
周子杰:我们现在的设计是这样的:后端监控到有新的事件,就推送给前端。推送数据消息事件的时候,都会附带有序的编号,比如我们推送了事件编号1和事件编号2给前端,但是突然发现下一个事件是事件编号5,那么就可以判断中间丢了一些数据,那么客户端就会请求后端重新发送丢掉的数据。
前端峰会:根据您之前开发腾讯文档的经验,在实时数据推送系统中可以运用到什么?
周子杰:腾讯文档和云开发-实时数据推送系统有共同的技术,很多都是通用技术,特别是在数据可靠性方面,他们参考了文档很多成熟的技术方案。他们之间的主要区别在于,他们需要支持的并发用户数不一样。文档支持的并发用户数不会那么多,假设我们的产品日活用户是一百万,那么后端同时连接的用户数最多可能在十万左右。实时数据推送系统是一个云服务,主要就是给客户开发的产品提供数据推送服务。云开发是同时给大量应用提供服务,需要高并发的支持,所以我们在高并发方面做了更多的优化。
前端顶尖:小程序云开发项目中实时推送系统主要的需求背景是什么?
周子杰:需求背景主要有两方面:
前端峰会:这个概念现在比较火,小程序云开发也是一个服务,给开发者提供云函数、云数据库、云文件存储等。能不能解释一下云数据库和普通关系型数据库在数据存储上的区别?为什么会选择云数据库?
周子杰:是一个模糊了前端和后端关系的概念。云开发是云的实际实现,但与一般的服务相比,增加了数据库、文件存储等基础能力,形成完整的应用服务中台,可以支持小程序、Web、等的开发。对于一个前端开发人员来说,可以用云开发来做一些后端的功能,大大降低了前后端的沟通成本。
云开发的数据库和普通数据库的区别在于:传统的后端服务需要先部署或者等数据库,然后通过后端服务操作数据库,再提供接口给前端,前端同学如果想操作数据库就必须通过接口,中间的沟通成本非常高。
云开发的数据库其实是一种服务,从整个开发链条来看,和传统开发没什么区别,也需要建立自己的后端服务,但云数据库相当于一个桥梁,连接后端服务和前端,主要是为前端开发者提供的数据库服务。云开发的数据库不需要后端提供接口API,前端同学只需要写几行调用代码就能实现数据库的增删查改,不再需要关心后端用什么数据库,如何搭建,沟通成本和使用成本大大降低,用户可以更加专注于自己的业务,而不用担心其他配置问题。
前端峰会:在开发实时推送系统的过程中,有没有遇到什么技术痛点?是如何解决的?
周子杰:我们现在面临的最大技术痛点是如何支持更多的实时连接。数据库实时推送是一个新的模块,实现高可用不是一件简单的事情。第一次压测的时候,我们8核的机器支持的连接数最高也就几千个左右。经过多次优化,现在并发和可用性都非常高。后续还会继续优化迭代,更好地应对高并发需求。
前端峰会:构建数据库实时推送系统需要考虑哪些因素?如何保证低延迟、高并发、高可用?具体有哪些做法?
周子杰:实时推送项目是腾讯云和微信小程序合作的功能,整体架构分为小程序前端SDK、中层接入层、后端三个模块,各自承担的业务有:
为了保证数据的可靠性和完整性,我们在模块设计时采用了互不信任原则,也就是上面提到的三个模块之间互不信任。为此我们做了很多冗余设计,如果系统中某个模块没有被成功调用,我们会采取一些措施来弥补这个不足。比如小程序的SDK在接入层会定期查询最新消息事件的版本号,如果发现版本号和本地的版本号不匹配,就会重新拉取该消息事件。这样,即使出现数据丢失、断网等异常情况,数据的可靠性依然可以得到保证。
为了保证低延迟,除了在接入层提供接口外,所有后端服务都采用基于TARS框架的RPC通信,TARS是一个成熟的开源框架,性能非常出色。
为了处理高并发,我们不断优化接入层,以维持尽可能多的实时连接。
前端峰会:实时推送系统未来有什么规划?
周子杰:目前推送系统的核心功能已经开发完毕,正在腾讯内部的众多小程序/小游戏中进行测试,计划在8月下旬正式对外开放。另外在产品层面,我们会进一步优化接入层。前端需要和后端、接入层打交道,而接入层需要提供长连接服务,有了长连接服务的存在,消息才能推送到客户端。所以为了保证同一台机器能支持更多的长连接服务,我们要减少部署在接入层机器上的服务。目的是让接入层服务更轻量,然后把更多的服务交给后端。就是说接入层是一个只需要保持长连接功能的非常轻量级的服务,接入层的其他一些功能都移到后端。
---------下面还有更多精彩----------
活动推荐
极速启动,体验流畅,稳定可靠
——如何实现低成本开发小游戏的目标?
使用小程序云开发能给你带来哪些独有的优势?
有哪些使用云进行小游戏的实际案例研究?
8 月 17 日
腾讯云开发团队及微信团队
相聚广州,我们将解答您的疑问!
现场还有实践教程,教您如何开发实时战斗游戏。