Odeon的前后端分离之路

很幸运于今年加入科大讯飞,加入卧虎藏龙的大数据研究院。负责Odeon大数据平台前端方向的探索和研发工作。

在此之前,Odeon上线已有一年多,其间版本更新频繁。很难想象在仅有大数据开发和服务端同学的情况下,能将平台前端部分维护的相当稳定。而且还在不断快速推出新功能,确实很不容易。

接手的Odeon是什么样?

Odeon背后有着很多大数据相关的组件,以及复杂的集群部署方案。这些对于我来说是完全陌生业务方向,虽然不在我的研发范围内,但也在逐步做学习了解。

对于前端来说,最重要的当然是Odeon的WEB侧。在最早大数据项目立项时,根据当时所处的环境,很明智的采用了hue作为WEB选型。

作为一个同时集成了前端界面、后端功能以及成熟的部署方案的框架,hue为早期的项目的快速推进起到了至关重要的作用。在不足三个月时间内就完成Odeon的第一个版本的上线。

项目演进一年后,经过数次功能累加的Odeon已经逐渐在WEB侧表现出一些不足,主要有以下几点。

  • 1、hue框架对前端部分的优化做的不够,未处理静态资源的模块化、打包、压缩等
  • 2、前端基础框架采取的是较为老旧的knockout进行开发,虽然在前端MVC中资历很老但已略显疲态
  • 3、前端组件有较多冗余,存在不少功能相似的重复性组件
  • 4、前端逻辑与后端代码相互胶着,排查问题难度大,可维护性较差

上面列的几个问题,有hue框架自身的局限性,也有开发时对前端的重视度不足引起的。当然这些都可以归类到历史原因。

尝试做过哪些处理?

针对静态资源部分曾做过调研,hue是基于django框架开发,python作为底层语言。在这样的架构下借助于django-pipeline可以实现静态资源的优化。

虽然找到了能完成静态资源优化工作的工具,对比最近几年前端日新月异的工具演化,django-pipeline的API还是略显笨拙。并且此处改造强依赖于server端逻辑,实现成本较高,并且收益较小,因此不予考虑。

针对第二条,很自然想到两种办法去处理。一是直接替换前端框架,但是因为替换底层框架工作量相当大,而且测试成本极高,因而放弃。二是按模块替换,但是这会引来第三条组件冗余问题,更是得不偿失。

第三条就相对简单很多。最开始接触项目我曾统计过平台用到的前端组件,在可以相互替代的组件中选出一个供使用,其余的逐步替换直至从项目中移除。

第四条就相当难办了,在现有架构下前后端胶着的问题几乎没有任何可操作的空间。

在接手项目初期一条条处理下来,就是小打小闹并没有质的改变。

为什么选择前后端分离?

在对项目做了一些调研、处理均未获得较大收益之后,我开始尝试使用前后端分离的方式进行处理。主要基于以下几点考虑:

  • Odeon作为平台性的WEB应用,无需考虑SEO、读屏等场景,天然适合前后端分离方案
  • 已有开发模式,前端必需有一台完备的开发环境,前后端分离可以让前端仅仅关注前端部分的交互功能
  • 通过API来约束前、后端,可以让职责更清晰,同时降低维护成本
  • 对已有功能可以暂时不作处理,通过逐步重构的方式更平稳的进行各个击破
  • 最重要的一点是,前端可以自主选择更为顺手的脚手架处理资源优化

虽然列了几条考虑方面,但是最核心的其实只有一个词「解耦」。一是指具体代码层面的解耦,如业务逻辑、架构、组件等;二是前后端分工层面的解耦,可以做到各司其职,相互独立开发。

解耦后最直观的影响就是提升开发效率、降低维护成本,同时解决平台面临的问题。

具体做了哪些事?

说到底前后端分离只是一个概念性的架构,具体落地有很多种实现方式。在Odeon项目的实践中主要有以下五点:

  • 搭建一套前端工作流,这里选的是vue全家桶,包含了webpack、es6、element等
  • 实现前端通用逻辑的开发,如登录验证、用户信息、集群切换等基础功能
  • 在域名下选择一个path,供前端使用
  • QA、prePub、online等环境,通过nginx配置静态资源目录,无需经过python
  • 本地开发采用代理的方式,将前端代码无侵入的映射到某个物理环境

前面四条相对容易理解,对于最后一条「无侵入式」的代理可能会略显困惑。

其实很简单,比如我可以QA环境为蓝本,开发时使用的URL即为QA环境的域名,针对前端的path动态代理至本地。这样即可使用QA环境的绝大多数功能以及数据服务,而前端部分则为本地开发代码,具体逻辑可以看下图。

QA环境无侵入式开发流程.png

这样一来即可达到,并未动QA环境一行代码,又可以基于QA环境进行开发的效果。当然实际开发中更推荐使用同一需求下的后端同学的环境,这样能够更加高效快捷。

本地代理使用了基于nodeJS开发的代理工具whistle,感兴趣的话可以尝试使用。

这样就万事大吉了?

答案必然是否定的,前后端分离是根据当项目现状,以及可预见的迭代方向上作出的一个选择,能够解决眼前问题,同时适应中长期的前端项目发展要求。

但正如三国演义中第一回提到的一样「分久必合,合久必分」,如果只是一味的强调前后端分离而不知变通的话,可能在特定场合下会因为限制了技术的多样性而引起反效果。

以上就是最近Odeon在前后端分离上的一些探索,希望对你有所帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容