點評《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全棧】