写点什么

浅析基于 Serverless 的前后端一体化框架

  • 2019-12-05
  • 本文字数:3412 字

    阅读完需:约 11 分钟

浅析基于 Serverless 的前后端一体化框架

概述

Serverless 是一种“无服务器架构”模式,它无需关心程序运行环境、资源及数量,只需要将精力聚焦到业务逻辑上的技术。基于 Serverless 开发 web 应用,架构师总是试图把传统的解决方案移植到 Serverless 上,虽然可以做到既拥有 Serverless 新技术带来的红利,又能维持住传统开发模式的开发体验。但是,Serverless 技术带来的改变可能不止这些,可能是颠覆整个传统 web 应用开发模式的革命性技术。

开发模式

业务应用的开发模式发展是从一体到分裂为前后端,再到前后端融合为一体过程。


注意:后面所说的后端特指后端业务逻辑。

早期,一体


没有前后端的概念,那时候的应用都是单机版,所有的业务逻辑都写一起,开发人员不需要关心网络请求,这个时期的工程师完全专注于业务代码的开发。随着业务规模的增长,也暴露了很多问题:


  • 高并发问题

  • 高可用问题


说明:业务应用升级困难等一些问题,不是本篇文章所关心,所以就不一一列举出来。

现在,分裂

前端 + 高可用高并发运维裹挟着的后端业务逻辑



说明:现在 Serverless 技术已经出现有一段时间了,不但没有解决开发体验的问题,反而带来更多开发体验问题,所以,在这里我并没有突出 Serverless 技术。


解决的问题


  • 高并发。通过分布式部署和多级负载均衡等技术解决了业务的高并发问题

  • 高可用。通过主从架构等技术解决了业务的高可用问题


解决一个问题,带来一堆问题


  • 分裂业务应用。为了解决高可用和高并发,业务应用引入了分布式架构,通过负载均衡和主从模式来保证高可用和高并发问题,但是这种解决方案对业务应用是侵入式的,从而导致原本高内聚一体化的应用分裂成前端和后端

  • 污染业务代码。与高可用、高并发和运维相关的逻辑与后端业务逻辑交织在一起,让后端技术门槛变高,导致需要多个后端工程师才能掌握所有后端技术

  • 增加联调成本。前后端的联调工作做日益繁重,成了工程开发效率提升的瓶颈。新功能和 BUG 需要前后端工程师配合才能完成,你如果是全栈开发工程师,你肯定深有体会,很多 BUG 一看就知道是前端问题,还是后端问题

  • 不匹配的前后端技术发展速度,前端技术发展迅猛,后端技术相对稳定,前端只能被动的去适配后端,让前端最新的技术在使用体验上大打折扣。最理想的方式是前后端通盘考量,整体发展,不要出现本来后端只需要优化一行代码的事,让前端写一百行代码来实现

  • 限制了代码抽象。因为实现的是同一个业务需求,所以前后端代码有高度的相关性,如果我们能在前后端代码之上抽象代码逻辑,肯定能有很大的作为。同时,代码的开发和维护也有质的提升,前后端分裂导致我们不得不局限在前端或者后端进行代码的抽象,抽象出来的代码可能是片面而重复的

  • 增加技术复杂度。前后端分裂,前后端工程师各自为营,形成各自的技术栈,包括语言、工具和理念,导致单个工程师维护整个业务应用变得极度困难,也让前后端工程师排斥彼此的技术栈,随着时间的推移,技术栈差异越来越大,一个项目,不管多小,至少两位工程师以上,全栈开发工程师另当别论

  • 增加运维成本。需要专门的运维工程师来运维,虽然,现在通过技术手段降低了运维的成本,但是目前运维成本依然很高,难度依然很大


这也是为什么创业小公司喜欢全栈开发工程师,因为在创业早期,高可用和高并发的需求不是那么迫切,因而运维也相对简单,使用全栈开发工程师,不仅缩短了项目交付周期,而且也降低了公司的运营成本,这对创业小公司是至关重要的。

未来,融合回到到一体

前端 + 后端 + Serverless + 平台服务 => 业务应用 + Serverless + 平台服务



说明:共享逻辑是前后端的共享逻辑,在过去,由于前后端分裂,是很难做到前后端层面的代码抽象的,前后端融合后,让这件事变得简单自然。


带来困惑


  • 前后端分工合作,不是很好吗? 在过去,将一个复杂的问题分解成多个简单的子问题,高并发和高可用没法做到不侵入业务应用,这种确实是一种很好的解法,也是没办法中的办法。前后端分工合作带来的成本问题,越发凸显。现在 Serverless 透明的解决了高并发和高可用问题,那么我们为什么还需要从技术维度来划分,我们不是更加推荐按业务维度来划分吗?

  • 后端依然很难,驾驭前后端的门槛依然很高? 后端代码逻辑虽然没有了高并发和高可用的裹挟,还是会很难,比如 AI。我相信类似这种很难的业务,现在可能有,未来一定会有相关的开发工具包或者平台服务为我们解决,让这些很难的技术平民化。难的技术交给专业的人解决。


找回初心


  • 回归业务,前后端一体化。随着 Serverless 技术的出现,解决了高可用、高并发和运维问题,作为工程师的我们是不是应该回头看看,找回初心:专注于业务代码。让原本在一起的后端业务代码与前端代码再次融合。因此,前后端一体化难道不是我们失去已久的应用开发终极解决方案吗?

现状

Serverless 已经做到了以下两点


  • 工程师只需要关心业务逻辑上的技术

  • 拥有接近于传统应用开发体验(解决历史遗留问题,可能还有些距离)


传统应用框架,食之无味,弃之可惜


  • 目前,很多用户已经感知到了 Serverless 带来的高可用、高并发和免运维的好处,用户能够很自然的想到如果能将现有的开发框架移植到 Serverless 上,那就太好不过了。Serverless 平台很自然会提供现有框架的移植方案。解决的问题是将传统的解决方案移植到 Serverless 上,让用户在 Serverless 上拥有传统的开发体验


应用框架找回初心


  • 前后端业务逻辑代码的融合,即前后端一体化


前后端一体化解决了什么问题


  • 解决了第二阶段开发模式中出现的问题,具体请参考:“解决一个问题,带来一堆问题”。


实现前后端一体化,欠缺如下


  • 基于 Serverless 的前后端一体化框架

  • 工具


其中,基于 Serverless 的前后端一体化框架解决前后端一体化问题;工具屏蔽掉 Serverless 平台细节,提供一致的部署运维体验。

未来

未来,开源社区会涌现大量的基于 Serverless 的前后端一体化的框架和工具,webassembly 让前后端一体化打破了开发语言的限制,可以用任意开发语言开发前后端,如 java、go 等等。由于 javascript 是为前端而生,typescript 是目前做活的前端开发语言,前后端统一用 typescript,其他语言可以通过 webassembly 技术让 typescript 语言来调用可能是最好的选择。


想要成为一个流行的基于 Serverless 的前后端一体化框架,需要具备这么几个特质:


  • 开源不绑定

  • 社区化运营

  • 形成标准

  • 模型简单

结语

Serverless 技术让我们向新世界大门迈出了左脚,请让基于 Serverless 的前后一体化框架帮我们迈出右脚。同时,请别再叫我前端开发工程师,我是业务应用开发工程师。

Q&A

Q:前后端一体化需要将前后端代码发布到同一个地方吗?


A:不需要,分开发布,通过统一的工具负责前后端发布任务,前端可以发到 CDN,后端可以发布到 Serverless 平台,如:阿里云函数计算


Q:未来是不是没有后端工程师?


A:有的。前端工程师只是把前端和后端的业务逻辑代码给做了,后端工程师去做真正的后端,那时候的后端工程师将会更加专业,前端工程师可能会变成应用开发工程师(暂且这么称呼)。对于中小型企业,可能大部分是应用开发工程,有少量甚至没有专业的后端工程师。


Q:为什么不做一个类似 expressjs 这样的 web 应用框架?


A:expressjs 框架是在没有 Serverless 背景下设计的,没有考虑 Serverless 给我们带来的技术架构变革,如果需要类似 expressjs 的这样的框架,我们完全可以将 expressjs 框架迁移到 Serverless 上运行,没有必要再造一套。


Q:为什么是 nodejs 框架?


A:nodejs 和 前端 js 使用的同一种语言,可以将前后端一体化做到更加极致,webassembly 也可以让任何语言在前端运行,也能做到前后端语言一致,但是 js 是为前端而生的,更有亲和力。但是其他语言可以通过 webassembly 编译成中间语言,nodejs 通过 vm 来调用其他语言提供的功能。也不排除未来会有一种新的运行环境来取代 nodejs,更加适配多语言和 Serverless 这种场景。


Q:前后端一体化的极致是一种什么感觉?


A:前后端代码都在一个项目中用同一种语言来写,在本地定义一个后端接口方法,前端就像调用本地方法一样调用后端方法(不是在本地定义的后端接口也是一样,比如跨组件、外部服务),前后端可以抽象更多的公共逻辑,比如工具类等等,一个开发人员就能维护好整个项目,没有了多项目多语言的切换痛苦。


作者介绍


杨苏博,阿里云高级开发工程师, 多年沉浸基础软件研发,目前在函数计算团队从事工具链相关的工作,致力于提升 Serverless 研发效能的全栈工程师。


本文转载自云栖社区。


原文链接


https://yq.aliyun.com/articles/706958


2019-12-05 08:002859

评论 1 条评论

发布
用户头像
前后端一体化框架 Malagu:https://github.com/cellbang/malagu
2020-11-09 16:13
回复
没有更多了
发现更多内容

智能的统一哲学

木铎

人工智能 机器学习 智能

今天面了个腾讯拿38K出来的大佬,让我见识到了基础的天花板

收到请回复

Java 程序员 后端

还在刷面试题?NO!这份阿里内网Java面试通关手册才是你急需的

Java spring 面试 JVM mybatis

Python代码阅读(第56篇):获取列表的前n个最大/最小值

Felix

Python 编程 列表 阅读代码 Python初学者

纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了

编程 程序员 面试 网络协议

堪称神级的阿里巴巴“高并发”教程《基础+实战+源码+面试+架构》

Java 编程 程序员 高并发

基于SVDD算法的半监督风控模型

索信达控股

算法 风控模型 半督导算法

HTTP与HTTPS,HTTPS更加安全。

喀拉峻

网络安全 安全 信息安全 HTTP

第三阶段总结

张靖

#架构实战营

FlyFish 1.0发布,新增4个可视化组件

云智慧AIOps社区

大前端 低代码 数据可视化

腾讯云数据库TDSQL首次登上财报!TDSQL在不同金融机构核心系统中的渗透率明显提升

科技热闻

网络篇夺命连环12问

冇先生

外包学生管理系统架构文档

Steven

架构实战营

电脑数据恢复用哪款软件比较好

淋雨

EasyRecovery

IM开发基础知识补课(十):大型IM系统有多难?万字长文,搞懂异地多活!

JackJiang

架构设计 即时通讯 灾备 IM 异地多活

视频通信关键技术探索及实践

网易云信

音视频 通信云

ShowMeBug 黑科技丨一招快速实现架构绘图之鼠标同步

ShowMeBug

思维导图 实时同步 绘图库

专题|防宕机,Pulsar 跨机房复制了解一下?

Apache Pulsar

云原生 中间件 Apache Pulsar 消息系统 防宕机 跨地域复制

腾讯云开源百万级服务发现和治理中心“北极星”,打造可持续微服务生态

科技热闻

ShowMeBug 中如何科学的识别用户浏览器?

ShowMeBug

大前端 浏览器 WebRTC

千万不要小瞧复杂度分析,代码详解复杂度的重要性

小Q

Java Python 学习 数据结构 算法

架构实战营-模块三作业

无名

架构实战营 「架构实战营」

Aeron是如何实现的?—— Conductor

BUG侦探

Aeron Conductor

安全漏洞之经典上传漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

吐血整理:常用的大数据采集工具,你不可不知

小术晓术

大数据 数据采集

腾讯Q3财报:腾讯企点服务超100万家企业,显著降低客服成本

科技热闻

详细架构设计文档模板(笔记)

张祥

❤️这应该是Postman最详细的中文使用教程了❤️(新手使用,简单明了)

六十七点五

软件测试 性能测试 Postman 自动化测试 接口测试

Apache Pulsar 在能源互联网领域的落地实践

Apache Pulsar

架构 云原生 Apache Pulsar 消息系统 用户案例 能源互联网

绝绝子!美团大牛吐血整理总结“消息队列核心知识笔记”是真的吊

编程 程序员 MQ 队列

腾讯安全推出御界NDR「横移检测版」,全面检测域渗透攻击

腾讯安全

浅析基于 Serverless 的前后端一体化框架_架构_杨苏博_InfoQ精选文章