简介: 通过使用函数计算,wolai 的前端工程师们就可以把从前到后的一整套开发流程负责起来,我们的研发迭代速度非常快。
 

作者| 马锐拉(wolai.com 创始人)

我们的日常工作场景几乎离不开“云文档”。目前,人们对于文档的需求再不仅仅是简单的记录,而扩展到办公协同、信息组织、知识分享等。在国内众多在线文档中,wolai 因为功能新、迭代快、流畅的异地协同体验、高效的信息组织方式以及“信息块”信息整合等特点,作为一个独特的存在进入了人们的视线。人们关注 wolai 独特的功能和舒适的用户的用户体验,更关注实现这些背后的技术架构。2022年3月的一个晴朗下午,我们邀请了 wolai.com 的创始人马锐拉,跟我们聊聊 wolai 背后的 Serverless 架构。

我为什么选择 Serverless 架构?

在做 「 wolai 」这款产品之初,我们就希望把架构彻底放到 Serverless 上。因此在技术选型阶段,对国内外几款 Serverless 产品进行了细致的调研,我们发现阿里云函数计算(FC)无论在支持上和整体解决方案上,优势都非常突出,并且跟我们的需求非常匹配,因此,我们决定选择 Serverless 架构,全面使用阿里云函数计算(FC)。

作为一个办公协同应用,wolai 具备多人同时在线编辑文档功能。要实现这个功能,一个非常稳定的 Web 服务接口和一个具备伸缩能力、支持高并发写入、读取分离的分布式数据库是非常重要的。因此当我们发现 Serverless 产品能够与分布式数据库进行很好的搭配,就初步确认了 wolai 的主体架构。

接下来我们开始在阿里云上验证使用阿里云函数计算(FC)的可行性。通过验证发现阿里云函数计算(FC)不光能帮助我们解决上述问题,还可以帮助我们大幅度节省人力成本和云资源使用成本的投入。

以一家初创公司为例,聊聊函数计算

接下来我想聊聊,为什么在创立公司之初,我会坚持选择 Serverless 架构。我曾在一家支付公司工作,所以我以一家比较典型的支付公司来举例说明。

不可避免的流量伸缩问题

假设你创立了一家支付公司,它的背后差不多需要 200 多个系统支撑,如果这些系统大部分都基于 Java ,这就意味着支付业务背后的机器是一台一台的集群,每一次发布研发都需要对这些集群进行分组,然后逐个上下线,这需要耗费巨大人力成本。

除了集群分组,研发们还需要关注缓存、日志系统等中间的各个系统是否有瓶颈。一旦发生问题,就需要在整个运维系统上花费巨大的精力去解决。随着公司的发展,你的这家公司的服务量级终于上升了,这时候你又会发现成本也随之大幅度上升了,比如需要部署新的机器,需要花费很多时间去做计算的伸缩工作(确切的说只是“伸”,根本就没有办法去“缩”,对不对?)所以流量伸缩问题会是你遇到的第一个问题,同时也是不可避免的问题。

流量的波峰波谷问题

接下来,你还会遇到流量的波峰波谷问题。由于支付请求在晚上比较少,而在白天或大促、秒杀期间,支付请求的并发数可能会特别高。如果大批流量在同一时间涌进来,你就需要迅速拨计算资源过去,这需要做非常多的运维工作。

对一家刚创建不久的公司来说,你很难把大量的精力放在运维服务器上。而这时候你可以选择 Serverless ,它能够帮助你解决上述这些问题。你可以把运维服务器的工作放心的“丢”给 Serverless,而你真正需要关注的只有自己的业务逻辑。

我可以只关注代码和客户的需要

过去我们做 Web 服务,开发的工作重点在于在 web 服务器上做各种优化,其实这些工作都是在解决一个问题:当量级上去之后,服务器性能能不能抗住?如果不能要怎样做优化?开发者们做 Nginx 性能调优、负载均衡、反向代理等繁杂的优化工作,耗费了大量的时间,而当我们使用了函数计算之后,相当于把一大部分调优web 服务器的工作去掉了,这极大的节省了人力成本,提高了效率。使用函数计算之后,整个服务从开发到上线过程中,研发可以把绝大部分精力都放在业务代码上,无需关心服务本身是怎么稳定运行的。

自2020年6月15号业务上线以来,我们从来没有遇到服务 down 掉或者是需要下线维护的问题,而这些问题是使用函数计算前的常见问题。以往一旦遇到这样的问题,我们需要耗费很长时间寻找发生问题的原因,可能需要升级 Web 服务,加几台机器,甚至做反向代理和负载均衡……即使这些工作全部做完,再上线的服务还是会有维护时段,我们依然很难做到服务持续在线上。因此函数计算对我来说很重要的一个功能点就是持续服务的能力,通过使用函数计算,我的业务可以稳定地、持续地增量发布。

之前,我们至少一周要做一次发布,每次发布都有非常详细的发布列表,发布涉及的条件、依赖项非常多,需要运维去跑的脚本非常复杂,可以说只要出现一丁点错误,整个发布可能就会演变成一个小事故,甚至是大事故。当我们把整个架构放在 Serverless 上,把所有的功能进行拆分之后,发生事故的概率大大降低。即便发生问题,我可以通过快速发布来解决问题。现在我们的研发习惯每天至少发布一个版本,当天所有解决的问题都会发布,相比传统的软件公司来说,部署在 Serverless 架构上我们的迭代速度会快很多。

快照保存系统,解决协同编辑算法问题

对于 wolai 这样的协同办公产品,协同编辑是产品的重中之重,这个功能对于算法的要求很高,通过使用函数计算我们同样很好的解决了这个问题。

wolai 云端笔记功能有一个信息块(Block)的概念,就是将用户所能接触到的最小信息单位从‘文件’缩小到‘信息块’”。“信息块”可容纳文字段落、表格、清单,以及嵌入来自外部的图片、视频等信息,且可被简易编辑、移动,经实时呈现后组成页面。所以接下来我会以“块”来指代信息块。

红底之上都是一个个独立的块

用户每次按键操作后,我们的前端都会有类似快照的保存机制。如果用户按键非常快,那他的多次按键操作可能在某一个时间切片中组成一个 transaction ,发回这个函数计算。然后我们就会记录下这些操作。当第二个用户同时进行按键操作时,如果他也针对同一个块做按键操作的话,他也会触发同样的操作。

我们会在函数里面去计算这些操作用户对这个块实际影响先后的顺序,最后得出它应该变成了一个什么样子,然后函数计算还会发出一个队列的请求,当有任何一个块,或者说它所属的页面发生过这个变化的事件之后,它会丢到这个 redis 里面,5分钟之内一旦有一个块或者一个页面有过更新之后,我们会再调一个函数,把整个页面和整个块去生成一个一个快照。所以我们把函数和队列调用结合在一起做成了一个自动化的系统。

用户一旦在页面或者块上有编辑,我们都会在固定时间段生成一个快照。我们现在针对单个块(相当于单段文字或者说一个图片这样的一个最小单元)一分钟保存一张快照。相当于在1分钟之内,用户只要有过更新,我们都会把它整体变成一个快照,然后放到 OSS 上面去。如果每一个块是频繁更新,那么OSS 上针对这个块会有特别多的一分钟的快照,目前我们 OSS 上差不多都已经有10亿多个文件了。如果是页面级别的编辑,wolai 5分钟去保存快照,频率会低一点,通过函数计算和队列结合,我们制作了一个快照保存系统。

使用 Serverless 解决的问题

通过研究 wolai 的用户行为会发现,我们的用户一般会在每天早上上班时打开 wolai 文档,然后他/她会在一天之中持续使用直至下班关闭。我们的用户并不会像小程序用户那样,需要快速打开应用,然后即用即走。相反,他们对于应用的初始加载速度没有特别高的要求,因此我们关注的重点并不是服务器端的渲染问题。通过研究用户习惯,我们更关注用户在打开应用后,操作的每一步是否能够快速响应的问题,这里面涉及到两个点:

用户把数据发到我的服务器上,服务器是否能快速、稳定的接收数据?

当有大量并发出现时,会不会让响应速度变慢

函数解耦,让小团队发挥大能量

通过使用函数计算,wolai 的前端工程师们就可以把从前到后的一整套开发流程负责起来,我们的研发迭代速度非常快。

为了实现快速迭代,节省人力,我们把应用的每一个小的功能点拆分的非常散,我们在函数计算上部署了非常多的服务,同时每个服务下又会有多个函数,通过人为拆散的方式实现了函数解耦。这样做的优势是当我们需要发布时,如果我们只针对一个函数做了某些优化或者 bug 修复的话。我们只需要发布这个函数,完全不需要做整体发布。因此我们可以每天快速累积发布,大部分函数完全解耦,互不影响。我们尽量把所有的函数完全独立开,变成独立的业务逻辑。这样可以保证我们的研发迭代速度。

目前我们团队研发工程师有9个人。其中8位都是前端工程师,只有一个人是专门负责后端的,大大提高了团队人效。

小型企业使用函数计算,成本将节省 50%

在进行选型的时候,我们曾经对使用函数计算的成本问题进行过粗略的测算。我们测算的结果是,使用函数计算能比使用传统框架节省一半以上计算费用,人力的投入能够节省一半甚至更多。

我们可以算一笔账,如果选择传统架构,以目前系统的复杂度,我们的应用至少需要两个运维工程师。而现在前端工程师完全可以对系统进行从头到尾开发及维护。按照月均3万块钱的人力成本计算,算上场地、硬件的费用,对于小型公司来说一年至少可以节省70-80万的运维成本,同时计算资源成本也会同步增加,也就是说如果使用传统框架一年要花费100万的话,使用函数计算至少可以变成50万 。

从2020年6月上线至今,wolai 使用函数计算的过程非常顺滑,从选型到完成项目上线用了非常短的时间。我非常感谢阿里云做出了这样一款产品。时至今日,人与云计算的分工越来越明确了,相信在计算这个层面,特别是资源调度层面有了 Serverless 技术的加持,越来越多的企业可以不再关注资源,而是更加专注于如何为客户提供更好的服务。期待未来 wolai 能够与阿里云函数计算一道做更好的产品。

本文为阿里云原创内容,未经允许不得转载。

成本节省 50%,9人团队使用函数计算开发 wolai 在线文档应用的更多相关文章

  1. 成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

    作者: 马锐拉 我们的日常工作场景几乎离不开"云文档".目前,人们对于文档的需求再不仅仅是简单的记录,而扩展到办公协同.信息组织.知识分享等.在国内众多在线文档中,wolai 因为 ...

  2. 使用js主函数的原因是等文档加载完了才给里面的元素添加东西 如果不使用主函数则文档加载时候无法找到元素则不能成功给元素添加事件

    使用js主函数的原因是等文档加载完了才给里面的元素添加东西 如果不使用主函数则文档加载时候无法找到元素则不能成功给元素添加事件

  3. 通过cmd命令查看Python库、函数和模块的帮助文档与介绍

    dir函数式可以查看对象的属性 使用方法很简单,举os类型为例,在Python命令窗口输入 dir(‘os’) 即可查看os模块的属性 打开cmd命令窗口 输入python(注意:计算机需要有Pyth ...

  4. c#读取文本文档实践4-读入到list泛型集合计算后写入新文档

    商品 数量 单价英语 66 100语文 66 80数学 66 100化学 66 40物理 66 60 上面截图是要处理的文本文档内容,目的是计算出总价并加在最后一列. 这一篇与上一篇比较类似,目的相同 ...

  5. 让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%

    11月5日,2022 杭州 · 云栖大会上,阿里云宣布函数计算 FC 开启全面降价,vCPU 单价降幅** 11%,其他的各个独立计费项最高降幅达 37.5%**. 本次云栖大会上,阿里云智能总裁张建 ...

  6. 一元建站-基于函数计算 + wordpress 构建 serverless 网站

    前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...

  7. 在腾讯云云函数计算上部署.NET Core 3.1

    云厂商(腾讯云.Azure等)提供了Serverless服务,借助于Serverless,开发人员可以更加专注于代码的开发,减少运维的成本.腾讯云的函数计算提供了很多运行库,对.NET的支持需要通过c ...

  8. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...

  9. 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  10. 从零入门 Serverless | 函数计算的开发与配置

    导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...

随机推荐

  1. HDU 2056:Rectangles(两个矩形交点的性质)

    一.原题链接 Problem - 2056 (hdu.edu.cn) 二.题面 Given two rectangles and the coordinates of two points on th ...

  2. 前后端分离之jQuery入门

    jQuery入门 基本概念:jQuery是一个快速,小型且功能丰富的JavaScript库.借助易于使用的API(可在多种浏览器中使用),使HTML文档的遍历和操作,事件处理,动画和Ajax等事情变得 ...

  3. buntu之命令行模式和图形界面切换

    1.按ALT+CTRL+F1切换到字符界面(Linux实体机)      如果是VMware虚拟机安装的Linux系统,则切换到字符界面的时候需要以下操作      按下ALT+CTRL+SPACE( ...

  4. 00-【K210】API资料、电气接线图、PCB文件

    K210的接口说明文档 API接口文档: 链接:https://pan.baidu.com/s/1mlzYRJYQIeHSEMysp_v4cg?pwd=pjmv 提取码:pjmv 2.原理图.PCB文 ...

  5. 恶意软件开发(一)Reverse Shell

    什么是Reverse Shell? 反向 Shell(Reverse Shell)是指远程攻击者在攻击成功后,通过建立一个反向连接,让受害者的机器连接到攻击者的机器上,从而达到控制受害者机器的目的.通 ...

  6. 【面试】将 95% 求职者拒之门外的BAT大数据面试题-附解题方法(文末有福利)

    写在前面 最近不少读者找我要大数据面试题,我整理了很久,筛选出这10道容易出错的大数据面试题,希望对大家有所帮助.题目与解答整理自互联网,感谢分享这些面经的技术大牛们! 题目概览 如何从大量的 URL ...

  7. 在 M1 下搭建 DolphinScheduler 开发调试环境

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用 M1 ...

  8. KingbaseES V8R6集群运维案例之---自动清理集群主库wal日志

    ​ 案例说明: 在KingbaseES V8R6 主备流复制的集群,配置复制槽(replication slot).复制槽提供了一种自动化的方法来确保主控机在所有的后备机收到 WAL 段 之前不会移除 ...

  9. 安卓AlertDialog对话面板的使用---Android开发

    1 AlertDialog.Builder builder=new AlertDialog.Builder(this); 2 builder.setTitle("历史记录").se ...

  10. #结论#洛谷 3199 [HNOI2009]最小圈

    题目 求有向图最小平均权值回路. \(n\leq 3*10^3,m\leq 10^4\) 分析 设 \(f_k(x)\) 表示从点 \(x\) 出发恰好走 \(k\) 条边的最短路, 那么答案就是 \ ...