聊聊前后端分离(历史、职责划分、未来发展)

简介: 聊聊前后端分离(历史、职责划分、未来发展)前言3月下旬了,时间过得真快,才发觉已经有几周没写文章了😠。前面写了一篇Cookie-Session与JWT对比这样一篇文章,引发了我对未来前后端分离模式的一个思考。你可能会问,这两者能扯上什么关系?请听我慢慢道来...其实了解这两者区别的应该都清楚,主要就是把登录态的存储是放在前端(用户设备上)存储还是放在后端(服务器)上存储的一个区别,具体的优缺点这里不过多赘述,可以查看一下往期文章。

聊聊前后端分离(历史、职责划分、未来发展)

前言


3月下旬了,时间过得真快,才发觉已经有几周没写文章了😠。

前面写了一篇Cookie-Session与JWT对比这样一篇文章,引发了我对未来前后端分离模式的一个思考。你可能会问,这两者能扯上什么关系?请听我慢慢道来...

其实了解这两者区别的应该都清楚,主要就是把登录态的存储是放在前端(用户设备上)存储还是放在后端(服务器)上存储的一个区别,具体的优缺点这里不过多赘述,可以查看一下往期文章。

所以,这相当于就涉及到了某些业务处理既可以交给前端,又可以交给后端,甚至前端后端都需要处理一下(如权限管理,数据校验这类)。这就是前后端的一个职责划分。

这与边缘计算与云计算的概念是类似的。前端相当于边缘计算,把一些计算和业务放在用户设备进行处理;而后端就相当于云计算,操作在中心化服务器上进行处理的。这里解释一下边缘计算与云计算的概念:

  • 边缘计算(Edge Computing)是一种分布式计算模型,它将计算和数据存储放置在接近数据源的边缘设备上,如传感器、路由器、智能手机等,以减少数据传输延迟和网络拥塞。
  • 边缘计算与云计算不同,云计算是将数据存储在云端数据中心,边缘计算则是将计算资源放在靠近数据源的设备上。这使得数据能够更快地处理和分析,以及更好地保护数据隐私和安全。

所以就想着梳理一下前后端分离的相关知识,以对全局更加了解,从而更好的服务于作为前端工程师的岗位😏😏😏

概述


总的来说,可以从以下两个层面解释前后端分离的出现:

  1. 业务:时代的发展=>互联网的普及=>用户基数的增加=>功能业务的复杂=>前后端分离
  2. 技术:业务的复杂=>有技术的需求=>Ajax的出现、SPA的普及等等=>前后端分离

关于前后端分离时代的划分,网上的文章各不相同,虽然划分的名词不同,但主要内容,脉络还是一致,这里笔者更愿意以技术名词将其划分为如下5个部分:

  1. 传统MVC架构
  2. Ajax的出现
  3. SPA的普及
  4. 微服务架构的发展 & BFF
  5. Serverless 架构的兴起

1.传统MVC架构


其基本结构图如下:

这种架构下,前后端的代码紧密耦合,难以分离

比如前端代码中经常嵌入后端的java代码,导致前端开发人员必须具备后端开发的知识和技能,而后端开发人员也必须了解前端的技术。

这种架构在开发和维护方面较为困难,随着 Web 应用的复杂性不断提高,这种架构逐渐显得力不从心。

2.Ajax的出现


随着 Ajax 技术的出现,前端页面可以异步获取数据,不必每次都刷新整个页面。这使得前端页面的功能和交互性大大提高,用户体验得到了显著的改善。同时,后端可以通过提供 RESTful API,为前端页面提供数据和服务,两者之间的耦合性逐渐降低。

具体来说,这里还是先将目光注视在上面的那张图上:

  • 之前页面更新的步骤是重新请求页面,服务器根据View中嵌入的后端动态代码生成带有数据的页面,然后返回给用户端。这种也就是整个页面全部更新。
  • 而现在,View中可以不用再嵌入后端的代码了,数据的更新只需在浏览器端通过网络请求后端提供的RESTful接口,然后使用JS操作DOM重新渲染页面即可。这种也就是页面局部更新。

下图就是通过Ajax请求的时序图:

你可以简单理解为Ajax技术替换了前端内嵌后端代码这项技术,前端虽然不用学习后端代码或者模板语法这类技术,但是作为有得必有失,就需要学习Ajax这项技术。但总归比学习后端语法的学习成本低。

Ajax技术的出现是前后端分离兴起的前提条件。

3.SPA的普及


刚开始前端还是MPA(Mutiple Page Application),此时虽然后续页面的局部更新不依赖于后端代码内嵌,只依赖于接口;但每个URL与前端页面的对应关系仍然还是由后端进行控制,此时前后端仍然有一定的耦合,所以有些文章将这MPA+Ajax这种情况叫做半分离时代。

随着技术的进步,为了更高的提高开发效率,SPA(Single Page Application)逐渐普及,我们的前端 MV* 时代开始到来...

如下是SPA时代下前后端分离的架构图(前端以MVVM为例):

此时前后端才是所谓的分离,通过JSON进行数据交互,路由由前端自行控制,从而实现前后端的真正解耦。

4.微服务架构的发展 & BFF


随着NodeJS的成熟,一个叫做BFF(Backend For Frontend)的技术架构出现在了开发者的视野中,BFF是为了解决微服务架构中的前端和后端之间的耦合问题而提出的,它是Web应用程序的后端和前端之间的中间层。

BFF模式通过将前端和后端之间的接口逻辑放在一个单独的服务中,将前端与后端之间的耦合度降低到最低。这个服务只为前端提供特定的接口,而不是提供整个后端系统的接口。这使得前端团队可以专注于开发他们需要的接口,而后端团队则可以专注于为不同的客户端(如Web和移动应用程序)提供最佳的服务。

如下是带有BFF的架构图:

在前后端中间增加了一个BFF,就相当于设计模式中的适配器模式,解耦。具体来说,有如下优势:

  1. 专注于前端需求:BFF是为了满足前端需求而设计的,因此它可以专注于前端需要的功能和性能,而无需考虑其他方面的问题。这使得BFF能够更好地满足前端的需求,提供更好的用户体验。
  2. 灵活性:由于BFF是一个中间层,可以自由选择技术栈,并在不影响其他层的情况下进行更改和优化。这使得BFF非常灵活,可以根据需要快速进行调整和改进。
  3. 可扩展性:BFF可以在需要时轻松地进行扩展。当有新的前端功能需要实现时,可以向BFF添加新的服务或更改现有的服务,而无需修改后端的代码。
  4. 性能优化:BFF可以通过将请求从前端分离出来并使用专门的服务来处理它们来提高性能。这可以使BFF在需要时缓存数据,减少网络延迟,并减轻后端的负担。
  5. 更好的安全性:BFF可以在前端和后端之间提供额外的安全性。例如,BFF可以处理授权和身份验证,从而减少后端的安全风险。

总的来说,BFF架构模式提供了许多优势,包括专注于前端需求、灵活性、可扩展性、性能优化和更好的安全性。这些优势可以帮助开发团队更好地满足前端需求并提供更好的用户体验。

5.Serverless 架构的兴起


BFF由一般前端程序员开发,即使BFF是为前端服务的,从工作职责上区分是属于前端,但总归是一个后端服务的,意味着前端程序员也需要处理高并发、部署、负载均衡、备份冗灾、监控报警等等一系列对于前端程序员相对来说比较陌生的事物。

而这个问题就可以很好的被Serverless解决。

Serverless架构是一种云计算模型,它通过将代码运行环境和基础设施的管理交给云服务提供商来简化应用程序开发和部署。以下是Serverless如何促进前后端分离的几个方面:

  1. 无需管理服务器:使用Serverless,开发人员无需考虑服务器的管理,例如配置、扩展和维护等问题。这意味着前端和后端开发人员可以更专注于自己的领域,而无需关心服务器的运行和管理。
  2. 独立部署:Serverless架构允许独立部署每个函数或服务。这使得前端和后端开发人员可以根据需要独立地开发、测试和部署他们的代码,而不需要等待其他团队完成其工作。
  3. 适合微服务架构:Serverless架构非常适合微服务架构,其中应用程序被拆分成多个小型服务。每个服务可以独立开发和部署,从而促进前后端分离。
  4. 按需计费:Serverless按照每个函数的实际使用量进行计费,而不是预先支付一定量的服务器资源。这意味着前端和后端开发人员可以仅针对实际使用的资源进行支付,并根据需要进行扩展。

总的来说,Serverless架构模式通过简化基础设施管理、独立部署、适合微服务架构和按需计费等方式促进前后端分离。这使得开发人员可以更专注于自己的领域,而不必担心服务器管理和资源预测等问题。

此时前端程序员就只需在BFF中调用一下RPC/HTTP,写写JS处理一下逻辑。前后端分离得到进一步发展...

一些想法(前后端职责)


这篇文章演示提到了关于前后端的一个简单的职责划分,如下图:

这里笔者不过多赘述,仅仅想谈的是随着技术的发展(V8、WebWorker、Webassembly、WebGL,TensorflowJS等等),浏览器端可以承受更多的业务处理和数据计算。

这就意味着在浏览器端不仅仅只能操作DOM,展示数据了,同样也可以承受一定的业务处理,数据计算。并且相对于在中心服务器进行处理,这种在用户设备上进行处理有如下优势:

  • 减少网络传输,提高响应速度
  • 降低服务器压力
  • 特定情况下可以保护用户隐私

举个常见的例子,比如使用TensorflowJS调用浏览器摄像头,从而识别用户的肢体动作进行交互,而识别的模型程序既可以放在中心服务器,现在也可以放在前端,并且也较为成熟了。所以该怎么选择呢?

这个答案大家应该都比较清楚,自然放在是前端,毕竟视频的传输极其消耗网络带宽,以及摄像头是较为隐私的部分了。

说了这么多,现在进入正题,也就是笔者想说的想法就是:除开页面操作一般属于前端,数据库操作一般属于后端,其他的业务处理、数据计算其实前后端现在几乎都能处理。就像登录态的处理:Cookie-Session是把登录态放在中心化服务器上,JWT是将登录态分发给到各个用户设备上一样。

所以怎么选择就非常重要了,而笔者这里认为能放在前端处理的数据尽量放在前端处理,除开以下特殊情况需要放在中心化服务器中进行处理:

  • 安全:某些计算策略、业务处理策略不能公布出来
  • 多个用户的数据处理:用户端(前端)自然只能处理该用户的数据,所以多个用户的数据处理只能由服务器进行处理
  • 多个设备的协同:这个肯定需要服务器的帮助
  • 复杂度特别高的计算:虽然目前用户设备一般性能都不差,但对于一些高复杂度的处理还是只能放在服务器上运算,不能造成用户卡顿,影响用户体验

尽量放在前端处理的好处就是上面提到的:

  • 减少网络传输,提高响应速度
  • 降低服务器压力
  • 特定情况下可以保护用户隐私

这就意味着我们前端工程师就不能仅仅只懂得写页面、操作页面了,得有全栈思维、产品思维,从功能点、业务出发,站在全局思考前端问题...

最后


上述的想法部分笔者实践经验较少,更多可能是纸上谈兵,并没有进行所谓的啥比较全面的可行性分析等等。同时也是借这个契机来梳理一下关于前后端分离模式的一个历史综述,希望对你有所帮助或者能引发你的思考。

如果你有一些宝贵的经验,欢迎友善评论😉



相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1228 1
|
存储 人工智能 Cloud Native
科研+ AI :深势科技,全新科研范式引领者
深势科技作为AI for Science的引领者,专注于微观粒子行为研究,推动材料科学和生命科学领域的创新。通过AI技术,深势科技加速了药物研发、纳米药物微流控等技术的发展,显著提升了计算性能和实验效率。与阿里云合作,利用其云原生计算和存储服务,深势科技实现了资源弹性调度和高效管理,大幅提升了研发效率,服务于超过50万科研用户,并计划建设AI for Science超级实验室,推动更多科技创新。
892 0
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
3193 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
人工智能 自然语言处理 搜索推荐
从扣子空间看 AI 智能体:与豆包、Kimi 较量及未来走向
本文探讨了当前 AI 智能体的发展现状、功能特点及其与传统 AI 大模型的差异,分析了其使用门槛与未来发展趋势,展望了其在多领域应用的潜力与挑战。
2725 0
|
算法 API 开发者
跨境卖家必看:1688商品列表页面数据接口抓取攻略
1688平台提供商品列表数据接口(1688.item_search),支持通过关键词搜索商品,返回商品ID、标题、价格、销量、图片等信息。参数包括关键词q、页码page、每页数量page_size等。开发者需注意签名机制与调用频率限制,确保稳定获取数据。
|
前端开发 JavaScript
浅谈前后端分离
浅谈前后端分离
922 12
|
JavaScript Java 云计算
后端开发的演变与未来趋势
在数字化时代的浪潮中,后端开发扮演着至关重要的角色。本文将探讨后端技术的历史演变、当前主流技术和框架、以及面临的挑战和未来的发展趋势。通过深入浅出的方式,为读者揭示后端开发的奥秘,并启发对未来技术的思考。
|
存储 安全 API
使用Ollama和Open WebUI管理本地开源大模型
Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollama 或与 OpenAI API 兼容的服务所支持的模型。Open WebUI 提供了完全离线运行的能力,这意味着用户可以在没有互联网连接的情况下与模型进行对话,这对于数据隐私和安全敏感的应用场景尤为重要。
|
前端开发 JavaScript 开发者
useEffect 钩子详解与实战
【10月更文挑战第3天】React 作为一个流行的 JavaScript 库,通过 Hooks 大幅简化了组件开发。`useEffect` 是一个核心 Hook,用于处理函数组件中的副作用操作,如数据获取和 DOM 更改。本文详细介绍了 `useEffect` 的基本语法、常见用法及示例,包括模拟 `componentDidMount`、`componentDidUpdate` 和 `componentWillUnmount`。此外,还探讨了如何避免无限循环渲染和内存泄漏等问题,并提供了相应的解决方案,帮助开发者更好地理解和应用 `useEffect`,提升应用程序的性能与稳定性。
485 7

热门文章

最新文章