CSDN|语雀的技术架构演进之路



CSDN|语雀的技术架构演进之路
本文插图
作者 | 不四来源 | 阿里巴巴中间件(ID:Aliware_2018)本文从技术架构的视角 , 回顾了语雀的原型、内部服务和对外商业化的全过程 , 并对函数计算在语雀架构演进过程中所扮演的角色做了详细的介绍 。 语雀是一个专业的云端知识库 , 用于团队的文档协作 。 现在已是阿里员工进行文档编写和知识沉淀的标配 , 并于 2018 年开始对外提供服务 。
原型阶段| 回到故事的开始 。 2016 年 , 语雀孵化自蚂蚁科技 , 当时 , 蚂蚁金融云需要一个工具来承载它的文档 , 负责的技术同学利用业余时间 , 搭建了这个文档工具 。 项目的初期 , 没有任何人员和资源支持 , 同时也是为了快速验证原型 , 技术选型上选择了最低成本的方案 。 底层服务完全基于体验技术部内部提供的 BaaS 服务和容器托管平台:

  • Object 服务:一个类 MongoDB 的数据存储服务;
  • File 服务:阿里云 OSS 的基础上封装的一个文件存储服务;
  • DockerLab:一个容器托管平台;
CSDN|语雀的技术架构演进之路
本文插图
这些服务和平台都是基于 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 进行深入开发 , 同时也自定义了一个独立的内容存储格式 , 以提供更高效的数据处理和更好的兼容性 。
CSDN|语雀的技术架构演进之路
本文插图
在内部服务阶段 , 语雀已经成为了一个正式的产品 , 通过在阿里内部的磨炼 , 语雀的产品形态基本定型 。
对外商业化阶段随着语雀在内部的影响力越来越大 , 一些离职出去创业的阿里校友们开始找到玉伯(蚂蚁体验技术部研究员):“语雀挺好用的 , 有没有考虑商业化之后让外面的公司也能够用起来?” | 经过小半年的酝酿和重构 , 2018 年初 , 语雀开始正式对外提供服务 , 进行商业化 。 当一个应用走出公司内到商业化环境中 , 面临的技术挑战一下子就变大了 。 最核心的知识创作管理部分的功能越来越复杂 , 表格、思维导图等新格式的加入 , 多人实时协同的需求对编辑器技术提出了更高的挑战 。 而为了更好的服务企业用户与个人用户 , 语雀在企业服务、会员服务等方面也投入了很大精力 。 在业务快速发展的同时 , 服务商业化对质量、安全和稳定性也提出了更高的要求 。 为了应对业务发展 , 语雀的架构也随之发生了演进:我们将底层的依赖完全上云 , 全部迁移到了阿里云上 , 阿里云不仅仅提供了基础的存储、计算能力 , 同时也提供了更丰富的高级服务 , 同时在稳定性上也有保障 。


推荐阅读