点评《Uber是如何基于Go语言构建高QPS服务的》一文,解答读者疑问,通过比较Node.js和go来谈架构演进过程,分享我对未来技术的思考
大家都是知道uber是大量采用Node.js开发的公司,而2016年4月12日infoq发了一篇名为《Uber是如何基于Go语言构建高QPS服务的?》
http://www.infoq.com/cn/articles/uber-build-high-qps-services
很多人问我,是不是uber以后要用go去替代Node.js?
我的回答是,目前看它只是地理查询的地方使用go重写了,这并不意味着,它完全会用go替代Node.js的,而且在绝大部分场景下Node.js是有它的优势的,除了文章讲的场景外,真的很少能找出差异特别大的点,各有优缺点,一个公司想弃用一项技术栈也是很难的一件事儿。
QCon见到朱赟,她说湾区那边ror非常多,而我所了解的国内只有少数极客在用,为什么呢?地域是一方面,文化是一方面,马斯洛的需求层次理论当然也是重要点,再举个例子,北京招聘Node.js非常多,在天津,js能写明白的都不多,为什么呢?
我们看问题,是否也要区分一下场景?比如mvp(最小可用原型)在创业初期非常实用,可是如果你已经过了初期,你的其他功能没有跟上,你的mvp会让你死的很惨,血与泪的教训都在告诉我们,这个世界不是二分法来判断的,对与错之外,还有场景这个变量集合。
当我们评估所要使用语言的时候,Node.js正是广大的服务设计团队普遍采用的编程语言。而我们也在Node.js的使用方面有着丰富的经验。然而,Go语言却由于以下原因满足了我们的需求:
这个理由解释是ok的,go确实在并发上有它的优势,异步流程控制上比Node.js要强非常非常多,对于一些tcp长连接(im、游戏),多核计算类的都有非常好的性能优势。
可是,亲,你的瓶颈出在哪里呢?真的是性能么?
go的缺点是很难够(go)着
总结:适合高端人群,但对团队开发是有门槛的,不适用国内大部分大团队,当然如果你的团队足够牛逼,选go是非常好的选择。
羊和骆驼的故事告诉我们:够得着你牛逼,够不着,累死你也够不着
架构的演进过程,一般如下
如果Uber的服务都非常成熟了,那么它是有能力完全用其他语言重写的,用go重写地理查询服务,是因为它已经演化到了第四阶段,有了之前的精力才有今天的可转变。
其实,我对语言并没有什么偏见,按照目前技术发展速度来看,未来应该是一个 技术多样性 , 语言性能趋于相同 , 大家只看喜好 来决定选用那种语言的局面,而不是语言之争。
其实最终还是要回归到架构的本质上去的,场景决定技术。
在未来很长一段时间,Node.js都会是Uber的主要服务,即使替换也会一点一点的来,积累与成本是不可能短时间消失的。
我们要问的是:“现在处于什么阶段?当前场景下使用Node.js是否合适?”,而不是看人家用go重写了。。。
全文完
欢迎关注我的公众号【node全栈】