写点什么

前后端分离技术体系

  • 2020-03-22
  • 本文字数:1908 字

    阅读完需:约 6 分钟

前后端分离技术体系

前后端分离架构演进过程

1、前后端未分离架构模式

前后端未分离时代,页面逻辑处理以及页面渲染全部由后端完成。如最具代表性的 MVC 三层框架。用户发起请求至服务端控制层(Controller),控制层通过调用模型处理器(Model)以及渲染视图(View)并最终将页面返回给客户端。



图 1-MVC 架构(前后端未分离模式)


如图-1 MVC 架构所示,视图与模型均放在后端处理,致使前端代码无法独立上线运行。前端工程师完成 HTML 等静态代码开发之后,将页面代码传递给后端工程师。后端工程师来完成上线发布操作。整个开发流程如图-2 所示,前后端工程师开发流程相互牵制,整体开发效率较低。



图 2-前后端未分离模式下系统开发流程


此种架构,要求后端研发关注前端 HTML、CSS 代码等。前端无法单独调试,前后端无法并行开发,后期维护成本较高,前后端未分离架构存在的弊端如图-3 所示。



图 3-前后端未分离模式存在的缺点

2、前后端未完全分离架构模式

在此以 RESTful 架构为切入点,探讨前后端未完全分离的架构模式,目前仍有大部分前后端架构属于前后端未完全分离的模式。后端提供 RESTful 风格的 API 接口(通俗讲,即传输 JSON 数据的 Http API 接口)。前端通过 AJAX 请求调用后端 Http API 接口,并完成页面数据的绑定,最终由客户端浏览器完成页面的渲染。此种架构看似已经做到了前后端完全分离。其实不然,后端接口依然需要关注前端的 UI 展示,后端为前端接口定制化严重。对于多终端场景,后端需要实现多套 API 接口。前后端数据以及业务耦合较紧密,因此定义为此种架构为“前后端未完全分离架构模式”。



图 4-前后端未完全分离模式


RESTful 架构使得前后端代码分离开来,前后端可以独立上线,开发效率相比未分离架构有所提升,整个系统开发流程也有所优化,前后端未完全分离模式下系统开发流程如图-5 所示。



图 5-前后端未完全分离模式下系统开发流程


此种架构的缺点是,前端并没有掌握数据的控制逻辑(无控制层),数据的控制逻辑依然需要在后端代码中实现,致使后端代码过多的关注前端的业务逻辑。客户端需要根据接口的数据返回进行大量的 JS 处理,由于动态数据是通过 AJAX 请求获得的,此种方式也不利于页面的搜索引擎优化。

3、前后端分离架构模式

引入 NodeJS 层作为服务桥接层,NodeJS 层由前端工程师负责搭建完成。通过 NodeJS 服务器在服务器端运行 JS 脚本,可以让前端人员快速入门搭建自己的服务器。引入 NodeJS,可以预先在服务端的内网环境完成大量的前端逻辑计算和页面渲染工作,提升前端的访问性能。如图 6 所示展示前后端完全分离架构模式的数据以及页面渲染流程。




图 6-前后端完全分离模式

前后端技术支撑

目前主流的客户端(前端)主要包含 PC 浏览器以及移动应用 APP。移动应用 APP 可以通过原生页面、或内置的 WebView 等插件渲染 H5 页面向用户展示 UI 信息。



图 7-客户端应用


客户端主要涉及网页浏览器以及原生 APP,这些客户端不但可以展示数据,并且还可以存储数据。尤其是对于移动端 APP,如可以使用强大的 SQLite 数据库对数据进行持久化存储。通过客户端的数据存储可以实现某些场景的离线访问,尤其是对于用户的重要数据且更新频次较低的数据,离线存储的意义非常明显。



图 8-前端技术方案


服务器端(后端)的服务器种类主要分为 WEB 服务器以及应用服务器,WEB 服务器主要用来发布静态资源(html、css 等静态资源文件),如 Nginx 服务器、Apache 以及 CDN 服务器等。WEB 服务器对于静态资源发布以及静态文件缓存有极大的优势。应用服务器主要用来发布应用程序代码(ASP.NET、PHP、JAVA 等),如 Tomcat、IIS 服务器等。WEB 服务器一般通过公网 VIP 或者 SLB 等方式对外提供外网服务。应用服务器一般只运行在内网环境,无法通过外网方式直接访问应用服务器资源,这样也是对应用服务器的一种网络安全保护。



图 9-后端服务器


后端技术体系包括 JAVA、C#等程序开发语言。MySQL、MongoDB 等数据库技术。Tomcat、IIS 等 web 服务器技术。JSF、JMQ 等处理分布式应用的中间件技术。



图 10-后端技术方案

前后端分离存在问题

1、高性能问题

综上所述,大家已了解前后端分离的架构设计模式以及前后端的相关技术体系,接下来探讨如何充分利用前后端技术提升前后端性能问题。



图 11-访问性能问题



图 12-提高前后端交互性能的解决方案

2、高稳定性


图 13-高稳定需求


如图-14 所示,若通过 APP 内置数据库存储部分接口数据(用户的重要数据,如资产数据,收益数据等),可以实现 APP 的离线数据访问。当后端接口服务出现问题,前端依然能够正常展示。本图示只是一个简单的架构示意图,本意是为了说明在设计整体前后端工程时,同时利用前后端技术优势能够设计出更为稳定的系统架构。



图 14-高稳定性解决方案


2020-03-22 21:058817

评论 4 条评论

发布
用户头像
“2、前后端未完全分离架构模式”,这里仍然定义为 未完全分离,有点怪异。
实际上 新增NodeJS前后,从人员职责划分角度看,并没有改变什么,只是 后端兼容前端多一些,还是 前端兼容后端多一些 的差别。
如果是 因为后端的接口需要考虑前端UI展示,所以不是 前后端完全分离,
那么,新增了NodeJS后,前端需要理解后端通用接口,那不一样是 未完全分离么?

前后端分离是否分离,应该是看代码是否分离,更合理一些,个人看法哈。
2021-06-26 17:00
回复
用户头像
NodeJS 层的存在,仅仅是把之前模式中的在浏览器中处理的前端逻辑,挪动到了 NodeJS 层,这是为了减少客户端的负担而增加服务器端的工作?但多了一层,便新增了一轮交互(NodeJS层和后端),复杂度上升了。是因为有足够人力资源可以分开写浏览器(App)端,和NodeJS层么?
2020-06-01 05:40
回复
不是把客户端的逻辑移到NodeJS层,而是把后端的大量业务逻辑移到NodeJS层,这样后端人力得以释放。
2020-06-27 13:56
回复
dva回复炜炜
为什么把业务逻辑挪到 nodejs 层? nodejs 更适合做业务逻辑?并不是这样的吧。参考微服务中的 BFF,nodejs 层只做接口聚合、适配、裁剪。这些是简化前端逻辑的处理,这一层也是前端来开发的。
2020-11-18 11:19
回复
没有更多了
发现更多内容

高承实:区块链是一个技术结构组织 而不是技术

CECBC

大数据

《程序员修炼之道》- 务实的哲学(1)

石云升

程序员 28天写作

极客时间产品训练营第二周总结

云随心

产品 总结 产品训练营

【面试必备】Swift 面试题及其答案

ios swift

用APICloud开发iOS App Clip(苹果小程序)详细教程

YonBuilder低代码开发平台

小程序云开发 大前端 移动开发 APP开发

从根上理解高性能、高并发(六):通俗易懂,高性能服务器到底是如何实现的

JackJiang

网络编程 高并发 高性能 即时通讯

产品经理训练营第 0 期 第二次作业

孙行者

第0期 产品经理训练营

Postgreshub中文资源网介绍

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

腾讯云数据库品牌升级,大咖解读数据库三大变化

数据君

惊呆了!某东Java大咖的MySQL笔记手册流传出来了,胜过看10本书

Java架构之路

Java 程序员 架构 面试 编程语言

产品思维和产品意识

ALone

测试一下

TJJ

十年磨一剑,腾讯云数据库品牌重磅升级, “企业级分布式数据库TDSQL”来了!

数据君

极客时间产品训练营第二周作业

云随心

产品 第二周作业 产品训练营

红河州加速区块链等新技术与实体经济的深度融合

CECBC

数字经济

搞定万亿级MySQL海量存储的索引与分表设计实战

Java架构师迁哥

阿里P8亲测能实战落地的SpringCloud开发笔记已开源

996小迁

Java 程序员 架构 面试 SpringCloud

Vue.js笔试题解决业务中常见问题

我是哪吒

程序员 面试 Vue 大前端

LeetCode题解:389. 找不同,ASCII码求和,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

第二周-作业-胡赵凯

hisun胡

产品经理 产品经理训练营

目标岗位差异化对比

Geek_6a8931

应对新冠病毒传播-粤政协委员建议构建公共卫生区块链平台

CECBC

区块链 公共卫生

常见运维监控系统的技术选型

OpsMind

运维 监控系统

七大步骤、备战60天,4面拿下字节跳动offer:时间规划+知识点+画脑图+做笔记+看书+看视频+刷题刷题

Java 程序员 面试

Flink SQL 在字节跳动的优化与实践

Apache Flink

flink

懂点EXCEL就行!教你利用Python做数据筛选(上)

智分析

Python Excel 数据清洗

图解 | 原来这就是TCP

程序员 网络协议 架构师

深圳程序员自谋生路的2020

鸠摩智首席音效师

开源 程序员 在线教育 创业者 深圳

品牌升级后,TBase更名为TDSQL和TDSQL-A,CynosDB更名为TDSQL-C

数据君

挑战前端知识点HTTP/ECMAScript

我是哪吒

大前端 HTTP ES6

连肝7个晚上,总结了计算机网络的知识点!(共66条)

我是哪吒

程序员 面试 浏览器 计算机网络 HTTP

前后端分离技术体系_文化 & 方法_京东数字科技产业AI中心_InfoQ精选文章