互联网系统架构|前后端分离技术体系

 点击「京东数科技术说」可快速关注

「摘要」随着互联网技术的发展以及终端设备的不断增多,前后端分离技术已成为移动互联网领域不可或缺的技术。前后端分离技术的不断完善,让前后端的分工与系统边界划分越来越清晰。正是由于这种日趋严格的边界定义,致使前端工程师很少关注后端技术架构,后端工程师很少关注前端技术框架。

本篇内容通过阐述前后端技术体系,让前后端工程师同时了解前后端技术,在设计整体移动互联网工程时,能够充分利用前后端技术优势,设计出更高效更稳定的移动互联网系统架构。


前后端分离架构演进过程

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-高稳定性解决方案

 

 推荐阅读

1、算法实践|绝对语义识别挑战大赛方案分享

2、机器学习实例|浅谈文本挖掘应用

3、技术节系列|支付账务清结算系统设计


京东数科技术说&技术课堂

   ▼▼▼     

由京东数科-数字技术中心策划组织

倡导“原创·实用·技术·专业”

致力于分享技术领域实战经验与技术干货

线上订阅“京东数科技术说”,线下聆听“技术课堂”

为加强技术分享、总结沉淀,提升数科技术影响力而搭建的

线上线下融合交流平台

不只一技之长 · 我有N技在手

 咨询、建议、合作请联系:

刘嘉璐(liujialu)/张明瑛(zhangmingying3)

长按识别二维码关注我们

京东云技术团队
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客
业务复杂度治理方法论--十年系统设计经验总结
09-05 959
软件设计的核心在于降低复杂性。--《软件设计的哲学》业界对于复杂度并没有统一的定义,斯坦福教授John Ousterhout从认知负担和工作量方面给出了一个复杂度量公式子模块的复杂度cp乘以该模块对应的开发时间权重值tp,累加后得到系统的整体复杂度C这里的子模块复杂度cp是一个经验值需要注意:如果一个子系统特别复杂,但是很少使用及修改,也不会对整体复杂度造成太大影响。例:spring框架内部代码较为复杂,但由于几乎不需要我们去变动,所以对系统的整体复杂度影响并不大。
博客
【转载】golang内存分配
09-05 606
在 1.10 以前 go 的堆地址空间是线性连续扩展的, 比如在 1.10(linux amd64)中, 最大可扩展到 512GB. 因为 go 在 gc 的时候会根据拿到的指针地址来判断是否位于 go 的 heap 的, 以及找到其对应的 span, 其判断机制需要 gc heap 是连续的. 但是连续扩展有个问题, cgo 中的代码(尤其是 32 位系统上)可能会占用未来会用于 go heap 的内存. 这样在扩展 go heap 时, mmap 出现不连续的地址, 导致运行时 throw.
博客
自增主键去哪了?---一次开发过程中的思考
09-05 826
MySQL是作为大家都经常接触的DB,相信大家都会有一定的认知,自增主键不连续大家肯定也遇到过,这次在联调过程中遇到这个情况,在跟别的小伙伴分享的时候,突然就想写一篇文章,文章里面如果有不正确或者不准确的地方也欢迎大家斧正~说实话,作为一名交易端的研发人员,业务开发任务压力真的蛮大的,我也迷茫过,如何在这个过程中成长,珍惜我们遇到的问题,将遇到的问题记录在册,深追问题,你会发现有很多问题其实真的是因为我们某些知识的薄弱点造成的。
博客
万字长文浅谈三高系统建设方法论和实践
09-04 1320
整个软件的发展历程是一部软件复杂性对抗史,软件的复杂性分为技术复杂性和业务复杂性,业务复杂性主要是建模和抽象设计,技术复杂性主要是三高(高性能,高并发,高可用)的应对,C端的业务一般以技术复杂性为主,业务复杂性为辅,而B端或者M端的业务通常以业务复杂性为主,技术复杂性为辅。本篇文章主要是从后端研发的视角结合自己多年的B C端系统建设实践谈下三高系统的建设方法论和实践,希望和大家相互交流,共同进步,同时这是我参与创作者计划的第1篇文章。
博客
Vision Pro开发实践(结合24黑马idea)
09-04 916
利用ModelEntity加载模型,添加到RealityView的content中展示,这样可以对模型做各种操作,比如添加子模型,修改光照,材质等要素。举个例子来讲,我需要在运动鞋模型“sneaker”上面添加一个可以与用户交互的白色圆点模型,用于在用户点击的时候添加/展示对应部分的评价。这次结合的idea是我参加黑马比赛时想到的,主要内容是:在商品评价时增加商品的3D模型,用户可以在虚拟现实环境中查看商品的3D模型,并对模型的特定位置进行评论。:通过3D模型动画,用户可以直观地了解产品的特性和使用方法。
博客
买药秒送 JADE动态线程池实践及原理浅析
09-04 1024
买药秒送是健康即时零售业务新的核心流量场域,面对京东首页高流量曝光,我们对频道页整个技术架构方案进行升级,保障接口高性能、系统高可用。动态线程池是买药频道应用的技术之一,我们通过3轮高保真压测最终初步确定了线程池的核心参数。但我们仍面临一些保障系统稳定性问题:如何监控线程池运行状态?以及因流量飙升出现任务堆积和拒绝时能否实时报警,线程池核心参数能否做到不重启应用,动态调整即时生效?经调研,业界成熟的动态线程池开源项目有dynamic-tp和hippo4j。
博客
从原理聊JVM(一):染色标记和垃圾回收算法
09-04 1009
本篇介绍了JVM中垃圾回收器相关的基础知识,后续会深入介绍CMS、G1、ZGC等不同垃圾收集器的运作流程和原理,欢迎关注。。
博客
BFF层聚合查询服务异步改造及治理实践
09-04 999
本篇主要是思考如何依赖现有框架、环境的能力,从代码层面系统化的实现相关治理规范。最后仍引用王晓老师文章结尾来结束。
博客
QPS提升10倍的sql优化
09-04 899
总结本次优化经历•慢sql 往往是影响数据库性能的大瓶颈,sql写好了不但可以优化性能,还能节约机器成本,降本增效。•最好能看到sql语句执行的第一现场,本次主要是由于查看代码时没有及时注意到索引字段的传参类型不对这一细节,造成花了很多时间分析问题•虽然整个问题分析过程比较曲折,但问题分析的方向应该还是对的,过程中学到不少知识。•表结构的设计也有一些历史遗留原因,site_id 字段在表中定义为整型可能比较符合业务含义。表字段定义和业务含义一致,写sql也不容易犯错。
博客
一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器
09-04 1030
Graceful Response内置了两种风格的响应格式,可以在文件中通过进行配置。•gr.responseStyle=0,或者不配置(默认情况)"msg": "有内鬼,终止交易"},"data": {•自定义响应格式如果以上两种格式均不能满足业务需要,可以通过自定义去满足,Response@Override@Override@Override@Overridereturn msg;注意,不需要返回的属性可以返回null或者加上注解。
博客
【原创】【深入浅出系列】之代码可读性
09-04 937
原创声明:该文章是个人在项目中亲历后的经验总结和分享,如有搬运需求请注明出处。这是“深入浅出系列”文章的第一篇,主要记录和分享程序设计的一些思想和方法论,如果读者觉得所有受用,还请“一键三连”,这是对我最大的鼓励。一句话:见名知其义。有人说好的代码必然有清晰完整的注释,我不否认;也有人说代码即注释,是代码简洁之道的最高境界,我也不否认。但我都不完全接受,如果照搬前者,有人会在每个方法、每个循环、每个判断都添加大量注释,对于一个表达不严谨的coder来说,代码与汉字可能词不达意;
博客
动态化-鸿蒙跨端方案介绍
09-04 1132
动态化目前已经具备一份代码在iOS、Android、H5三端运行的能力,该方案就是将动态化一码多端能力对接到鸿蒙系统,降低首次适配研发投入;一次开发,四端共用,长期降低业务迭代成本;并且使业务具备随时发布能力。。
博客
【ChatGPT应用篇-1】助力Beauty代码的初体验
09-03 699
以下是一个与ChatGPT 结对编程的一个Excel数据解析案例,大家可以根据我的思考过程进行体验,以下放了一些截图,ChatGPT的反应速度惊人,代码版本一步步进行迭代优化,感触较深的是。对于ChatGPT输出的代码没有做仔细的Review及调试,但是看代码风格基本上是改改就能用于生产的,对于代码规范、命名还是很认可的!10.提升程序效率,把解析性能在提升10倍 (架构师的成本意识,这个问题的回答有点意思)6.替换掉 poi 采用EasyExcel (替换原始的默认技术选型,替换三方包)
博客
一文了解电商大促系统的高可用保障思路-献给技术伙伴们
09-03 1024
电商大促是电商平台组织的一种大型销售推广活动,目的是通过提供各种优惠、折扣等方法,提高商品销售额和网站流量,增加消费者的购物欲望,以实现销售目标。电商大促活动通常会在一些特定的节点或者节日举行,比如“双11”、“618”、“黑色星期五”等,这些时期的电商大促极具吸引力,既有大量的商品打折优惠,又有丰富多样的活动供消费者参与,是电商平台提升销售业绩的重要手段。
博客
一起单测引起的项目加载失败惨案
09-03 1121
是相对于静态编程而言的,平时我们讨论比较多的就是静态编程语言,例如Java,与动态编程语言,例如JavaScript。最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对。建议大家在构建Maven项目时,仔细检查POM文件中的依赖,确保没有漏掉任何必要的库,以免因为遗漏而引起不必要的问题。但是,在我们的POM文件中,虽然我们添加了对Spring框架的依赖,但是并没有添加。: 返回修改后的字节码。
博客
京东小程序折叠屏适配探索
09-03 998
应用在折叠屏运行时,可以从一个屏幕切换到另一个屏幕。应用应该做好配置变更的适配和界面状态的保存,以保证应用当前任务能无缝迁移到转换后的屏幕,从而为用户提供出色的连续性体验。折叠屏作为未来Android屏幕发展的新趋势,具有很大的发展前景,做好折叠屏相关适配支持也势在必行。小程序相关适配已经跟随京东主站、小家App、小家三星预装版等发布上线,本文是作者进行相关适配的一些心得体会,如有不足敬请见谅,欢迎交流探讨。
博客
KubeCon China 2024全球大会在香港举行,京东云受邀参加探讨云原生、开源及 AI
09-03 385
和数字化大潮一样,在AI化的革命下,云端也在全面拥抱AI,并在方方面面变得更安全、更高效,让全球各行各业受益。大会首日吸引了来自全球 30 多个国家和地区的 1000 多名参会者,共同探讨云原生、开源及 AI 领域的前沿进展、核心技术和最佳实践。在京东云中,联邦Serverless服务基于联邦管理模型和Serverless应用模型,为联邦应用容器部署、弹性扩展和故障迁移提供JDOS应用容器控制服务。弹性扩缩容技术方案有很广大的应用前景,京东云内部也在进行大量的生产实践和验证。1. 多集群管理和分发实践。
博客
京东搜索重排:基于互信息的用户偏好导向模型
09-03 1029
。
博客
探索AC自动机:多关键词搜索的原理与应用案例
09-03 1029
目前,大多数自由文本搜索技术采用类似于Lucene的策略,通过解析搜索文本为各个组成部分来定位关键词。这种方法在处理少量关键词时表现良好。但当搜索的关键词数量达到10万个或更多时,这种方法的效率会显著下降,尤其是在需要与词典进行详尽对比的场景中。本文将介绍的Aho-Corasick(AC)自动机作为多模式匹配中的经典算法,不仅能够处理大规模文本数据,还能确保搜索过程的实时性和准确性。AC自动机可以被形象地比喻为一个超级找词机器。
博客
“前端”工匠系列(一):合格的工匠,究竟该搞什么
09-03 664
有效的交流是需要以有效的信息为载体的。在用户端日志查询、特殊边界场景复现、日志排查定位故障等场景,“实时”就不是必要的,这种场景下一般采用T+1查询,但是又引入了大量级日志的存储周期的话题,一般企业应用级的用户日志保存14天就完全够用了,因为对于C端日志来说,更多的是对现场故障的复现、处理及跟进,如果算法策略对用户日志有需要,只需要在一定时间内采用处理任务对用户日志进行一次处理,把输出的标签、行为特征等关键数据存储就可以,基础的用户日志还是应该被存档或清除释放资源供给更有价值的最新日志来使用。
写文章

热门文章

  • 从实习生到算法专家,他只用了2年! 20994
  • 一文读懂联邦学习的前世今生(建议收藏) 20045
  • AutoML系列 | 01-自动化机器学习技术原理 12113
  • 京东数科2020双十一备战实录 11467
  • 京东金融云测平台方案揭秘 11414

分类专栏

  • 数据结构和算法 3篇
  • 算法 7篇
  • 人工智能 34篇
  • 硬核干货 220篇
  • 前端 41篇
  • 测试 31篇
  • 性能优化 1篇
  • 云服务 11篇
  • 数据库 48篇
  • 移动开发 8篇
  • 软件架构 24篇
  • 安全 2篇
  • 架构设计 20篇
  • 11.11技术实践 1篇
  • 线上问题案例 9篇
  • 质量 1篇
  • 系统稳定性建设 2篇
  • Rust 6篇
  • 618技术实践 7篇
  • 大促备战 5篇
  • 程序人生 15篇
  • 京东数科大事记 2篇
  • AAA 2021
  • 时空数据JUST 13篇
  • 京东数科KuAI平台 2篇
  • 联邦学习 2篇
  • AutoML 4篇

最新评论

  • ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

    zhoufwind: 修复的成本太高了,生产环境尽量还是确保master节点及数据的冗余部署,数据修复作为最后的挽救手段抢救,学习了!表情包

  • 【Clickhouse】ReplaceingMergeTree引擎final实现合并去重探索 | 京东云技术团队

    weixin_51503654: 使用这个引擎后,是不是ttl就不要设置了,否则数据一直没变化,不就会删除吗

  • clickhouse 优化实践,万级别QPS数据毫秒写入和亿级别数据秒级返回 | 京东云技术团队

    乞力马扎罗-雪: 想问下2.4改造方案的flink摄入如何实现?有相关demo么?

  • 【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

    2401_87205018: 太专业了

  • 京东短网址高可用提升最佳实践 | 京东云技术团队

    Soujer: 贵站,有接口漏洞,可以绕过白名单限制,请速与我联系,已提交贵站应急中心,回馈是被忽略!

最新文章

  • 业务复杂度治理方法论--十年系统设计经验总结
  • 【转载】golang内存分配
  • 自增主键去哪了?---一次开发过程中的思考
2024
09月 32篇
03月 1篇
02月 25篇
01月 48篇
2023年410篇
2022年1篇
2021年12篇
2020年86篇
2019年78篇
2018年45篇
2017年23篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司优化网站登录网站优化排名 网络服务你知道新网站如何优化吗网站前端优化方法施秉县网站优化公司仙桃网站优化推广开发外贸网站优化课程郴州长沙网站优化系统平台优化网站常见的误区新乡网站排名优化哪家价格便宜横岗网站自动优化价格江门新站网站优化方案射阳网站优化多少钱外贸网站图片优化技巧黄南网站排名优化汕尾网站优化太原网站关键优化网站优化的好处都有哪些孟州推广网站搭建优化网站关键词优化哪个好徐州正规网站seo站内优化扬州网站优化排名企业红谷滩新区网站优化的公司网站加载页面图片优化物流运输网站优化方式seo网站优化方面的口号排名网站优化快速工具百度优化网站建设流程及费用海口网站优化哪个品牌好如何购买优化网站的软件歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化