云开发系统架构设计

Posted 腾讯云云开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云开发系统架构设计相关的知识,希望对你有一定的参考价值。

导语

云开发的系统架构究竟是如何设计的?开发团队是怎样保证其安全性?云开发的强劲性能又是源于何处?本文为你一一解答。


10月19日,在首届「小程序 ·云开发」技术峰会上,微信小程序团队的周榕彬从系统架构、安全性与性能三个方面深入解析了云开发的架构设计。

▌云开发简介

小程序·云开发是腾讯云联合微信团队共同研发,为微信小程序开发提供一站式后端云服务。它通过打通小程序开发客户端与云资源的链路,实现了免登录鉴权及无缝微信开放能力,使得开发者无需搭建和运维服务器,只需使用平台提供的简易 API 进行核心业务的开发,即可实现小程序的快速上线和迭代,大大降低开发门槛,提高开发效率。

▌云开发的系统架构

云开发的系统架构大致分为三部分,分别是终端层、接入层和资源层。

云开发系统架构设计
终端层

终端层开发者工具提供了完善的开发测试和运营的能力,可以满足大部分开发者的需求,HTTP API则提供了在小程序外访问开发资源的能力,使用HTTP API,开发者可以在已有服务器上访问云开发资源,实现与云开发的互通。

接入层

接下来是接入层,所有的云开发请求都会经过微信后台,由微信保障通信安全和身份鉴权。

资源层

最后一层是资源层,该层统一由腾讯云来提供服务,包括了函数服务和后台服务,以及保障我们云开发资源的安全性。

云开发系统架构设计

总体来说,云开发涉及到微信、腾讯云还有开发者三方。 我们从底层打通了微信自研网络和云网络,以及开发者在腾讯云上已有的服务,在这个基础上面构建了一体化的云端网络。 开发者可以方便的将云开发结合到已有的服务里。

容灾架构

容灾架构是系统架构中必不可少的部分。在云开发的容灾架构中,后台采用多IDC和多园区的部署,我们每一个园区都会冗余一定的服务能力,当一个园区发生故障的时候,请求会自动路由到另外两个园区,由另外两个园区提供服务,对业务不会产生影响。
云开发系统架构设计
在网络层面,微信采取了就近接入的方案,来提高了接入质量。 在这个基础上,借助newDNS实现更精细和更实时的引导,通过识别用户客户端版本、网络环境等数据,下发IP列表,引导用户接入到最合适的接入点,进一步提高用户的接入质量。
运维保障体系
除了容灾架构,运维保障体系同样是系统架构中不可或缺的一部分
云开发系统架构设计

云开发的运维保障体系中,自动化测试保障了云开发系统的稳定,而多维度的监控告警可以帮助我们实时发现系统的波动和异常。借助云开发的云资源和管理调度系统,我们做到了服务自动缩扩容。最后是我们的运维保障团队,7X24小时为云开发用户提供服务。

那么,我们的云开发的稳定性做得怎么样呢?是否适合企业级小程序使用?目前,我们的标杆用户,单个小程序单日调用量超过2亿,我们的大盘业务整体可用率达到了99.99%,远高于 SLA 给出的99.9%,对于大部分小程序来说我们云开发都是非常适合的。

除了加固云开发系统,未来,我们会推出包括云函数灰度发布、自定义告警和全新的日志系统在内的一系列功能,以提高开发者业务的稳定性

▌云开发的安全性

接下来介绍云开发的安全性,云开发通过全链路的票据系统来保证整个请求链路的安全。首先是用户请求从客户端到微信后台这部分,云开发请求借助了微信底层的私有协议和微信后台进行通信,私有协议 mmtls 是微信参考了TLS1.3 草案标准设计和实现的,业务层数据加上 mmtls 后,由 mmtls 提供通信安全。具体做到了防窃听防篡改防重放防伪装

云开发系统架构设计

微信后台收到云开发请求之后会校验身份,并通过全程票据保证数据的安全性。全程票据的核心方案,用户登录后会给客户端下发一个票据,客户端每次请求都会带上票据,请求在后台服务的整个处理链条中,所有对核心数据服务的访问,都会被校验票据是否合法,非法请求会被拒绝,从而保障用户隐私数据只能用户通过自己的客户端发起操作来访问。

云开发系统架构设计
由于云开发的整个链路都是经过鉴权的,我们在执行云函数时,后台会自动校验请求票据,开发者可以 无缝地使用微信的开放能力 ,无需再通过常规的 OAuth 授权并自行维护 AccessToken。

▌云开发的性能
下面以云函数为例,介绍云开发的性能。
执行云函数需要经过创建容器、下载代码、部署执行三个部分。由于容器的启动是一个很费时的操作,所以我们通过函数实例复用、容器实例预创建,热点代码缓存等优化,将云函数容器的启动时间 从秒级变成了毫秒级
云开发系统架构设计

基于此处的三个优化,开发者可以享受到:首先是代码的精简,我们创建完容器之后需要下载代码,代码精简会使得下载时间缩减;其次是资源的复用,在云函数里面我们会操作数据库,建立数据库的连接,这些连接如果能够得到复用,也可以缩小云函数的执行时间;另外,优化还有利于公共代码的剥离,我们会对代码做缓存,如果云函数的公共代码剥离开来,这部分的代码就会得到更好的缓存效果;最后则是使云函数保持活跃,以避免函数实例被系统回收。

为了提高云函数的性能,我们也在通信、业务和网络层做了一些优化,比方说我们改造了前面提到的私有协议,优化了长连复用。

云开发系统架构设计
前面提到我们存储自带的一个 CDN功能 ,接下来我们会发布一系列的CDN优化,包括 QUIC TPG 格式。QUIC是新的应用层协议,耗时比HTTP2减少15%,在网络比较差的情况下能够 减少20%的耗时 。而 TPG 是微信自研的一个图片格式,能使文件大小 减少40% ,下载速度更快。

最后来说说开发者比较关心的性能问题。今年以来,云函数请求性能提升了60%,我们也在持续做优化,目前在我们的测试环境中,小程序端云函数的请求时间已经降到140毫秒/次。相关的优化我们会在下一个版本中发布,敬请期待。

云开发系统架构设计


 更多精彩 







云开发,不止于「快」


云开发

Tencent CloudBase



      点击在看让更多人发现精彩

以上是关于云开发系统架构设计的主要内容,如果未能解决你的问题,请参考以下文章

基于微服务和 Docker 的 PaaS 云平台架构设计

微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计

某城商行开发测试云平台架构设计和运维方案设计实践经验分享

基于实时深度学习的推荐系统架构设计和技术演进

基于实时深度学习的推荐系统架构设计和技术演进