一、前言
前段时间写了《前后端分离项目实践》<http://segmentfault.com/a/1190000002978095> 收到一些建议,又经过两个月的项目实践、整理,和大家再分享下,统一回复下疑问。
其它相关文章可参考<http://www.upopen.cn>
二、新的架构图
标红线部分,由前端完成,相对于之前的结构,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、 更严谨的编辑思维,对测试、异常、日志等有较好的控制。
可以参考教程<http://www.upopen.cn/article/info/559252e1b269230039000002>,相信会对初学者有些帮助。
四、人员
这样的一个项目结构需要多少前端人员支持也大家最常问的,具体要视项目情况及从业人员的技术积累,有60分的积累,就可以尝试做70分的事情,这样才会成长。在前期探索阶段,先开发一些轻逻辑的应用,把时间多用在技术实现上。
我刚进现在创业型公司三个月+,目前只有我一个,还在扩招。人手不足,所以在技术选择及业务支持上一直比较谨慎
五、总结
这样架构虽然提高了公司项目开发效率,但也并不比传统方式高明很多,更谈不上替代,并且需要我花费更多心力,但工作就是这样,自己学习、努力之外,还要去创造展示自己的平台,成长就在于你为自己搭了多高的门槛,让他人难以替代。
nodejs出现终究还较短,国内尚没有大规模应用,但通过一些国际企业的使用,我们可以预见其优势可以被我们所应用。特别对于互联网这种重页面交互、轻业务逻辑的web应用上,更能体现其价值。
作为新事物,还有很多问题需要探索、解决,我们在路上。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。