![互联网架构,为啥要前后端分离?]()
通用业务服务化之后,系统的典型后端结构如上:
-
web-server通过RPC接口,从通用业务服务获取数据
-
biz-service通过RPC接口,从多个基础数据service获取数据
-
基础数据service通过DAO,从独立db/cache获取数据
-
db/cache存储数据
随着时间的推移,系统架构并不会一成不变,业务越来越复杂,改版越来越多,此时web-server层虽然使用了MVC架构,但以下诸多痛点是否似曾相识?
此时,为了缓解这些问题,一般会成立单独的前端FE部门,来负责交互与展现的研发,其职责与后端Java工程师分离开,但痛点依然没有完全解决:
更具体的,看一个这样的例子,最开始产品只有PC版本,此时其系统分层架构如下:
![互联网架构,为啥要前后端分离?]()
客户端,web-server,service,非常清晰。
随着业务的发展,产品需要新增Mobile版本,Mobile版本和PC版本大部分业务逻辑都一样,唯一的区别是屏幕比较小:
由于工期较紧,Mobile版本的web-server一般怎么来呢?
![互联网架构,为啥要前后端分离?]()
没错,把PC版本的工程拷贝一份,然后再做小量的修改:
业务继续发展,产品又需要新增APP版本,APP版本和Mobile版本业务逻辑完全相同,唯一的区别是:
由于工期较紧,APP版本的web-server一般怎么来呢?
![互联网架构,为啥要前后端分离?]()
没错,把Mobile版本的工程拷贝一份,然后再做小量的修改:
这么迭代,演化,发展,架构会变成这个样子:
![互联网架构,为啥要前后端分离?]()
这个架构图中的依赖关系是不是看上去很别扭?
PC/H5/APP的web-server层大部分业务是相同的,只有少数的逻辑/展现/交互不一样:
如何让数据的获取更加高效快捷,如何让数据生产与数据展现解耦分离呢?
前后端分离的分层抽象势在必行。
![互联网架构,为啥要前后端分离?]()
通过前后端分离分层抽象:
这样的好处是:
-
复杂的业务逻辑与数据生成,只有在站点数据层处写了一次,没有代码拷贝
-
底层service接口发生变化,只有站点数据层一处需要升级修改
-
底层service如果有bug,只有站点数据层一处需要升级修改
-
站点展现层可以根据产品的不同形态,传入不同的参数,调用不同的站点数据层接口
除此之外:
-
产品追求绚丽的效果,并对设备兼容性要求高,不再困扰Java工程师,由更专业的FE对接
-
一点点展现的改动,不再需要Java工程师们重新编译,打包,上线,重启tomcat
-
约定好json接口后,Java和FE分开开发,FE可以用mock的接口自测,不再等待一起联调
![互联网架构,为啥要前后端分离?]()
结论:
当业务越来越复杂,端上的产品越来越多,展现层的变化越来越快越来越多,站点层存在大量代码拷贝,数据获取复杂性成为通用痛点的时候,就应该进行前后端分离分层抽象,简化数据获取过程,提高数据获取效率,向上游屏蔽底层的复杂性。
最后再强调两点:
任何脱离业务的架构设计,都是耍流氓。
思路比细节重要。
本文转自 小强测试帮 51CTO博客,原文链接:http://blog.51cto.com/xqtesting/2050893,如需转载请自行联系原作者