• 苏宁易购:前后端分离架构的落地思考



    内容来源:2017 年 12 月 3 日,苏宁易购技术总监禹立彬在“互联网架构峰会”进行《前后端分离架构的落地思考》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

    阅读字数:2851 | 8分钟阅读


    摘要

    本次分享将为大家介绍前后端分离的存在意义以及典型业务场景,接下来会细致的介绍前后端分离的技术利弊,最后根据苏宁的经验来谈一谈渐进式前后端分离。


    嘉宾演讲视频及PPT回顾:http://suo.im/4WlSl9


    为什么要前后端分离


    前后端分离本质上是工作职责的细化。这两年前后端分离的呼声越发高涨,最重要的原因在于后端工程师不能简单的完成前端方面的工作。前端这段时间以来新的技术层出不穷,这种情况下后端无法简单的掌握前端技术,即使对前端来说也有一定的负担。


    前端的门槛越来越高,一个人无法将所有的事情都做完,也是前后端分离的一方面因素。


     典型的业务场景


    前后端分离其实也并非万能良药,对应不同的业务场景情况会有所不同。同样的应用场景也有所不同,前端传统的应用场景有PC端、移动端,另外还App hybrid、小程序等。针对不同的应用场景所使用的技术都会有所不同,应用场景众多让架构复杂度变的更高。


    技术挑战


    我们在前端方面遇到了很多的技术挑战,其中最重要的就是在大流量下要求高可用。对于访问量较小的网站,测试量并不是很大,只有在极少数情况下用户才能感知到BUG。但是大流量下感知人数会明显增多,所遇到的各方面问题也会增多,比如网络、接口缓慢的问题。针对大流量前端可以采用CDN方式抗住,这时后端的压力会比较大。当后端扛不住的时候,就需要前端来分担一部分压力,不能让用户感知到网页出现的问题,这种情况下高可用的要求会非常的高。


    第二点是所有的前端工程师都非常讨厌的问题,浏览器的兼容性要求高。相信没有人会喜欢兼容IE7的需求,但是用户量多的情况下总有用会使用IE7的,为了避免用户投诉这一需求就必须得到满足。


    对于电商来说每年要应付双11、双12、418等各种活动,这种情况下业务的迭代速度是非常快的,架构上处理会非常麻烦。还有一个比较麻烦的技术就是SEO支持,对于SEO很多技术都是不支持的,比如vue、react这样的MVVM框架是不能使用的。


     前后端常用技术利弊


    技术方案


    我们主要使用的技术方案有四种:前端模板(Ajax + 字符串模板)、MVVM(Vue、React)、Node模板(Express + ejs)、SSR(Node + Vue SSR)。这其中最古老的方案就是Ajax + 字符串模板,它本质上是拼接字符串。


    浏览器兼容


    无论是服务器渲染还是平常的渲染方式都支持IE6+,使用SSR或Node做渲染在浏览器兼容方面则会比较弱。基于现代MVVM框架的技术方案,同样也处于劣势,在浏览器兼容要求较高的场合中,无法使用。


    SEO支持


    对于SEO有要求的网页来说,使用web模板和Vue方案,不太合适。相对来说web模板要好一点,可以在页面未渲染之前添加一些介绍之类。Node和SSR在SEO方面问题不大,它们都是服务端渲染,首屏都包含足够多的数据。


    首屏渲染耗时


    现在的各种技术方案中对于首屏渲染耗时,显然使用Node是最快的。毕竟它是服务端渲染,数据是由Node服务端向服务提供方获取的。SSR渲染的花费时间相对于Node会多30%-50%。Web模板和Vue都是读取数据然后加载,其中Vue的渲染耗时会更久一些。总体来看在首屏渲染耗时方面MVVM框架是最慢的。


    异步接口速度


    在首屏加载完成后,很多页面都会有懒加载,需要向服务端请求相应的数据接口。这方面MVVM框架和web模板是直连后端的,而Node和SSR的方案都使用Nodejs做中间层转发一次,消耗掉一部分的网络连接,多出来的是Node服务器到服务提供方的服务。


    高可用


    Web模板毫无疑问在高可用方面是做的最好的,只要后台服务提供方没有挂,一般来说Web模板不会出太多问题。MVVM情况会复杂一些,在浏览器兼容上要求更高,测验量也会更多,但总归有些地方会测试不到。


    Node作为中间平台,不仅要关心前端CDN还要注意Node服务器会不会出现问题,这样每多一个环节在高可用方面的就会差上一些。而SSR不仅要在Node上有高可用的要求,如果还引入了前后端代码同构,同构代码就有可能会在Node上出现各种问题。基于这种情况我们认为SSR在高可用方面是最差的。


    技术门槛


    技术的选择上首先要考虑是否合适当前团队,不同的团队情况都会有所不同。技术门槛方面就拿校招来说一般在web模板上都不会有太大问题,Vue这样的MVVM框架可能会了解一种,但是比较熟悉的就相对少一些。Web模板和Vue至少还是在前端方面,而Node情况就有些不同,它的知识点对前端来说复杂了很多。SSR情况则更糟糕,不仅仅需要知道Node方面的知识,还需要知道同样一套代码在Node上如何运行,以及SSR框架的运行情况,这样的话门槛就会更高。


    前后端分离度


    使用web模板或MVVM框架至少还需要和运维等人员配合找台服务器放置页面,多少还会和后端方面有些联系。而使用Node中间件则可以独立解决所有的问题。


    三个问题


    在谈框架落地的时候,我总是有三个问题,第一个问题就是你的项目是否需要SEO。如果需要那么Node.js就是不二选择,但是也要面对Node.js的风险,目前Node.js极度缺少企业级工具,错误调试困难,资料也少于主流语言。


    第二个问题是项目是否需要兼容IE,目前很多的前端工程师都喜欢使用前端框架。但是如果当前项目需要兼容IE,那么就可以和这些框架说再见了。


    第三个问题就是是否有足够多的前端工程师。前后端分离的越彻底,前端工作量越多。如果没有足够的前端工程师,就会面临各种各样的招聘风险,即很难招到有经验的前端工程师,现阶段只能靠加班。


    渐进式前后端分离(苏宁的经验)


    在前后端分离方面整体上都是转向Node.js中间件,我们有一个人数不多的架构团队,主要负责生产各种工具和中间件为Node.js服务。


    对于浏览器兼容要求、可用性要求、页面性能要求都极高的电商类页面不使用前后端分离配合少量web模板。


    对于浏览器兼容要求较高的活动展示页,逐渐从web模板过渡为Node模板。 核心应用型web页,可用性要求占主导的页面,过渡为Node + Vue.js方案。某些以前用Vue编写的页面现在要想兼容SEO且对性能要求高,可以渐进过渡到SSR方案。


    前后端分离在团队推进中,根据团队实际情况,也应该是渐进的。架构师要严格评估风险边界,保持业务的稳定。业务开发中,多选择新业务推进高级分离方案。对于老业务改造,应该循序渐进,选择新需求。


    有问题可以在评论区讨论,以上为所有分享内容,谢谢大家!


    本文转载自:IT大咖说


    资源下载

    关注公众号:数据和云(OraNews)回复关键字获取

    2018DTCC , 数据库大会PPT

    2017DTC,2017 DTC 大会 PPT

    DBALIFE ,“DBA 的一天”海报

    DBA04 ,DBA 手记4 电子书

    122ARCH ,Oracle 12.2体系结构图

    2017OOW ,Oracle OpenWorld 资料

    PRELECTION ,大讲堂讲师课程资料

    近期文章

    仅仅使用AWR做报告? 性能优化还未入门

    实战课堂:一则CPU 100%的故障分析

    杨廷琨:如何编写高效SQL(含PPT)

    一份高达555页的技术PPT会是什么样子?

    大象起舞:用PostgreSQL解海盗分金问题

  • 相关阅读:
    洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
    洛谷 P1062 数列
    洛谷 P2822 组合数问题
    HDU 6112 今夕何夕
    poj 2115 C Looooops
    HDU 6092 Rikka with Subset
    poj 2720 Last Digits
    poj 1254 Hansel and Grethel
    poj 1222 EXTENDED LIGHTS OUT
    poj 2459 Sumsets
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312359.html
Copyright © 2020-2023  润新知