1. 首页>
  2. 腾讯云代理

云开发系统架构设计

腾讯云 2019年11月04日 浏览29

    腾讯云代理 腾讯云新闻 腾讯云代理 腾讯云直播申请 游戏上云

摘要:

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


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

▌云开发简介


image

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

▌云开发的系统架构

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


终端层

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

接入层

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

资源层

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

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

容灾架构

容灾架构是系统架构中必不可少的部分。在云开发的容灾架构中,后台采用多IDC和多园区的部署,我们每一个园区都会冗余一定的服务能力,当一个园区发生故障的时候,请求会自动路由到另外两个园区,由另外两个园区提供服务,对业务不会产生影响。

在网络层面,微信采取了就近接入的方案,来提高了接入质量。在这个基础上,借助newDNS实现更精细和更实时的引导,通过识别用户客户端版本、网络环境等数据,下发IP列表,引导用户接入到最合适的接入点,进一步提高用户的接入质量。

运维保障体系
除了容灾架构,运维保障体系同样是系统架构中不可或缺的一部分

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

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

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

▌云开发的安全性

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

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

云开发的资源(数据库、存储)的访问安全性则由腾讯云访问管理系统(CAM)来提供,所有访问云资源的请求,CAM自动会校验请求的权限。另外一个是云数据的自身安全性,腾讯云数据库天然就自带备份、无损恢复等功能;而云存储则自带了 CDN 加速,上传静态资源后获取到的下载地址,就是 CDN 已经加速的地址。数据安全有很强的保障。

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

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

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

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

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

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



相关文章

在线客服
淘宝购买
腾讯云直播申请 title=
+成为腾讯云VIP客户 腾讯云直播申请 客服电话

15818558013

0755-33940501-803

0755-33940501-808