备案 控制台
开发者社区 开发与运维 文章 正文

浅谈前后端分离架构模式

简介: 在现在的软件架构中,前后端分离是很普遍的软件架构,让前端更加专注于UI逻辑渲染,后台专注于数据业务逻辑,而前后端数据交互的方式就是通过API接口。

image.png

在现在的软件架构中,前后端分离是很普遍的软件架构,让前端更加专注于UI逻辑渲染,后台专注于数据业务逻辑,而前后端数据交互的方式就是通过API接口。

最早接触前后端分离的概念是在Gmail盛行的2006年年底(暴露年龄了),那时候的Gmail账号是需要邀请才有资格注册,你是否还记得邀请你的那个他吗?

Gmail盛行的原因,个人觉得是因为Gmail的用户体验是如此顺手、方便,也开启了Javascript+Ajax技术的发展之路,同时也出现了RIA(Rich Internet Application )的概念,即富网络应用,出现了很多技术人员去研究和模仿其实现。

对于我来说,同样被Gmail的体验吸引了,从那开始学习DIV+CSS布局,并对asp.net的网站管理后台进行重构,完成前后端分离,使其界面主题与数据服务分离,让前端(当时应该还没这个岗位)更加专注交互体验和主题界面,后端专注数据存储及逻辑。后来C#还推出了LINQ数据库访问技术,重构后的管理系统后台架构采用.NET 3.0+ASP.NET AJAX+LINQ,前端架构采用Jquery为基础,ExtJS为UI组件框架。

期间前后端通讯规范,即API规范,是开发团队协商定义统一的数据交互标准,关于API规范后面再来谈。回归主题,先来谈谈为什么需要前后端分离?

为什么要前后端分离?

最直观的感受就是后端工程师对于数据的视觉呈现并不敢兴趣,在他们看来数据正确性比视觉效果更加重要,当然这只是个人觉得的原因之一。

其实最重要的原因是让数据逻辑和UI逻辑解耦,其实熟悉《 CSS禅意花园》的朋友更容易理解,随着RIA的发展,UI逻辑相比之前变得更加丰富,需要适配的设备也越来越多,应用的数据逻辑并不会随着设备的不同而有大的变化,这个时候就需要更加专注UI逻辑的工程师。

最后就是性能及部署,在网络环境不好的年代,大型应用为了保证加载速度,一般都会采用CDN对静态资源进行加速,而CDN技术只是对静态资源(js、图片、css、html、视频、音频等)进行分发,对于动态计算数据逻辑是无法进行调度的。为了能够保证应用性能就必须采用前后端分离。

总结一下前后端分离的优化:

  • 分工明确,让不同专长的人更加专注,提高工作效率及质量
  • 实现应用高内聚低耦合,减少后端(应用)服务器的并发/负载压力。
  • 可以使后台能更好的追求高并发、高可用、高性能,对于容器化部署可以达到更佳的动态扩展能力。

下面先来谈谈前后端分离架构里面设计的数据通讯基础API规范,比较常见的API规范有:RPC、RESTFul、GraphQL。

RPC

RPC的全称是Remote Procedure Call,即远程过程调用,与之对应的是本地过程调用,核心思想是把远程的方法映射到API。就是客户端基于某种传输协议通过网络向服务提供端请求服务处理,然后获取返回数据;而这种调用对于客户端而言,和调用本地服务一样方便,开发人员不需要了解具体底层网络传输协议。

为了方面大家理解什么是RPC,先通过简单的代码来看看本地过程调用是怎样的。

const numA = 1001;
const numB = 1002;
const addition = (a, b) => {
    return numA + numB;
};
const total = addition(numA + numB);

调用addition就是一个本地过程调用。通俗来讲就是调用本地代码中的提供的API方法的过程,就称为本地过程调用。

远程过程调用,最终调用的API方法不是运行在本地的,这个提供服务的程序有可能是运行在不同进程,甚至是不同机器上的或云主机上。RPC的调用过程从代码上来看,和调用本地的代码是非常相似,但具体的方法实现逻辑是在另外的进程或者主机上。下面是一段PHP中RPC调用的代码片段,调用的方法addition就是在远程主机上实现具体的逻辑。

$numA = 1001;
$numB = 1002;
$api="https://rpc.devpoint.cn/";
$rpcHelper = new \HproseHttpClient($api);
$total = $rpcHelper -> addition($numA,$numB);

从调用来看,本地调用和RPC调用没啥区别,就是在架构上有所不同,相对来说RPC调用一般都是异步的。

RPC是通过约定协议来实现跨端通信的,调用双方遵守同一套协议,客户端会通过协议把需要调用的服务告诉服务端,服务端接收到客户端信息后进行逻辑运算后,再通过协议把结果回传回给客户端。在业内比较知名的RPC框架是Google公司的grpc,grpc是使用ProtoBuf(接口描述语言Interface Definition Language,IDL)定义双方的通信协议的。

RESTFul

REST 是目前比较流行的一种API设计理论。因为它结构清晰、符合标准、易于理解、扩展方便,所以被越来越多的应用场景所使用。REST(REpresentational State Transfer),首次出现在 2000 年 Roy Thomas Fielding 的博士论文中,它指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 REST 的。

接下来就是RESTFul规范,之前在《 REST介绍与设计指南》简单介绍过,应该是目前前端和后端数据通讯应用比较广泛的。

在RESTFul架构下,客户端会通过URI来确定需要请求的资源,建立连接后,会通过HTTP来发送/接收数据。客户端的请求目标通过统一接口访问的是资源(Resource),而不是服务本身。

GraphQL

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

从定义来看,GraphQL的主要功能是让客户端可以根据业务场景需要定义自己想要查询的数据,一般随着API数量的增加,客户端实现不同业务场景需求时就可以像堆积木一样组装业务需要的API,进而提高API的重复利用率。如有兴趣,可以看看《 NodeJs中使用Apollo Server构建GraphQL API服务》的实例,或许对你有所启发。

前后端分离架构

前后端分离架构,可以让前后端更加专注,提高项目开发效率。在架构中比较关键的是API通讯规范的制定,好的规范确实可以让效率提高。在架构中定义好了API通讯规范,前端按照规范MOCK数据推进项目,后端按照规范输出相应的API,可以大大缩短联调的时间。至于使用何种API规范,应该根据团队的情况来制定。

下面是简单的开发架构图:

image.png

下面是比较普遍的前后端架构图:

image.png

在微服务、serverless、容器技术成熟的今天,前后端分离对于性能及运营的提升相当明显,下面是容器化部署的架构图,可以快速实现前后端版本更新、扩展。

image.png

总结

本文简单介绍了前后端分离的优势,数据通讯API规范,列举了常见的应用架构图和容器化部署架构图。在具体实施过程中还涉及API文档管理、协议管理测试等问题,需要根据团队情况做出相应调整,需要结合实际不断去思考总结一套最符合团队的架构。

天行无忌
目录
相关文章
源码星辰
|
1月前
|
小程序 Java 数据管理
Java前后端分离架构开发的智慧校园电子班牌系统源码(SaaS模式)
.智慧校园设备管理: 设备管理主要对班级中正在使用的电子智慧班牌进行管理,基本功能包含(开关机状态、班级信息、设备型号、开关机信息、电子智慧班牌截屏信息、教师编号、设备ID、在线和离线状态、电子智慧班牌更新时间等)
源码星辰
49 0
i46usca74mzt4
|
8月前
|
存储 JavaScript 前端开发
“探索前后端分离架构下的Vue.js应用开发“
“探索前后端分离架构下的Vue.js应用开发“
i46usca74mzt4
62 0
今天是几号
|
3天前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
今天是几号
29 1
球球不吃虾
|
1月前
|
缓存 自然语言处理 前端开发
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
球球不吃虾
46 0
老板这功能得加钱
|
1月前
|
XML 前端开发 JavaScript
《浅谈架构之路:前后端分离模式》,面试篇2015校园招聘求职大礼包
《浅谈架构之路:前后端分离模式》,面试篇2015校园招聘求职大礼包
老板这功能得加钱
23 0
老板这功能得加钱
|
1月前
|
前端开发 JavaScript Java
《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园,前端开发新手项目
《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园,前端开发新手项目
老板这功能得加钱
52 0
源码宝
|
1月前
|
缓存 小程序
Java+saas模式 智慧校园系统源码MySQL5.7+ elmentui前后端分离架构 让校园管理更高效的数字化平台系统源码
智慧校园是在数字通增强版基础上,研发的一套面向教育行业的数字化校园软件,其显著特点是集学校网站、协同办公、即时通讯、网络空间、移动办公于一体。在满足教职工日常办公需要的同时,拥有诸多教育行业功能,并提供便捷易用的“家校通”平台以满足老师、学生、家长的日常交流。数字通智慧校园教育版中的协同办公、即时通讯、移动办公等功能模块随通用版一同改进,将网络办公最新技术应用到教育行业。
源码宝
57 1
阿里云云123
|
1月前
|
缓存 前端开发 安全
前后端分离架构下Java Web开发的挑战与解决方案
前后端分离架构下Java Web开发的挑战与解决方案
阿里云云123
63 1
技术君
|
1月前
|
移动开发 前端开发 Java
前后端分离架构模式讨论:要前后端分离,不要前后端分裂
前后端分离架构模式讨论:要前后端分离,不要前后端分裂
技术君
79 11
山河亦问安
|
1月前
|
安全 Java 数据库
SpringSecurity+JWT前后端分离架构登录认证
在SpringSecurity实现前后端分离登录token认证详解_springsecurity前后端分离登录认证-CSDN博客基础上进行重构,实现前后端分离架构登录认证,基本思想相同,借鉴开源Gitee代码进行改造,具有更好的代码规范。
山河亦问安
211 1

热门文章

最新文章

  • 1
    大数据分析平台之 OLAP 架构的最佳实践
  • 2
    Spring Cloud:一文读懂其原理与架构
  • 3
    存储架构深度解析:直连存储(DAS)、存储区域网络(SAN)与网络附加存储(NAS)的区别
  • 4
    SDN(软件定义网络)——重塑网络架构的新视角
  • 5
    云计算架构设计与实施:构建高效、可扩展的云解决方案
  • 6
    软件体系结构 - 架构风格(2)管道/过滤器架构风格
  • 7
    软件体系结构 - 架构风格(5)层次结构架构风格
  • 8
    软件体系结构 - 架构风格(9)基于规则的系统架构风格
  • 9
    Android HAL深入探索(1): 架构概述
  • 10
    软件体系结构 - 架构风格(7)事件驱动架构风格
  • 1
    【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(三)
    50
  • 2
    【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(二)
    80
  • 3
    【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(一)
    88
  • 4
    课7-隐语SCQL的架构详细拆解
    41
  • 5
    构建高效可扩展的后端服务架构
    30
  • 6
    构建未来:云原生架构在企业数字化转型中的关键作用
    34
  • 7
    金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
    88
  • 8
    【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
    46
  • 9
    【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
    93
  • 10
    【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
    140
  • 相关课程

    更多
  • Serverless 函数计算架构
  • 架构的演进
  • MySQL企业常见架构与调优经验分享
  • 企业Web常用架构LAMP-LNMP实战
  • 企业级互联网分布式系统应用架构学习
  • 高校精品课-上海交通大学 -企业级应用体系架构
  • 相关电子书

    更多
  • 阿里云卓越架构白皮书_导读版
  • 微服务×容器Meetup:云原生架构与应用专场PPT合辑
  • 云原生架构容器&微服务优秀案例集
  • 相关实验场景

    更多
  • MySQL引擎及架构优化
  • 基于数据湖架构的网站访问行为分析
  • 高可用应用架构
  • 使用EDA架构部署在线外卖订单系统
  • 搭建PostgreSQL主从架构
  • 基于Serverless架构的盲盒抽奖系统
  • 下一篇
    2024年阿里云免费云服务器及学生云服务器申请教程参考

    哆哆女性网filsh男宝宝起名字姓石起名大全免费起名2019宝宝在线起名打分作文辅导课superjuniorm成员手机管家江上往来人五行八字查询起名大全五行缺水怎么起名起名 带海字的名字茶招商加盟ff14捏脸数据喻姓起名按笔画起名子商标起名试验小偷家族zip格式澄海3c地图超级七龙珠开车晚上污痛痛的句子起带恩的名字网站制作公司起名甘姓的女宝宝起名苏宁和京东适合女孩起名的诗句词享受人生八字起测名字打分火星救援百度云吕姓女孩起名100分有气质淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

    哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化