近两年,国内文档类 SaaS 产品层出不穷,合作云文档作为云时代办公的一种工具和形式。与传统的离线办公软件不同,合作云文档更加重视合作的沟通和效率,同时作为工具类产品也同样关注性能和体验。就在不久以前,《一个救命文档的 24 小时》刷屏朋友圈,在河南暴雨灾情中,腾讯文档疾速响应灾区须要,晋升稳定性,确保产品体验。
腾讯文档脱胎于 QQ 家族旗下一款团队合作 IM 软件 TIM 的在线文档模块,最后基于开源软件搭建的技术架构,随着业务的高速倒退,已无奈齐全满足业务的需要,且积攒下了比拟惨重的技术债权。团队通过谨慎的探讨,决定从底层开始,分模块,逐渐重构整个技术体系。在技术迭代的过程中,团队也在一直摸索和尝试业内一些先进成熟的技术解决方案。
腾讯文档整个技术体系内集成了许多微服务为腾讯文档提供业务反对,比方 图像识别、SSR、截图、文档预览 等,这些微服务须要从效率和老本需要登程思考解决方案,以实现可扩大、易保护、升高开发成本的指标。随同着公司自研上云的浪潮,在近来的开发中,团队在多个微服务项目中深刻应用 腾讯云 Serverless 架构,满足了业务的需要,获得了不错的成果。
01. 腾讯文档 x Serverless 云函数多场景利用
1. 应答流量顶峰低谷
办公类产品是有显著的流量潮汐的,比方上午 8 点到 12 点,下午 2 点到 6 点这几个时段是流量比拟大的时候,其余时间段尤其是凌晨没什么流量。随着用户量疾速减少,这种潮汐法则尤为显著,顶峰期间海量用户的实时批改对服务器造成微小的压力。
传统架构下能够通过减少虚拟机,实现利用的可扩大。但因为预估容量有余,导致业务流量高峰期时,大量用户呈现申请超时的状况,这意味着品牌名誉受损、用户散失。尽管能够通过创立虚拟机实例的形式进行扩容,然而依然要做很多额定的配置。利用底层有很多依赖的框架或语言运行时须要装置,装置实现之后还须要配置和部署利用,这个周期至多须要 1-2 个小时,这种状况下传统的部署架构无奈做到资源与流量的匹配。
Serverless 解决方案
腾讯文档借助 Serverless 云函数搭建文档页面直出服务,将文档的内容渲染能力实现为函数,部署在云函数环境上,当文档业务流量激增,由云函数的负载平衡零碎主动调配执行环境,解决海量用户触发的内容更新申请负载,动静扩缩容能力为微服务提供最正当的资源分配。同时通过 设置云函数预置并发,可事后启动多个函数实例,放弃云函数的活性,打消冷启动,升高在运行环境初始化和业务代码初始化产生的耗时。
2. SSR 前端渲染
腾讯文档自推出以来,已达千万月活,为了反对用户关上页面时能疾速看到页面内容,浏览器间接解析 HTML 直出的字符串模版显示页面,流量激增导致集群负载、前端渲染压力减少,首屏加载工夫慢等问题。SSR 团队须要实现一套弹性高可用性的直出解析服务来解决文档和表格的页面内容,满足可扩大、易保护、升高开发成本 的指标。文档的渲染能力简直都是前端同学在负责,而前端同学大多服务端常识积攒比拟浅,对于服务的开发运维教训比拟少,长期的运维老本是新的架构设计重要的评估维度,从而让前端团队能够更加聚焦于业务逻辑自身。
Serverless 解决方案
SSR(Server-Side Rendering)须要依赖 Node.js 服务渲染页面,显然会比仅仅提供动态文件的 CSR(Client-Side Rendering)利用须要占用更多服务器 CPU 资源,借助 Serverless 计划,前端同学 无需关注 SSR 服务器的部署、运维和扩容,通过云函数对底层服务进行封装,极大地缩小部署运维老本,更加聚焦业务开发,进步开发效率。
全新 Serverless Web Funciton 服务开发模式,只需简略批改监听端口,即可将目前风行的 Node.js 框架间接部署上云,享受 Serverless 技术带来的免运维、低成本、按需扩缩容的泛滥劣势,欢送体验。
3. 内部服务调用 – OCR 图像识别
腾讯文档幻灯片反对编辑公式的能力,OCR 图像识别是腾讯文档幻灯片联合内部的 OCR 服务能力来实现文档内的公式图片转换为公式,进而不便用户进行公示编辑。问题点在于:内部提供的 OCR 服务做了限度,不反对前端申请,仅反对服务端申请。传统的解决方案须要后盾同学接入,进而减少了人员排期、对接等项目管理的复杂度。
Serverless 解决方案
腾讯文档将内部提供的 OCR 用云函数 SCF 做一层转发,腾讯文档再对接联调云函数的接口。解决了内部服务的限度,同时节俭了后盾开发资源,前端业务开发同学能够本人疾速对接上内部服务,大大晋升了开发效率。
4. 插件核心 – 第三方服务接入
腾讯文档插件 1.0 的计划是基于对文档前端封装到前端插件 SDK 的计划,在外部插件业务重大耦合文档实现的前提下,无奈将文档能力以平安、成体系的形式对外提供,继续去凋谢前端文档的编辑的能力,会使前端 SDK 和文档侧的实现逐渐变得臃肿,最初有可能会在变成巨石利用上长期存在的技术债权。
Serverless 解决方案
插件 2.0 计划的外围是基于后盾内容编辑的能力凋谢,利用文档的数据响应式的更新机制,云函数便成为 前端 – 云函数 – 后盾内容编辑 中关键环节,将凋谢的实现从前端剥离,通过云函数承载进行凋谢。同时,不同服务的调用量级不同,云函数带有人造的服务隔离和动静修复能力,可针对不同服务互相隔离,别离进行降级拓展,防止服务间的影响。
5. 灰度公布 & 环境隔离
在进行利用版本更新及切换时,为了保障线上整体零碎业务稳固,及时发现业务代码的问题,研发团队会采取灰度公布的形式测试迭代。通过云函数针对特定的版本进行逐渐的流量切换,能够实现某个版本的平滑灰度,保障新上线的版本可能 在可控的范畴能进行公布迭代。
通过云函数版本隔离测试环境和生产环境,线上通过对 $LASTEST 进行版本的固化,能够把测试环境的 API 网关对接到 TEST 版本,将生产环境对接都固化的版本上,保障生产环境的代码品质平安。
02. Serverless 架构计划劣势
- 研发效率晋升
本地开发测试后,触发 CI/CD 流程,就能够实现部署流程。同时,云函数提供了日志监控、灰度、公布回滚等能力,能够通过接口或者插件实现齐全自动化的流程。云函数基于腾讯云业余的保障集群,自带负载平衡和弹性伸缩,开发同学根本不须要再关怀运维等问题,能够有更多的工夫聚焦业务的优化。服务端教训较少的前端开发工程师也能够较为轻易的开发保护服务。
- 老本节约
云函数实现 1ms 计费粒度,按理论用量计费,帮忙用户取得显著的老本劣势,在没有访问量时实现主动缩容,节约部署老本。
- 灵便度高
凭借腾讯云函数的多版本能力,能够灵便部署多个在线版本,通过和网关的配合的,轻松做到多版本共存,提供定制化的解决能力。
- 减速业务迭代
应用 Serverless 计划之后,极大缩小了运维和监控的累赘,开发同学能够把更多的精力放在计划的优化和技术迭代中,疾速验证产品个性,推动团队技术业务的倒退。
03. 腾讯文档 x Serverless 架构更多场景摸索
当下浏览器环境是有性能瓶颈的,对于较为简单的异步逻辑能够思考应用云函数将逻辑服务化,接下来,腾讯文档打算对前端浏览器逻辑 Fass 化,能够从前端拆散到服务端,进而升高浏览器性能压力。
在合作办公的赛道上,团队业务还在疾速的成长,面对疾速变动的技术迭代,低成本、疾速开发、疾速部署、疾速上线的 Serverless 解决方案成为了团队在微服务技术选型中优先思考的架构。借助云函数 SCF 的能力,团队不必再放心后盾计算资源的问题,能够更加有信念应答更多从天而降的事件。将来,随着腾讯文档开放平台的建设,会有更多的应用云函数 SCF 的微服务跑在腾讯文档的业务中,为宽广用户提供更好的服务。
One More Thing
立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 👉 腾讯云 Serverless 老手体验。