语雀的技术架构演进之路


语雀的技术架构演进之路

文章插图
作者 | 不四
来源 | 阿里巴巴中间件(ID:Aliware_2018)
每个技术人心中或多或少都有一个「产品梦」,好的技术需要搭配好的产品,才能让用户爱不释手,尤其是做一款知识服务型产品 。
本文从技术架构的视角,回顾了语雀的原型、内部服务和对外商业化的全过程,并对函数计算在语雀架构演进过程中所扮演的角色做了详细的介绍 。
语雀是一个专业的云端知识库,用于团队的文档协作 。现在已是阿里员工进行文档编写和知识沉淀的标配,并于 2018 年开始对外提供服务 。
语雀的技术架构演进之路

文章插图
 
原型阶段| 回到故事的开始 。
2016 年,语雀孵化自蚂蚁科技,当时,蚂蚁金融云需要一个工具来承载它的文档,负责的技术同学利用业余时间,搭建了这个文档工具 。项目的初期,没有任何人员和资源支持,同时也是为了快速验证原型,技术选型上选择了最低成本的方案 。
底层服务完全基于体验技术部内部提供的 BaaS 服务和容器托管平台:
  • Object 服务:一个类 MongoDB 的数据存储服务;
  • File 服务:阿里云 OSS 的基础上封装的一个文件存储服务;
  • DockerLab:一个容器托管平台;

语雀的技术架构演进之路

文章插图
这些服务和平台都是基于 Node.js 实现的,专门给内部创新型应用使用,也正是由于有这些降低创新成本的内部服务,才给工程师们提供了更好的创新环境 。
语雀的应用层服务端,自然而然的选用了蚂蚁体验技术部开源的 Node.js Web 框架 Egg(蚂蚁内部的封装 Chair),通过一个单体 Web 应用实现服务端 。
应用层客户端也选用了 React 技术栈,结合内部的 antd,并采用 CodeMirror 实现了一个功能强大、体验优雅的 markdown 在线编辑器 。
当时仅仅是一个工程师的业余项目,采用内部专为创新应用提供的 BaaS 服务和一系列的开源技术,验证了在线文档工具这个产品原型 。
语雀的技术架构演进之路

文章插图
 
内部服务阶段2017年,随着语雀得到团队内部的认可,他的目标已经不仅仅是金融云的文档工具,而是成为阿里所有员工的知识管理平台 。
不仅面向技术人员 Markdown 编辑器,还向非技术知识创作者,提供了富文本编辑器,并选择了更“Web”的路线,在富文本编辑器中加入了公式、文本绘图、思维导图等特色功能 。
而随着语雀在知识管理领域的不断探索,知识管理的三层结构(团队、知识库、文档)开始成型 。
| 在此之上的协作、分享、搜索与消息动态等功能越来越复杂单纯的依靠 BaaS 服务已经无法满足语雀的业务需求了 。
为了应对业务发展带来的挑战,我们主要从下面几个点进行改造:
  • BaaS 服务虽然使用简单成本低,但是它们提供的功能不足以满足语雀业务的发展,同时稳定性上也有不足 。所以我们将底层服务由 BaaS 替换成了阿里云的 IaaS 服务(MySQL、OSS、缓存、搜索等服务) 。
  • Web 层仍然采用了 Node.js 与 Egg 框架,但是业务层借鉴 rails 社区的实践开始变成了一个大型单体应用,通过引入 ORM 构建数据模型层,让代码的分层更清晰 。
  • 前端编辑器从 codeMirror 迁移到 Slate 。为了更好的实现语雀编辑器的功能,我们内部 fork 了 Slate 进行深入开发,同时也自定义了一个独立的内容存储格式,以提供更高效的数据处理和更好的兼容性 。

语雀的技术架构演进之路

文章插图
在内部服务阶段,语雀已经成为了一个正式的产品,通过在阿里内部的磨炼,语雀的产品形态基本定型 。
语雀的技术架构演进之路

文章插图
 
对外商业化阶段随着语雀在内部的影响力越来越大,一些离职出去创业的阿里校友们开始找到玉伯(蚂蚁体验技术部研究员):“语雀挺好用的,有没有考虑商业化之后让外面的公司也能够用起来?”
| 经过小半年的酝酿和重构,2018 年初,语雀开始正式对外提供服务,进行商业化 。
当一个应用走出公司内到商业化环境中,面临的技术挑战一下子就变大了 。最核心的知识创作管理部分的功能越来越复杂,表格、思维导图等新格式的加入,多人实时协同的需求对编辑器技术提出了更高的挑战 。


推荐阅读