云开发的架构奥秘
2022-12-27•
围观热度 1183•小程序/H5/公众号
体验了云开发的便捷与高效,你可能会发出“哇”的一声惊叹,同时你也会疑惑,究竟云开发是怎么做到的呢?省去了域名证书,又能快速拿到用户的 openid 等信息。通过本节的架构揭秘,相信你就会理解为什么云开发的功能会有如此的设计。
图 12-33 是云开发的架构图,可以看出,请求的来源主要有两个:一个是从小程序端,另一个是从服务器端(云函数或云服务器)。无论哪种来源,一律会经过云开发的网关服务。但有一点不同的是,从小程序端过来的请求会先经过微信后台,因此这些请求都会带上该请求的用户信息,而服务器端的请求则没有这些信息。因此在设计上,小程序端过来的请求只拥有个人用户的权限,而服务器端的请求都具备管理员的权限。云开发暴露给用户的数据库、存储、云函数等能力,其底层实质上都是腾讯云的能力,只是针对性地做了一些不同的处理罢了。
那么云开发网关服务层究竟做了些什么工作呢?其实主要是从以下 4 个方面保证了全平台请求的性能、稳定和安全。
默认接入负载均衡
对于有一定规模的小程序来说,一台服务器远远支撑不了大量用户的请求,随时会被大量请求冲垮,造成服务器无法正常响应用户的请求。最常见的办法是堆机器,用机器来支撑大量的请求。云开发也是采用了同样的做法,接入了腾讯云自研的负载均衡 CLB,除了可顶住大量用户的请求外,还可以非常方便地进行扩容,最关键的是,这些运维的操作不需要用户操心,使用云开发就默认接入了负载均衡,在套餐配额的范围内都可以自由使用。
平台维护数据库连接池
在后台服务中,除了网关层的请求并发是服务的一个瓶颈,数据库的读写往往也是一个令人头疼的问题。如果是自建服务,你需要去维护这个连接池,并且要考虑主从数据库的同步问题。而云开发的网关层则帮开发者处理好了这些逻辑,并且对数据做了一层缓存,提升读取的性能。
免除鉴权的烦恼
无论是开发 Web 应用还是小程序,比较麻烦的是请求的鉴权问题,意思就是这个请求是否合法,能否允许这个请求进行资源的操作。云开发已经提供了一套标准化的鉴权体系,在小程序端的请求一律会带上用户信息,用户一般只能操作与他相关的资源;而在服务器端的请求一律具有管理员权限,具有最高的权限可以操作任意资源。当然,你也可以设计自己的一套体系,但还是建议你围绕官方提供的这套体系进行自定义设计,比如可以使用 JWT Token 进行鉴权,但 Token 中会包含用户的 openid 等信息。
全链路一致性
校验为了保证数据的安全,云开发还在整个请求的通路引入了全程票据的办法。大体的原理就是小程序侧在初始化请求的时候,微信后台与云开发网关服务会联合下发一个票据,这个票据具有一定的时效性,在有效期内,云开发的请求都会带上这个票据并校验该票据是否合法,非法的请求会被拒绝,这样就能有效保障用户的数据安全。