NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

前后端分离技术体系

  • 京东数字科技产业AI中心

  • 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:058828
文化 & 方法 性能优化 中间件 编程语言 框架

评论 4 条评论

发布
用户头像
wessonwang
“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
回复
没有更多了
  • 42|大前端:通过一云多端搭建跨 PC/ 移动的平台应用

    大前端的出现,可以让数据的存储和数据的获取方式更好地服务于前端的交互和业务的需求。

    2022-12-24

  • Java Web(八)JSP

    Java Server Pages,Java服务端页面

    2022-11-13

  • Java Web(五)Web

    B/S架构:Browser/Server,浏览器/服务器架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Wb资源,服务器把Wb资源发送给浏览器即可

    2022-11-12

  • Avatar 阿凡达模式项目系统开发逻辑(成熟技术)

    项目简介及模式制度:

    2023-02-14

  • GraphQL 在酒店系统上的实践

    本文介绍Qunar Node 服务产生了什么问题,为什么会出现这些问题,以及为何需要采用 GraphQL 去解决这些问题,是一个值得探究的过程。

    架构 大前端 移动 软件工程 数据库 安全 小程序 最佳实践 工程化 性能优化 编程语言 框架
  • 10|微服务设计:微服务架构与演进

    这节课,我们来拆解一下在构建微服务架构的过程中,我们面临的挑战以及需要具备的技术,让你对于微服务架构有更深入的理解。

    2022-11-01

  • Rust 异步 Web 框架开篇

    2021-09-02

  • 流式场景下端云一体搭建体系

    随着闲鱼业务的高速增长,业务的数量和复杂度,都急剧增加,研发侧在业务支撑上出现了两个明显的变化...

    架构 最佳实践 方法论 微服务 实时计算
  • 41|微前端:从 MVC 贫血模式到 DDD 充血模式

    这节课我们详细看看“微前端”这个近些年兴起的概念。

    2022-12-22

  • 一文读懂 NodeJs 知识体系和原理浅析

    Node.js 是一个 JS 的服务端运行环境,简单的来说,它是在 JS 语言规范的基础上,封装了一些服务端的运行时对象,让我们能够简单实现非常多的业务功能。

    2023-03-01

  • 10 分钟带你彻底搞懂门面设计模式

    2022-06-03

  • HTTP2 服务器推送的第一次尝试

    在HTTP1.x中,访问一个页面,浏览器首先获取HTML资源,然后在解析页面时增量地获取其他资源,服务器必须等待浏览器发出请求后才下发页面内资源。而服务器实际上是知道页面内资源有哪些的,如果服务器能够在浏览器显式请求资源之前就将资源推送到浏览器。

    2020-11-17

  • 华为云联合信通院发布业界首个《云原生数据库白皮书》

    8月18日,华为云联合中国信通院云计算与大数据研究所发布了业界首个《云原生数据库白皮书》,系统阐释了云原生数据库的发展趋势与现状,从云原生数据库应用场景、技术架构、关键技术以及不同场景下的生产实践,详细介绍了云原生数据库的技术模式,并结合当前

    2022-08-30

  • BFF 模式:微服务前端数据加载的最佳实践?

    BFF 有助于简化数据展示,并为前端提供一个目的明确的接口。

    大前端 架构 微服务 操作系统 汽车
  • 深扒阿里开源的微前端架构 icestark:前端又要变革了吗

    随着微前端技术架构的出现,不断有团队尝试将单体的前端 Web 应用按不同维度进行拆分或者组合,再聚合到一个整体的应用架构下。

    架构 大前端 开源 最佳实践 微服务 阿里巴巴 工程化 性能优化 操作系统 框架 在离线混部
  • 冲云破雾——10 分钟带你了解六大云上服务架构

    讲师介绍: 吕蕴偲,SRE 工程师,就职于国内某云服务商,负责 DevOps 及云上解决方案架构设计,多年云行业相关领域经验。熟悉 AWS 亚马逊云、阿里云等公有云,同时拥有 AWS 解决方案架构师认证及阿里云解决方案架构师认证,对多云云上架构设计部署有相关经验。 问题背景: 随着云上服务的开通,我们的需求从地端转换到了云端,以前 IDC 的那套模式已经不完全适用了。线上的架构搭建与线下的搭建有着本质的区别,线下的部署没有所谓的服务模型区分,可以笼统地归结到“基础设施”服务上来。而云上,有着较为明显的界限划分,即分为 IaaS 基础设施即服务、PaaS 平台即服务和 SaaS 软件即服务,近两年又出现了新兴 FaaS 函数即服务的服务模式。 面对这些复杂且多样的云服务,我们该如何根据不同需求搭建架构设计?本节课,我们将从简单到复杂、从单体到分布式说一说常见的几种架构设计和选择。 内容看点: 几种常见的架构设计模式 云端服务架构选择

    2021-12-24

  • 4 年 Java 开发经验,经常被问到高并发、性能调优方面的问题,该怎么办?

    Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。

    2021-05-17

  • 【JavaWeb】JSP 学习笔记

    JSP:Java Server Pages,Java服务端页面

    2022-11-27

  • 【HZERO 微服务平台 3】源码分析之 oauth 服务 token 生成、校验、获取信息、传递

    hzero-oauth 服务是基于 spring security、spring security oauth、JWT 实现的统一认证服务中心,支持 oauth2.0 的四种授权模式,授权流程跟标准的 oauth2 流程一致。web 端采用简化模式(implicit)登录系统,移动端可使用密码模式(password)登录系统 。

    2021-12-13

  • 闲鱼源码页面 SSR 最佳实践

    「让每一个用户在最短的时间内看到页面上重要的内容」一直以来都是前端工程师们精益求精的方向。

    大前端 最佳实践 方法论 性能优化 编程语言 框架
发现更多内容

“你们程序员不就是修电脑的吗,你牛什么牛?

android 程序员 移动开发

【Android面试查漏补缺】之Handler详解,带你全面理解Handler消息机制

android 程序员 移动开发

【CSDN插件测评】效率增倍,程序猿开发必备插件

android 程序员 移动开发

解构服务风险治理

方勇(gopher)

微服务 OLAP SRE 服务治理 构架

【技术漫谈】Android高手进阶,这个必须要学 !

android 程序员 移动开发

”去他丫的北上广,老子要去成都定居了!

android 程序员 移动开发

【Android-Jetpack】Lifecycle-从入门到精通

android 程序员 移动开发

【Android进阶笔记】虚拟机(Dalvik

android 程序员 移动开发

【Flutter桌面篇】Flutter&Windows应用尝鲜

android 程序员 移动开发

【基础01】Android 开发到底是做什么?

android 程序员 移动开发

【淘系技术】超详解析Flutter渲染引擎_业务想创新,不了解底层原理怎么行

android 程序员 移动开发

《近匠》棱镜:手游渠道SDK平台的技术历程

android 程序员 移动开发

【Android FrameWork】综合面试问题

android 程序员 移动开发

【Android进阶学习】Android-广播接收器(Broadcast-Receivers)

android 程序员 移动开发

【干货】Android 一线互联网面试题汇总,13模块200

android 程序员 移动开发

【建议收藏】面试没亮点?给你一份Android热门三方库源码面试宝典及学习笔记

android 程序员 移动开发

【CSS Master】选择器四种基本类型

devpoint

CSS CSS语法 11月日更

[译]利用 Android 构建 TV 的未来

android 程序员 移动开发

《基于Android微博整合客户端的设计与实现》毕业设计中期考核表

android 程序员 移动开发

「正确」的使用Kotlin Flow进行搜索优化

android 程序员 移动开发

【整理篇】Flutter 常用第三方库、插件

android 程序员 移动开发

“你们程序员不就是修电脑的吗,你牛什么牛?(1)

android 程序员 移动开发

《Head First 设计模式学习记录-终篇亦非终篇》

android 程序员 移动开发

【Flutter 专题】123 图解简易 GroupList 二级分组列表

android 程序员 移动开发

【Java转Android】50

android 程序员 移动开发

【自学Flutter】18 TabBar、TabBarView

android 程序员 移动开发

【Android】仿斗鱼滑动拼图验证码控件

android 程序员 移动开发

【Java转Android】34

android 程序员 移动开发

【干货推荐】Android市场今非昔比,Android开发者该学习哪些东西提高竞争力

android 程序员 移动开发

【自学Android】使用DataBinding,ViewModel,LiveData完成点赞小功能

android 程序员 移动开发

【自学Flutter】20

android 程序员 移动开发

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

资讯网狗宝宝起名能用字中央气象台橙色预警周易取名公司起名免费珠海微网站建设周易起名网免费起名大全打分测试seo资源网算命网站大全深圳专业做网站设计找网名姓单 取名起名大全龙凤胎起名2020鼠12月份出生的宝宝起名起个名称呗王通seo视频网络营销网站推广策划方案雕塑园林公司起名营销型网站网建设中国叙利亚比分任姓男孩子起名大全专家解说红楼梦防火墙怎么关闭洛起名字海珠建设网站如何建设学校网站平台网站制作的柘城小干辣椒最新价格石材行业公司起名如何解决梦魇武侠小说免费下载小说推荐言情少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化