w3ctech

前后端分离项目实践_扩展

一、前言

前段时间写了《前后端分离项目实践》 收到一些建议,又经过两个月的项目实践、整理,和大家再分享下,统一回复下疑问。

其它相关文章可参考

二、新的架构图

alt text

标红线部分,由前端完成,相对于之前的结构,web服务端多了mobile 和 app,数据服务端在非敏感数据处也使用了mongo做数据库存储,按图的序号简单说下每块的职能。

1、nginx – 作为项目的入口,主要用于代理 及 负载。

偏前端的朋友问既然nodejs可以做web服务器,为什么还要用nginx?在服务器的层面上nodejs可以启动为web服务器,但通常也仅限于此。在运维层面上要考虑代理、负载、process、gzip、cache、cgi...,这些不是nodejs可达到的,并且单从对静态资源的处理上,nginx就比nodejs高效很多,毕竟nginx号称理想情况下可以支持50000的并发,这和为什么不用nodejs完成所有的服务数据处理是一个道理。

据文件和域名将请求代理到static和nodejs服务器

gzip / cache等其它功能

2、static用于存放js/css/imgs/ttf/less/woff等静态资源,要充分考虑据项目的文件目录细化、便于扩展、 cdn部署等。

3、mobile web服务器

4、pc web 服务器

5、app web 服务器

上面三个对应三个不同的客户端请求,在项目不明朗的情况下,尽量细化且少耦合是比较合适的。虽然在我公司项目实践上,三个服务主要都是对用户使用公司服务支持,但仍有较多的不同,所以单独分开,app部分正在开发,使用react native。

此处不做数据存储,也有朋友说不做存储,其它也没什么事情可以做了。我们可以做

  • 请求路由指向

  • 数据过滤

  • 附件上传

  • 图片验证码

  • 页面静态化

  • 权限控制

  • ...

这取决于你项目本身,如果是java,除了存储外的其它逻辑,都可以考虑用nodejs来实现。

6、routes,配置向外的接口文件,控制请求流向

7、使用mongodb + nodejs搭建数据库服务,

此处主要用于存储一些非敏感性、轻计算的数据,如新闻等营销类数据,开发轻量,且非SQL数据库也便于扩展。我们官网的运营支撑平台就是完全由前端完成的。

8、Redis存储缓存类数据

暂存用户登录状态及角色等临时信息,单独使用SESSION无法处理多台服务器共享,可以自行生成SID对应用户信息保存在REDIS里。

9、用户数据存储 online

此处是常规意义的后台,因涉及较多的数据计算,我们用JAVA实现,各取所长。

10、用户数据存储 DEV

用于并行开发过程中为web服务提供测试数据,因为此处只是为WEB服务提供基本的数据存取不用考虑业务逻辑,实现起来也非常便捷,提供可模块化的方法、流程,对工作是非常有利的

11、提供测试类数据

此处主要是给QA使用,数据输出到其指定的工具,便捷查看及反馈

12、其它第三方接口

比如,我们手机网页也适用于微信服务号,涉及用户数据如OPENID获取等。

13、使用nodejs+mongo额外提供一个接口测试工具,方便java人员在线测试,也作为接口交付依据。

总体思想就是,尽量解耦,接口化,才能便于扩展、复用,减少重构成本。

三、技术支持

这样的项目,对前端人员的技术深度、广度有更高层面的要求,此时更是一个架构、全栈的角色,这样的角色需要哪些技能呢?

首先,需要较好的技术团队,良好的运维、测试、JAVA开发同事,是项目顺利进行的保证,除此之外,前端人员需要掌握以下不限于的技术,

1、 NODEJS,官网上的API

2、 NODEJS各种框架,提高开发效率

a) Express

b) Ejs

c) Node-dev

d) Node-inspector

e) Log4js

f) Redis-server

g) Mongoose

h) Pm2

i) grunt

...

3、 MONGODB / SQL

4、 对http有更深刻的理解,理解其原理,掌握HEADER信息等

5、 LINUX(UBUNTU)开发经验,提高开发效率,也便于与运维人员沟通

6、 redis / socket / ...

7、 更严谨的编辑思维,对测试、异常、日志等有较好的控制。

可以参考教程,相信会对初学者有些帮助。

教程git在https://github.com/xiaolulu/mynodejs.git

四、人员

这样的一个项目结构需要多少前端人员支持也大家最常问的,具体要视项目情况及从业人员的技术积累,有60分的积累,就可以尝试做70分的事情,这样才会成长。在前期探索阶段,先开发一些轻逻辑的应用,把时间多用在技术实现上。

我刚进现在创业型公司三个月+,目前只有我一个,还在扩招。人手不足,所以在技术选择及业务支持上一直比较谨慎

五、总结

这样架构虽然提高了公司项目开发效率,但也并不比传统方式高明很多,更谈不上替代,并且需要我花费更多心力,但工作就是这样,自己学习、努力之外,还要去创造展示自己的平台,成长就在于你为自己搭了多高的门槛,让他人难以替代。

nodejs出现终究还较短,国内尚没有大规模应用,但通过一些国际企业的使用,我们可以预见其优势可以被我们所应用。特别对于互联网这种重页面交互、轻业务逻辑的web应用上,更能体现其价值。

作为新事物,还有很多问题需要探索、解决,我们在路上。

技术新Q群 435485569

w3ctech微信

扫码关注w3ctech微信公众号

共收到1条回复

  • 有机会,各个环节能展开说说,就更好了

    回复此楼