腾讯TEG云架构平台部 研发工程师 杨哲、刘翔
腾讯CSIG云产品部 前端工程师 王伟嘉
小程序云开发拥有易接入、高性能、高可用等特性,提供完整的原生云端能力支持,可有效降低后端与运维成本,帮助开发者更专注于业务,实现快速上线与迭代。其中,小程序云开发的数据库是一个既可在小程序前端操作、也能在云函数中读写的 JSON 数据库,强大且稳定。
本篇,将简要地为大家介绍,我们是怎样为云开发构建一个安全易用、高性能和高可用的nosql文档型数据库。
在介绍云开发数据库的架构前,我先简单介绍一下云开发数据库的设计背景。
对于小程序等应用的开发者而言,传统的开发模式和敏捷开发模式除了需要开发者编写核心的业务逻辑外,都不可避免地需要对后端的基础设施进行管控和优化。比如,一个应用的逻辑可以很简单,可一旦涉及到应用的发布部署,就需要开发者花费大量精力进行服务器、数据库、网络等基础设施的申请和搭建,还要考虑这些后端基础设施的稳定性、可用性和监控指标。这一切耗时耗力又与产品的核心功能无关,对于需要快速开发和试错的产品,传统的模式开发速度慢、部署和运维成本较高。
但通过serverless无服务器架构,用户可以无需关心后端的基础设施,直接通过云API一键接入云函数、云数据库和云存储来获取算力、数据库、存储等基础的后端能力。这种随用随取的开发模式,不但可以让开发者能更专注于自身的业务逻辑,还具有低成本、开发速度快以及免运维等诸多优势。对于小程序云开发而言,它结合了serverless和小程序的两者的开发理念,以微信作为小程序前端运行的依托,同时又通过接入云函数、云数据库和云存储,来达到对后端基础设施的开箱即用。这些特性可以在很大程度上解放小程序开发者的生产力,降低开发的成本和难度,让小程序开发者向全栈发展,更容易开发出稳定高效的后端服务。
例如,腾讯相册这款官方小程序就使用云开发来构建。
传统的开发模式,开发者必须从小程序端开始,发送一系列请求到后台进行鉴权,文件和数据库处理等繁琐的操作,同时也需要耗费不少精力进行许多基础服务的设计和搭建以及后期的运维等工作。
但通过云开发,开发者可以天然地获取微信的登录态、方便地获取存储和数据库等能力,其它的负载、容灾、监控等,都由云开发来负责,而这一切都对开发者是透明的。这就大大提高了开发者的效率。
通过云开发,腾讯相册小程序将开发时间由1周以上压缩到只有1到2天。
云开发数据库架构介绍云数据库作为云开发中的数据库组件,具有以下几个特点:
1、安全性:对于数据库而言,安全性是第一位的,丢数据的情况不可容忍
2、易用性:云数据库开箱即用,用完即走,无需运维部署
3、低成本:云数据库支持按访问量、数据量收费,成本控制更精细更低廉
4、高性能:云数据作为一款nosql文档型数据库,天然具有非常高的读写性能。同时我们底层硬件也使用了固态硬盘来提供更强的读写能力
5、灵活性:当用户业务量扩展,需要更大规模更高性能的数据库时,云数据库也支持热迁移上云,过程用户无感知
下面,我将对云开发数据库的基本架构做一个简要的介绍
云数据的整体架构可以分为这么几部分:最上层的客户端、中间部分的接入层、底部的存储层及周边管控、告警、备份模块等
我们从最上层的客户端部分看起,开发者通过云开发提供的SDK,可以在微信小程序和qq小程序中一键获取云数据库的登录态,然后将数据读写请求发送给接入层。接入层收到用户的读写请求后,由keeper和agent这两个无状态的模块对接入的读写请求进行相关处理。