共计 4029 个字符,预计需要花费 11 分钟才能阅读完成。
简介:人们关注 wolai 独特的性能和舒服的用户的用户体验,更关注实现这些背地的技术架构。在一个晴朗下午,咱们邀请了 wolai.com 的创始人马锐拉,跟咱们聊聊 wolai 背地的 Serverless 架构。
作者:马锐拉 | wolai.com 创始人
咱们的日常工作场景简直离不开“云文档”。目前,人们对于文档的需要再不仅仅是简略的记录,而扩大到办公协同、信息组织、常识分享等。在国内泛滥在线文档中,wolai 因为性能新、迭代快、晦涩的异地协同体验、高效的信息组织形式以及“信息块”信息整合等特点,作为一个独特的存在进入了人们的眼帘。人们关注 wolai 独特的性能和舒服的用户的用户体验,更关注实现这些背地的技术架构。在一个晴朗下午,咱们邀请了 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 分钟去保留快照,频率会低一点,通过函数计算和队列联合,咱们制作了一个快照保留零碎。
wolai 的 Serverless 架构图
应用 Serverless 解决的问题
通过钻研 wolai 的用户行为会发现,咱们的用户个别会在每天早上下班时关上 wolai 文档,而后他 / 她会在一天之中继续应用直至上班敞开。咱们的用户并不会像小程序用户那样,须要疾速关上利用,而后即用即走。相同,他们对于利用的初始加载速度没有特地高的要求,因而咱们关注的重点并不是服务器端的渲染问题。通过钻研用户习惯,咱们更关注用户在关上利用后,操作的每一步是否可能疾速响应的问题,这外面波及到两个点:
1、用户把数据发到我的服务器上,服务器是否能疾速、稳固的接收数据?
2、当有大量并发呈现时,会不会让响应速度变慢
函数解耦,让小团队施展大能量
通过应用函数计算,wolai 的前端工程师们就能够把从前到后的一整套开发流程负责起来,咱们的研发迭代速度十分快。
为了实现疾速迭代,节俭人力,咱们把利用的每一个小的性能点拆分的十分散,在函数计算上部署了十分多的服务,同时每个服务下又会有多个函数,通过人为拆散的形式实现了函数解耦。这样做的劣势是当咱们须要公布时,如果只针对一个函数做了某些优化或者 bug 修复的话,那就只须要公布这个函数,齐全不须要做整体公布。因而咱们能够每天疾速累积公布,大部分函数齐全解耦,互不影响。咱们尽量把所有的函数齐全独立开,变成独立的业务逻辑。这样能够保研发迭代的速度。
目前咱们团队研发工程师有 10 集体。其中 8 位都是前端工程师,大大提高了团队人效。
小型企业应用函数计算,老本将节俭 50%
在进行选型的时候,咱们已经对应用函数计算的老本问题进行过粗略的测算。咱们测算的后果是,应用函数计算能比应用传统框架节俭一半以上计算费用,人力的投入可能节俭一半甚至更多。
咱们能够算一笔账,如果抉择传统架构,以目前零碎的复杂度,咱们的利用至多须要两个运维工程师。而当初前端工程师齐全能够对系统进行从头到尾开发及保护。依照月均 3 万块钱的人力成本计算,算上场地、硬件的费用,对于小型公司来说一年至多能够节俭 70-80 万的运维老本,同时计算资源老本也会同步减少,也就是说如果应用传统框架一年要花费 100 万的话,应用函数计算至多能够变成 50 万。
从 2020 年 6 月上线至今,wolai 应用函数计算的过程十分顺滑,从选型到实现我的项目上线用了十分短的工夫。我非常感谢阿里云做出了这样一款产品。时至今日,人与云计算的分工越来越明确了,置信在计算这个层面,特地是资源调度层面有了 Serverless 技术的加持,越来越多的企业能够不再关注资源,而是更加专一于如何为客户提供更好的服务。期待将来 wolai 可能与阿里云函数计算一道做更好的产品。