多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > 技術(shù)棧的選擇:從Groupon轉(zhuǎn)向Node.js、淘寶去IOE談起

技術(shù)棧的選擇:從Groupon轉(zhuǎn)向Node.js、淘寶去IOE談起

來源:程序員人生   發(fā)布時間:2014-09-26 09:06:55 閱讀次數(shù):3152次

在本文開始之前,先來看看一些案例。

  • 今年10月份,知名團(tuán)購網(wǎng)站Groupon宣布完成了為期1年的工作――將Groupon美國站點(diǎn)從Ruby on Rails全面遷移到了Node.js。
  • 2010~2013期間,阿里巴巴逐步完成了“去IOE”運(yùn)動,將“IBM小型機(jī)+Oracle數(shù)據(jù)庫+ EMC2存儲”架構(gòu)逐步轉(zhuǎn)向了“MySQL+PC Server”。
  • Twitter將其一些后端服務(wù)從Ruby on Rails遷移到了JVM上。
  • 京東商場后臺拋棄.NET,使用Java重寫。
  • Facebook iOS客戶端使用HTML5重寫,后又換回原生應(yīng)用。
  • ……

一、這些公司為什么要如此“折騰”

關(guān)于技術(shù)棧的選擇和遷移,并不是幾個簡單的原因就能說清楚的,也并不是說新的技術(shù)棧就比老的技術(shù)棧要優(yōu)秀很多,其實(shí)每種技術(shù)都有存在的理由,并在特定領(lǐng)域內(nèi)有其強(qiáng)大的優(yōu)勢的,當(dāng)然也有缺點(diǎn),比如 C的性能很高,但是開發(fā)效率較低;Java的功能強(qiáng)大,但是沒有Ruby簡單靈活。

那么這些公司為什么要如此折騰呢?下面以一些公司的實(shí)際案例,僅列出一些主要、常見的原因。

1.  速度、可維護(hù)性――Groupon從Rails轉(zhuǎn)向Node.js


為什么要放棄原有技術(shù)棧?

Groupon目前在全球共有兩套站點(diǎn)――美國網(wǎng)站和歐洲網(wǎng)站,其美國網(wǎng)站前端最初是一個單一的Rails(最流行的Ruby開發(fā)框架)代碼庫。對于為什么會選擇Rails來開發(fā)最初的網(wǎng)站,Groupon開發(fā)人員表示,Rails非常適合小型團(tuán)隊(duì)快速開發(fā),可以讓網(wǎng)站快速啟動并運(yùn)行起來,這對于初期功能不斷變化的Groupon來說,是個非常不錯的選擇。

隨著Groupon的發(fā)展和新產(chǎn)品不斷推出,這個代碼庫越來越大,有太多的開發(fā)者在同一個代碼庫工作,他們很難在本地運(yùn)行并測試產(chǎn)品,如果有問題需要回滾,那么每個人的工作都前功盡棄了。

Groupon團(tuán)隊(duì)決定將原有的單一Rails庫分割成小的、獨(dú)立的、更易于管理的庫。

為什么選擇Node.js?

Groupon團(tuán)隊(duì)評估了不同的軟件棧,想尋找一個能夠解決這些問題的方案――有效處理大量傳入的HTTP請求、使并行API請求服務(wù)于每一個HTTP請求、將結(jié)果渲染為HTML5,并可以有效實(shí)現(xiàn)監(jiān)控、部署和支持。

該團(tuán)隊(duì)使用不同的軟件棧開發(fā)了原型,并測試了它們,總體來說,發(fā)現(xiàn)Node.js是個非常適合的解決方案。

如何遷移?

Groupon團(tuán)隊(duì)使用Node.js重建了網(wǎng)站頁面的每個主要部分,將它們作為一個獨(dú)立的Node.js應(yīng)用程序,然后重建了基礎(chǔ)設(shè)施,使所有獨(dú)立的應(yīng)用程序可以一起工作。遷移之后,Groupon成為了全球最大的Node.js部署產(chǎn)品之一。

遷移帶來的好處

  • 之前單個Rails前端代碼庫被分割成了20個獨(dú)立的應(yīng)用程序,其帶來了如下的好處:
  • 頁面加載更快――快了50%
  • 與之前相比,處理相同的流量所使用的硬件資源更少
  • 團(tuán)隊(duì)可以獨(dú)立地更改、部署各自負(fù)責(zé)的模塊
  • 網(wǎng)站功能和設(shè)計(jì)實(shí)現(xiàn)可以快速迭代

更詳細(xì)的信息可參閱 Groupon開發(fā)團(tuán)隊(duì)的博客。

2.  原有技術(shù)棧已無法滿足如今的規(guī)模――Twitter部分服務(wù)從Rails遷移到了JVM


Twitter在2006創(chuàng)建初期也是基于Ruby on Rails開發(fā)的,其架構(gòu)設(shè)計(jì)也是完全可以應(yīng)付當(dāng)時的訪問量。但是隨著Twitter的快速發(fā)展,在每秒上萬訪問量的處理上,原有架構(gòu)開始出現(xiàn)各種性能問題,比如Twitter開源負(fù)責(zé)人Chris Aniszczyk稱,在2010年世界杯期間,球員進(jìn)了一個球或者得到紅黃牌,網(wǎng)站就宕機(jī)了。

為了解決這個問題,Twitter急需開發(fā)一個全新的架構(gòu),以應(yīng)付現(xiàn)在越來越大的訪問量。對于Twitter為什么從Rails轉(zhuǎn)向JVM語言,來看看Ruby創(chuàng)始人松本行弘是如何說的。

Twitter剛開始開發(fā)的時候不可能考慮到會有現(xiàn)在這樣大的訪問量,可以說現(xiàn)在的Twitter發(fā)展到當(dāng)初在設(shè)計(jì)上的極限了。
一個網(wǎng)站在遇到設(shè)計(jì)極限的時候,有很多解決方法,比如重寫架構(gòu)、換其他語言等等,他們的工程師想要挑戰(zhàn)一些新的東西,就提出要改用Scala,因?yàn)镾cala是編譯型語言,性能也不錯,正好適合編寫新的架構(gòu),我覺得這樣也不錯。
在我看來,在網(wǎng)站所提供的服務(wù)還沒有完全成型的時候,最重要的是能夠?qū)π枨蟮淖兓龀隹焖俚姆磻?yīng),這個時候就需要Ruby這樣靈活性比較高的語言;而在網(wǎng)站獲得成功之后,遇到了設(shè)計(jì)瓶頸,用一種新的語言,比如Scala,來編寫一個新的架構(gòu),以節(jié)約一定的資源,我認(rèn)為這也是很好的一個結(jié)果。Twitter轉(zhuǎn)向Scala還只是在其核心部分,而在Web前端和一些內(nèi)部工具上還有很多地方在用Ruby。

此外Twitter還將一些后端服務(wù)使用Java和 Clojure(基于JVM的Lisp方言)進(jìn)行了重寫,其基礎(chǔ)設(shè)施也采用了一些開源項(xiàng)目。

遷移后,Twitter在美國總統(tǒng)競選期間沒有出現(xiàn)宕機(jī)。目前Twitter每秒處理約6000條消息,加起來每天處理超過5億或每周35億條消息。

3.  技術(shù)上更可控,規(guī)模上更易擴(kuò)展――淘寶去IOE


2010~2013期間,阿里巴巴逐步完成了“去IOE”運(yùn)動,將“IBM小型機(jī)+Oracle數(shù)據(jù)庫+EMC2存儲”架構(gòu)逐步轉(zhuǎn)向了“MySQL+PC Server”。

至于阿里巴巴為什么要“去IOE”,阿里技術(shù)保障部DBA負(fù)責(zé)人周寶方表示主要從以下幾個因素考慮:

  • 集中式的嚴(yán)重制約:集中式強(qiáng)大單點(diǎn)遠(yuǎn)遠(yuǎn)滿足不了阿里特別是當(dāng)時淘寶爆炸式業(yè)務(wù)增長應(yīng)用的模式,這里可分為三個方面,穩(wěn)定性、跨IDC容災(zāi)切換、快速擴(kuò)容;
  • 技術(shù)面臨失控,創(chuàng)新潛力受限;
  • 專用設(shè)備規(guī)模化場景下諸多限制;
  • 成本(這應(yīng)該是整體最次的因素);
  • 安全

“去IOE”之后,阿里的技術(shù)架構(gòu)非常靈活,支撐了業(yè)務(wù)的快速發(fā)展,比如在雙十一,阿里可以很淡定地做業(yè)務(wù)擴(kuò)展;其次是阿里掌握了技術(shù)自主可控操作;另外還包括基礎(chǔ)工程技術(shù)和人才的積累、技術(shù)的沉淀、成本、安全性的提升等等。

詳細(xì)信息可參閱《 阿里周寶方談“去IOE”戰(zhàn)略及實(shí)施》。

4.  快速開發(fā)需要――PayPal使用Node.js重寫其支付系統(tǒng)


PayPal 公司長期存在著“ 非我所創(chuàng) ”的文化,這導(dǎo)致 PayPal 采用新技術(shù)的態(tài)度很消極,項(xiàng)目開發(fā)進(jìn)度也極其緩慢。正是由于 PayPal 行動緩慢,其他支付服務(wù)商 Stripe 和 Square 趁機(jī)成長,逐漸撼動 PayPal 的市場地位。同時,PayPal 當(dāng)時的開發(fā)技術(shù)也已經(jīng)無法滿足快速開發(fā)的需求,因?yàn)楫?dāng)時的開發(fā)基本全是 Java,不需要用 Java 來實(shí)現(xiàn)的也會用 Java 完成。

2012年4月,David Marcuss成為 PayPal 的總裁后,任命工程師團(tuán)隊(duì)重寫支付系統(tǒng),最終,工程師團(tuán)隊(duì)用了8周時間完成了該項(xiàng)任務(wù),他們選擇了Node.js和一些開源項(xiàng)目對系統(tǒng)進(jìn)行重新開發(fā),最終他們將這一技術(shù)棧整合成了一個 快速開發(fā)框架――Kraken,以實(shí)現(xiàn)公司其他產(chǎn)品的快速開發(fā)。

5.  追隨潮流,但這是有代價的――轉(zhuǎn)向HTML5


HTML5 是應(yīng)用開發(fā)領(lǐng)域的未來趨勢,由于其跨平臺性,一些企業(yè)也開始將應(yīng)用使用HTML5重寫。

比如Facebook和LinkedIn采用HTML5重寫其iOS客戶端。但是他們也付出了一定的代價――由于用戶的網(wǎng)絡(luò)環(huán)境并沒有預(yù)想的那么好,結(jié)果導(dǎo)致應(yīng)用啟動、瀏覽信息流、打開圖片都比較慢,因此他們后來又放棄該技術(shù),轉(zhuǎn)而使用蘋果的iOS SDK重新構(gòu)建,由于是本地應(yīng)用,速度提升非常明顯。

當(dāng)然,這并不是說HTML5不好,而是時機(jī)還未成熟。

6.  成本考慮――選擇開源軟件


由于昂貴的成本,開源軟件往往是小型初創(chuàng)公司的首選。比如服務(wù)器方面:

  • 單從系統(tǒng)的性能和吞吐量來講,Windows Server也不差,但是Windows在管理和部署方面沒有Linux方便;
  • Windows服務(wù)器的授權(quán)費(fèi)用使架構(gòu)規(guī)模的橫向擴(kuò)展成本偏高;
  • 一些高端的服務(wù)器軟件只有UNIX/Linux版本
  • 一些優(yōu)化、緩存、數(shù)據(jù)庫解決方案只針對Linux。

7.  更換技術(shù)團(tuán)隊(duì)或CTO


有這樣一種情況存在,比如原有代碼庫相關(guān)開發(fā)者大部分都離職了,且相關(guān)工作沒有交接好,文檔又不全,導(dǎo)致現(xiàn)有的開發(fā)人員難以維護(hù),或者現(xiàn)有開發(fā)人員認(rèn)為原有代碼“壞味道”太多,不愿意維護(hù),所以團(tuán)隊(duì)一拍即合,重寫架構(gòu)。

也有可能公司更換CTO后,公司的原有架構(gòu)不是新CTO所熟悉的,而且他認(rèn)為原有架構(gòu)有一定的問題。

8.  被迫選擇


如果公司正使用的某些產(chǎn)品的原開發(fā)者不再提供支持,那么只能尋找其他替代品。

還有就是在特定平臺上,你只能選擇某個技術(shù)棧,比如iOS開發(fā),你只能選擇Objective-C(當(dāng)然也可以選擇其他跨平臺開發(fā)工具,但是性能上比不上原生應(yīng)用)。

二、大公司是如何做的

在技術(shù)棧的選擇和遷移上,大公司會非常慎重,不僅要考慮新的技術(shù)棧是否能解決現(xiàn)有的問題,還需要從公司戰(zhàn)略(比如發(fā)展方向)、技術(shù)發(fā)展局勢(比如移動化、云端化)方面考慮。

1.  不斷嘗試新技術(shù)棧――Groupon

遷移現(xiàn)有架構(gòu)或技術(shù)棧,需要大量的人力和其他資源,此外,為一個線上產(chǎn)品更換底層設(shè)施需要非常高的技術(shù),比如有人將淘寶去IOE比喻成在公路上為一個高速行駛的汽車更換輪胎。

一些公司的開發(fā)團(tuán)隊(duì)會嘗試不同的技術(shù)棧,制作出原型并進(jìn)行測試,以此來看是否滿足需求。

除了做好預(yù)備工作外,開發(fā)團(tuán)隊(duì)還會選擇先遷移部分應(yīng)用或服務(wù),小步前進(jìn),并在此過程中,快速驗(yàn)證新技術(shù)棧的適用性,并及時反饋,以便能夠發(fā)現(xiàn)問題后快速回滾。

2.  優(yōu)化原有技術(shù)棧――Facebook

當(dāng)然,也有一些公司不愿放棄原有的技術(shù)棧,比如 Facebook,轉(zhuǎn)而在原有技術(shù)棧的基礎(chǔ)上進(jìn)行優(yōu)化。

Facebook的前臺主要使用PHP編寫,盡管PHP編程效率高,能夠支持產(chǎn)品的快速迭代,但是與傳統(tǒng)的編譯語言相比,腳本語言在CPU和內(nèi)存使用率上不夠好,隨著Ajax技術(shù)的廣泛采用,加上SNS對動態(tài)要求較高,這些缺點(diǎn)更顯得突出。

自2007年以來,F(xiàn)acebook嘗試使用多種不同方法解決這一問題,比如使用另一種語言重寫Facebook、重寫PHP的核心部分Zend引擎,但最終還是沒有獲得所需的性能。

于是HipHop for PHP誕生了,該項(xiàng)目由一個PHP到C++的轉(zhuǎn)換程序、一個重新實(shí)現(xiàn)的PHP運(yùn)行庫和許多常用PHP擴(kuò)展的重寫版本構(gòu)成,可大大加速和優(yōu)化PHP應(yīng)用。據(jù)悉,由于HipHop,F(xiàn)acebook Web服務(wù)器上的CPU使用率平均減少了50%。

3.  也有失敗案例

當(dāng)然,在技術(shù)棧遷移過程中,也有失敗的案例,比如5173網(wǎng)站從.NET轉(zhuǎn)向Java以失敗告終。詳細(xì)信息可見范凱 《對.NET系統(tǒng)架構(gòu)改造的一點(diǎn)經(jīng)驗(yàn)和教訓(xùn)》。

三、如何選擇技術(shù)棧


選擇技術(shù)棧需要參考的因素有很多,一些基本因素如下:

  • 產(chǎn)品預(yù)期上市時間
  • 開發(fā)團(tuán)隊(duì)和生產(chǎn)力情況
  • 可維護(hù)性
  • 可擴(kuò)展性
  • 使用環(huán)境
  • 社區(qū)和許可情況(開源項(xiàng)目)

對于實(shí)際上該如何選擇,華為開源支持平臺專家莊表偉給出了他的建議。莊表偉認(rèn)為:

在快速原型的階段,就可以選擇快速開發(fā)的語言,而在實(shí)用的階段,就應(yīng)該選擇更加實(shí)用的語言。而在一些極端的領(lǐng)域,效率至上與實(shí)用至上可以毫不相干,各自有所追求,前期追求效率的開發(fā)產(chǎn)品,由于成本極低,大多是可以隨時拋棄的。而真正的困難在于想要兼得。常見的與架構(gòu)相關(guān)的兩種痛苦:

  • 一種是,剛開始為了追求快速開發(fā),在技術(shù)選型上怎么快怎么來,結(jié)果系統(tǒng)越來越大,越來越復(fù)雜,等到想要考慮架 構(gòu)優(yōu)化,想要重構(gòu)的時候,卻已經(jīng)積重難返,改起架構(gòu)來傷筋動骨;
  • 另一種是一開始想得太多,架構(gòu)做得太復(fù)雜,殺雞用牛刀的技術(shù)用得太多,往往還沒有等到系統(tǒng)開發(fā)完成,就已經(jīng)Game Over了。

莊表偉認(rèn)為想要兼得魚和熊掌的確困難,但是并非沒有可能,我們可以找到一些優(yōu)秀的、可選的技術(shù)集合,對于技術(shù)選型的判斷,需要考慮理論情況與實(shí)際情況:

考慮效率

  • 技術(shù)復(fù)雜度(復(fù)用性):學(xué)習(xí)并掌握一組技術(shù)棧,需要了解多復(fù)雜的技術(shù);相應(yīng)的,當(dāng)我們掌握了這門技術(shù),它可以在多少地方復(fù)用?
  • 技術(shù)友好度(優(yōu)雅性):在開發(fā)的過程中,會不會有各種莫名其妙的陷阱,會不會讓我糾纏于各種莫名其妙的細(xì)節(jié)?

考慮實(shí)用

  • 業(yè)務(wù)復(fù)雜度(組織性):隨著業(yè)務(wù)的復(fù)雜,我們的代碼會不會最終無法駕馭?無法維護(hù)?無人能懂?
  • 性能提升度(潛力):隨著業(yè)務(wù)的增長,壓力的提升,我們會不會最終被迫放棄現(xiàn)有的技術(shù)架構(gòu),重頭開始?

詳細(xì)信息可參閱《 技術(shù)選型:效率至上與實(shí)用至上》。

四、看頂尖互聯(lián)網(wǎng)企業(yè)的技術(shù)選型

下面來看看大型互聯(lián)網(wǎng)公司的產(chǎn)品是如何選擇技術(shù)棧的。該數(shù)據(jù)來自 維基百科,這是根據(jù)網(wǎng)站的HTTP頭信息和文件類型所統(tǒng)計(jì)的。

網(wǎng)站 前端 后端(服務(wù)端) 數(shù)據(jù)庫
Google.com JavaScript C、C++、Go、Java、Python、PHP BigTable
Facebook.com JavaScript PHP、C++、Java、Python、FBML,Ajax,Erlang、D、Xhp MySQL
YouTube.com Flash、JavaScript C、Python、Java MySQL
Yahoo JavaScript PHP MySQL
Live.com JavaScript ASP.NET Microsoft SQL Server
MSN.com JavaScript ASP.NET Microsoft SQL Server
Wikipedia.org JavaScript PHP MySQL,MariaDB
Blogger JavaScript Python BigTable
Bing JavaScript ASP.NET Microsoft SQL Server
Twitter.com JavaScript C++、Java、Scala  
Wordpress.com JavaScript PHP MySQL
Amazon.com JavaScript Java、J2EE、C++、Perl  
eBay.com JavaScript Java Oracle Database
Linkedin.com JavaScript Java、Scala  

五、寫在最后

技術(shù)棧是產(chǎn)品的根基,是產(chǎn)品功能和用戶體驗(yàn)的保障。每種編程語言和技術(shù)都有存在的理由,且這些技術(shù)棧都經(jīng)過了時間和大型項(xiàng)目的驗(yàn)證,但這并不代表別人能用你就也能用,還需要根據(jù)產(chǎn)品、團(tuán)隊(duì)、市場等因素選擇最適合的技術(shù)棧。所以,在技術(shù)棧的選擇上,可以說沒有最好,只有最適合。希望本文列舉的這些公司的案例能夠?yàn)槟銕硪恍﹨⒖肌?/p>

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 一二三四在线播放免费视频中国 | 亚洲国产欧美日韩 | 日本资源在线 | 欧美黑人巨大videos免费 | 欧美日韩国产手机在线观看视频 | 操网| 亚洲成a人片在线观看精品 亚洲成a人片在线观看尤物 | 色费女人18毛片a级视频在线 | 欧美性一级 | 国产精品v| 亚洲日韩欧美综合 | 亚洲天堂视频在线观看 | 国产不卡福利 | 婷婷在线五月 | 另类亚洲图片 | 99精品国产成人a∨免费看 | 日韩精品一区二区三区中文精品 | 久久亚洲美女久久久久 | 美女毛片视频 | 欧洲乱码专区一区二区三区四区 | 国产精品一区二区免费 | 伊人久久久综在合线久久在播 | 成人免费观看视频久爱网 | 操操操综合网 | 午夜视频免费观看 | 自怕偷自怕亚洲精品 | 国产精品欧美一区二区三区 | 尤物视频在线看 | 中文字幕亚洲欧美一区 | 最近最新中文字幕免费大全3 | 亚洲香蕉一区二区三区在线观看 | 秋霞理论一级在线观看手机版 | 国产亚洲小视频 | 亚洲精品福利在线观看 | 成人欧美日本免费观看 | 国产成人精品久久二区二区 | 日本一区二区三区免费视频 | 亚洲一区二区三区四区在线 | 亚洲一级毛片免费在线观看 | 日韩欧美视频在线 | 一级aaaaaa毛片免费同男同女 |