本文共 1137 字,大约阅读时间需要 3 分钟。
现在的web其实已经和过去不同了。大体上来说,web应用更倾向于提供某种服务而不是提供某种应用。这一点和之前有很大的区别,在早期的时候2000年左右,那个jsp时代,应用和web是混杂在一起的,web应用总是和界面杂糅,似乎web就应该是这样的。 而基于web的服务,其实并不关心界面的问题,他仅仅关心他自己能够提供什么样的服务。特别是rest的提出,加深了这样一个概念。通过web服务,你可以很轻松的把你的一些不错的应用通过发布出去。而且这种松耦合的好处还在于可以比较轻松的集群,从而获得良好的伸缩性。 而对于web应用来说,服务,界面,数据其实是永远的核心,任何应用也跳不出去这个圈子。nodejs这个时候出现了,这是一个无以伦比的适合做web的语言。node.js+socket.io(websocket)使得整个前台后台之间的界限非常的模糊,由于都是通过一种相似的事件方式工作,你可能感觉不出来他们之间的区别,而且传递的都是json对象,工作起来那是十分的方便。而且javascript这种特殊的语言,它有限的持之多范式的编程,既有函数式的特征又有对象的特征,而且支持对象字面值这种大杀器,直接导致你的代码量很少,却可以做更多的工作。所以对于nodejs来说,使用socketio即自然又高效。不过不太容易把应用发布称服务。 rest的最大的优点就在于其标准性。用任何的语言通过web的接口都比较容易的和rest的服务通信从而获得数据。当然这一点websocket也可以做到,只是可能会比较麻烦,我倾向于同时提供两种接口,这对于nodejs来说,其实仅仅是一件小事而已。rest的缺点是显而易见的,总的来说就是啰嗦,冗余信息大多,速度缓慢。效率很低。 所以一个现代的web应用应该是由几部分可以伸缩的单独的服务组成,大体分为数据服务(Hbase,hadoop,传统关系数据库),应用服务,界面(nodejs+某种前台js)来构成,这样的系统伸缩性很强,因为选择多,从而成本也更低。至于ssh..以及类似这种东西,统统都应该丢进垃圾堆了。甚至java我觉得都应该少用。数据服务这一层建议使用clojure,它有好的并发能力和良好的数据变换能力。应用服务,应该使用scala语言开发,它简洁,有力,actor模型也比较好。所以未来的web应用,必然会使用多种语言开发,这样可以提高开发效率以及减少维护的成本。因为代码量少了,自然维护就容易了。多种语言在不同的服务层面上开发,必然会导致代码量急剧减少,从而极大的消减维护的成本。未来的大web应用可能仅仅需要几个人来维护。 转载于:https://my.oschina.net/weiweiblog/blog/470026