本文将分享我们在FaaS化过程中的经验,尝试回答关于FaaS的Why、What、How三个问题,给对FaaS有兴趣的同学提供一些实践经验。
大家可以在手机淘宝搜索“淘宝吃货”、“iFashion”等关键词,会进入一个轻应用,这些轻应用都是行业运营的阵地。
大淘宝行业除了个别业务外,前后有超过10个轻应用完成了FaaS化,大部分需求由前端独立承接。前端在业务中从一个写页面的工具人,变成了深入业务逻辑,有业务话语权,并能推动业务发展的合伙人。
FaaS化对前端来说,本质上是进行了生产关系的转变,而这个生产关系的转变,不仅仅是我们抢了后端的活。任何团队在思考FaaS的时候,第一个想到的肯定不是怎么做,而是为什么这么做?带来的价值是什么?
我想从3个层次来说明FaaS化打来的价值,而这三个维度正如上图所示,其实是一个递进的关系:
赋能前端:从前端自己的角度来讲,通过FaaS扩大职责边界,可以更加深入业务,从一个业务资源变成业务的主人,才有可能真正为业务的目标起到自己的作用(而不是简单的接需求)。
提升总体研发效率:传统前后端分离的研发方式,每个需求都需要至少2个技术同学参加,且有大量时间在进行沟通和联调。现在需求只需要一个前端同学参与,且自己定义前后端接口和逻辑,更加灵活方便。
成为业务合伙人:对于产品运营来说,他们不是很关注研发效率,如何帮助促成业务目标,比如提升总成交额,是他们比较关心的。生产关系的转变,最终需要回归业务,需要思考如何为业务创造价值。这方面我们还在探索中,有一个方向是通过数据分析驱动精细化运营。
从19年的哇哦视频FaaS化开始(传送门 哇哦视频FaaS),FaaS解决方案经过3年的不断探索发展,已经有比较成熟解决方案,这是一个简化版的FaaS架构:
Serverless研发平台提供了完善的FaaS研发链路,包括从创建、发布到运维的完整能力,并提供了多个个性化解决方案和租户自定义能力
基础设施层提供了FaaS Serverless 解决方案,包括:FaaS编程平面、丰富的中间件、运行时容器、高可用性保障等。
底层服务包括通用的算法、数据存储能力,行业团队自定义的服务以及二方三方的通用能力,这些能力都可以通过中间件进行调用
虽然每个业务场景都有自己的特色,要不要用FaaS取决于两个方面:成本和收益。我们分别说说这两个方面应该如何考量。
成本 | 由于前端做了更多的事情,无论总体研发效率是否提升,前端的工作量都是会提升的,当前团队是否有足够的时间和精力? | |
| ||
通过减少联调、代码同构等方式提升研发效率 | ||
前端可以通过FaaS扩大职责边界,更加深入业务。 |
正如前文所说行业团队目前是选择在“重逻辑编排、轻数据资产”的行业频道中进行FaaS实践,实际上除了做BFF编排之外,根据业务需要我们也做了离线任务、数据存储等大前端之外的工作。大家可以从上面的几个维度,来衡量RIO,再决定是否使用FaaS。
平均QPS = 日均PV/5万
,用平均QPS乘以一个安全的系数作为峰值QPS云服务器ECS服务等级协议地址:https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201909241949_62160.html?spm=a1zaa.8161610.0.0.291545367B6t5A
250ms
左右。性能优化体现在两个方面:编码和架构。编码层面上应该尽量避免串行请求,减少不必要的字段解析和传输,灵活应用缓存。架构层面可以结合SSR、边缘计算等方式提升首屏性能。Node FaaS 对于前端工程师的意义在于它可以拓展我们的能力边界,让我们有能力用自己熟悉的知识去做更多的事情。而一旦我们用Node FaaS去做一些事情,那就不仅仅是我们自己的工作变了,而是整个研发的生产关系发生了变化。怎么从这个变化的生产关系中找到实际的价值,是我们需要深入思考和探索的。如果大家有做FaaS的打算,不要盲目开始,除了文中说的价值判断原则外,可以先问自己一个灵魂问题:
你们搞Node FaaS不就是抢了Java的活么?