点评《Uber是如何基于Go语言构建高QPS服务的》一文,解答读者疑问,经过比较Node.js和go来谈架构演进过程,分享我对将来技术的思考前端
你们都是知道uber是大量采用Node.js开发的公司,而2016年4月12日infoq发了一篇名为《Uber是如何基于Go语言构建高QPS服务的?》node
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、游戏),多核计算类的都有很是好的性能优点。tcp
但是,亲,你的瓶颈出在哪里呢?真的是性能么?编程语言
go的缺点是很难够(go)着
总结:适合高端人群,但对团队开发是有门槛的,不适用国内大部分大团队,固然若是你的团队足够牛逼,选go是很是好的选择。
羊和骆驼的故事告诉咱们:够得着你牛逼,够不着,累死你也够不着
架构的演进过程,通常以下
若是Uber的服务都很是成熟了,那么它是有能力彻底用其余语言重写的,用go重写地理查询服务,是由于它已经演化到了第四阶段,有了以前的精力才有今天的可转变。
其实,我对语言并无什么偏见,按照目前技术发展速度来看,将来应该是一个技术多样性,语言性能趋于相同,你们只看喜爱来决定选用那种语言的局面,而不是语言之争。
其实最终仍是要回归到架构的本质上去的,场景决定技术。
在将来很长一段时间,Node.js都会是Uber的主要服务,即便替换也会一点一点的来,积累与成本是不可能短期消失的。
咱们要问的是:“如今处于什么阶段?当前场景下使用Node.js是否合适?”,而不是看人家用go重写了。。。
全文完
欢迎关注个人公众号【node全栈】