东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

从前后端分离看阿里 Web 应用架构演变

  • 2018-11-29
  • 本文字数:3193 字

    阅读完需:约 10 分钟

从前后端分离看阿里Web应用架构演变

前后端分离为什么出现?本质上是什么?前后端分离运动对 web 应用的架构带来了怎么样的变化?前后端分离怎么分离?为什么是 Node.js?前后端分离的未来怎样?


阿里前端技术专家剪巽 老师在今年 7 月 ArchSummit 大会深圳站上探讨了这个话题。


前后端分离走过了一段历程,最根本的原因是传统的后段服务支撑不了现代化的前端开发。平时工作中用到的工具链、开发框架、规范协议、浏览器等在不断涌现,这些新的技术在给开发环境、开发流程提了更多新需求。Node.js 在这个背景下能够把这些工具串联起来。以前 Java 的同学在开发、调试的时候要泡一杯咖啡,非常耗时。

前后端分离的 3 个阶段

1.模板层的分工


最早的 Java 开发阶段需要一个包含所有内容的 war 包,整个前端的编排,像 HTML 页面、CSS、JS 很多时候包含在 HTML 页面,也会出现脚本复用、样式复用抽离出来。所以前端开发当时是围绕著名的 velocity 模版。这一层最大的问题是,后端的同学看前端资源像看天书,前端同学看后端模版也像是看天书,融合效率非常低。


2.静态资源独立部署



Web 2.0 之后,大量的前端资源需求出现,Web 前端体验最大的改进就是副客户端,客户端资源非常庞大,代码不再是直接发布到线上,而是要编译,做预处理,可能还要做 CDN 的加速。整个应用被分割成两部分,后端服务发布之后,前端服务要独立更新,这样就给应用的更新带来了便利。这里存在一个问题是接口的协调,前端的需求变更,数据的要求也会变化,需要后端去协调资源的编排。另外一个问题是测试,前端持有脚本,样式资源,而模版却在应用层,应用层的开发、发布也是很复杂的。


3.独立应用层



这一层的变化在于,Node.js 可以提供工具能力之外,还具备很强的服务能力,从 mock 数据开始,到前端代码的预编译,资源编排,这些动作都合并到一个应用里面,前端形成 UI 应用层。后端相关的接口回退到 API,或者云端。在这一层,前端具备了更灵活、强大的能力,在数据编排这一层,Node.js 可以做轻量的粘合,服务端的开发也在往微服务方向发展,提升了开发效率。

为什么是 Node.js

在语言特性方面,Node.js 无需切换,整个开发、工具、日常工作中 Node.js 一种语言就可以满足所有需求。此外 Node.js 还有优异的性能,一直在迭代。


其次是在社区生态上,在语言模块包上的贡献数据,NPM 库的数据量很高。Node.js 能从服务端框架去链接服务,整合成前端所需数据资源。


另外在生产周边,Node.js 的语言成熟度很有优势,社区里关于泄漏、性能调优的工具也有很多研究,对前端开发更友好。


产品中的实践:


通常大数据服务里,需要解决计算和存储能力。业务曾有很多的需求,从数据接入,到离线处理,到实时分析,所以它的特点是有很多的依赖,而前端无法做到相应每一个需求,大量需要 mock。


另外就是业务的需求很多,在流程控制、数据转换、数据安全、分析展现等方面需要有大量的组件沉淀。最大的特点是有众多独立的功能模块。


而要想让这些模块和功能实现有什么解法呢?就需要这三个方法:制定框架,微应用分割,运维工程化。


1.定制应用框架就是来解决前端的编译,工程管理,数据 mock 等问题。



面向应用的时候,更多的是在第二层和第三层做定制化封装,把业务插件都封装起来。应用层在运行过程中,前端会托管所有权限相关的事情,包括登录系统,中间件等等。此外还会连接很多服务和驱动,把前端框架集成起来,这是一个完整的开发环境。


2.把各自独立的模块应用切割成微应用,一个微应用解决一个问题,便于分工和隔离处理。



具体做法是微服务拆分,搭建微应用服务,承载大量的小服务,同时也会出现很多域名的问题,很多访问入口。这里做了一些小创新,在入口可以定义端口,sever name,访问 path,当把一个场景分成 10 个应用发布,发布之后再根据不同的路径拼接成一个应用,对体验没有影响。


除了路由自动化规划之后,对应用的发布做到上下平滑,不会影响流量。前端人员自己打包发布就可以了。


3.当这些应用被分割的很细致之后,随之而来的是如何管理这些小应用。



比如有两台机器做互备,把所有小 App 都发布到上面之后,由一个个小颗粒组成一个大应用,看上去很像一个蜂巢,因此命名 honeycomb,这些蜂巢组成一个大蜂窝,完成一个主功能。在应用推进过程中,有些应用压力大,需要把应用集群隔离开,把有不同业务需求场景环境,例如开发环境、预发环境、线上环境隔离开来,不同环境配置的集群资源和机器数量都不一样。随着业务发展,隔离的事情会教给容器去执行。

分层设计解决 Node.js 密集计算问题

社区里有一个讨论,Node.js 是否适合密集计算?密集计算分成两层,绿色部分会接收用户请求,第二层浅蓝色会处理用户请求,写很多的 processor,提供大量的进程去提供密集计算。主要问题在于 CPU 容量是恒定的,当有很多并发请求的时候,如何保证在服务层去很好的分配计算任务。拆成两层之后,保证用户请求不会被 block 掉。如果第一层大量的密集计算,会导致用户的请求或者连接的需求被挡住,接收不到响应,所以要往后堆,做成队列,可扩容的大集群。整个结果在 Java 里就可以理解为 Java 庞大线程的处理过程。



社区里在线程库里还有一些尝试,Napa.js 是微软开源的线程库,前端同构的需求可以探索使用 Napa.js 这个工具。

DataV 场景使用案例

DataV 是一个可视化产品,类似于 PPT,有编辑器,最主要的功能是把各种组件挂到浏览器屏幕上,组件和组件之间形成事件绑定,事件驱动组件去调用数据服务,数据从计算层返回。



它的特点之一是,数据请求量非常多,请求排队之后,要把数据合并起来,在服务器端请求太多数据源会出现慢的情况,导致请求驻留在服务器端,内存的波动会很严重。这里的解决方案是先到先返回。另外一个是在提供组件自定义开发功能的时候会遇到代码转换的需求,我们是在线帮助用户转代码,这里存在很多动态编译的过程,以及数据处理。

Node.js 应用层带来的便捷

Node.js 在这个场景下是有很多优势的,例如在 server 层可以更便捷的去完成这些开发以及支持,Babeljs 可以做代码转换的事情,Bigpipe 可以优化服务端的内存,可以缩减渲染时间,提升体验优化。在前面的数据流里有很多的 filter,给数据链中插入 processor,来定义处理微小的数据。用户在原始的数据到完整的可视化展现不需要再搭建一个产品去支持,只需要搭几个 filter,配几个数据源,拖几个组件就可以完成。Node.js 在这一层提供了很多便捷之处,例如创新实现。


所以,Node.js 在微应用体系里有很多优势,开发、测试、运维可维护性上有独立性。Node.js 给前端带来创新的便利性也体现在另外一点,那就是在云端的一些服务上,前端有能力在 service 集成、改变使用流程做很多事情。

前端接下来的变化

HTTP2/WebSocket 在网络层会在更多的场景里带来不同的体验。


还有前后端同构、WebGL、WebWorker、工具链的继续进化,前端的工具、资源编排、框架等都在快速变化。


而服务端趋势:云化(更细粒度的虚拟化)、服务化(API、可编程)、智能化(数据智能普及)、编排(微服务、微应用运维便捷),也给前端带来更多的机遇。


前端的边界会在这些变化中被拓宽,新一轮的创新会在这其中迸发。

作者简介

目前在阿里云飞天一部从事数据产品的研发工作,关注数据领域(数据连接、分析、可视化等)。过去的几年都在和数据分析类产品打交道,经历了几代数据产品的演变和架构变迁(淘宝数据平台的数据魔方、面向精准营销的全景洞察、面向数据分析的 DataV)。


更多内容可关注前端之巅公众号(ID:frontshow)


活动推荐

12 月 7 日北京 ArchSummit 全球架构师峰会上,来自美团、百度、阿里、快手的讲师齐聚一堂,共同分享“打造 Native 体验 Hybrid App 实践”、“定制统一可维护的前端架构”、“10 年双十一前端关键技术”和“同构 Web App 的另一种探索”的分享。


会议开幕倒数第 8 天,购票联系票务灰灰 17326843116


详情请戳:https://bj2018.archsummit.com/schedule?utm_source=WeChatfrontend&utm_medium=suningnode


2018-11-29 14:195480

评论 4 条评论

发布
用户头像
这文章真跳跃~~建议把每一部分的参考文献发出来
2018-12-21 15:19
回复
用户头像
技术发展真快
2018-12-11 09:44
回复
用户头像
副客户端, 是富客户端,字写错了。
2018-11-30 19:06
回复
没有更多了
发现更多内容

Design DaVinci Resolve Studio18中文破解版下载(达芬奇调色剪辑)

影影绰绰一往直前

Docker Linux快速安装及Nginx部署

这我可不懂

Docker Linux

基于ETLCloud的MySQL到SqlServer实时同步解决方案

RestCloud

MySQL 数据同步 ETL SqlServer

BetterZip 5 for mac(专业解压缩软件) v5.3.4中文注册激活版

mac

苹果mac Windows软件 BetterZip 压缩和解压缩工具

软件测试开发/全日制丨Web端测试—JavaScript讲解 学习笔记

测试人

软件测试

阿里巴巴中国站1688商品详情API实时数据获取:从零基础到精通的全程指南

Noah

数字化助力,聚道云软件连接器实现软件公司人事信息自动同步

聚道云软件连接器

案例分享

Adobe Photoshop 2023直装破解版下载(PS2023)

影影绰绰一往直前

Modbus Slave 注册版下载(调试工具)

影影绰绰一往直前

Spring 应用合并之路(一):摸石头过河 | 京东云技术团队

京东科技开发者

医疗设备管理二维码:扫码查看使用说明、填写消毒记录

草料二维码

二维码 草料二维码 医疗设备 医疗设备管理

Adobe Photoshop 2024直装版下载 (PS2024)

影影绰绰一往直前

中间件是开箱即用的吗?为什么要开发中间件adapter?

华为云开发者联盟

开发 华为云 华为云开发者联盟

Bartender 4 for Mac(菜单栏应用管理软件) v4.2.25完美激活版

mac

Bartender 苹果mac Windows软件 菜单栏图标

分布式日志追踪ID实战 | 京东物流技术团队

京东科技开发者

如何做代币分析:以 OCEAN 币为例

Footprint Analytics

区块链 加密货币 代币

NFT 项目入驻 NFTScan Site 流程说明

NFT Research

NFT NFT\ NFTScan nft工具

DDD落地实践-架构师眼中的餐厅

EquatorCoco

架构 DDD 领域驱动

Python工具初步认识

快乐非自愿限量之名

Python C语言 开发语言

如何通过技术手段使LED显示屏更加节能?

Dylan

概念 节能 LED显示屏 市场

企业数字化转型,应该先从哪开始?

优秀

企业数字化转型

Adobe Acrobat Pro DC 2023中文直装版下载(PDF编辑软件)

影影绰绰一往直前

iZotope RX 10 v10.4.2 汉化直装版下载(专业的音频降噪修复软件)

影影绰绰一往直前

JetBrains IntelliJ IDEA 2023 完美激活版下载

影影绰绰一往直前

小程序如何帮助电商发力,寻找增长突破口

Geek_2305a8

代码出错了,IDE竟然不报错?太诡异了....

互联网工科生

ide 代码 ChatGPT

六个提升SQL查询性能的核心技巧

高端章鱼哥

数据库 sql

3 分钟为英语学习神器 Anki 部署一个专属同步服务器

米开朗基杨

NeurIPS'23 Paper Digest | PromptTPP: Prompt Pool 与时序点过程模型的持续学习

可信AI进展

机器学习 持续学习 Prompt prompt learning 时序模型

一文详解 Java 限流接口实现

阿里技术

Java 分布式限流 限流算法 应用级限制 限流接口

如何实现APP安全加固?加固技术、方法和方案

Geek_66e2f3

从前后端分离看阿里Web应用架构演变_大前端_剪巽_InfoQ精选文章