天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

重構(gòu)TekPub——從ASP.NET MVC框架遷移到Ruby on Rails

  TekPub是一個(gè)面向開發(fā)人員的站點(diǎn),致力于為開發(fā)人員提供一系列主題的在線培訓(xùn),主題范圍非常廣泛,從微軟的O/R Mapping框架Microsoft Entity Framework,到如何使用Ruby on Rails技術(shù)編寫自己的日志引擎等內(nèi)容都有涉及。該網(wǎng)站是由前微軟員工Rob Conery與Lounge的老板James Avery創(chuàng)立的。

  TekPub是個(gè)很有趣的學(xué)習(xí)案例,公司開始時(shí)使用ASP.NET MVC框架,之后很快遷移到了Ruby on Rails上。InfoQ與Rob和James探討了這次遷移之旅。

  InfoQ:和我們談?wù)凾ekPub吧,對(duì)于哪些不熟悉你們的產(chǎn)品的讀者,TekPub意味著什么?

  James Avery(簡稱JA):TekPub為程序員提供了高質(zhì)量的技術(shù)視頻演示。我們的目標(biāo)是幫助一些人在幾個(gè)小時(shí)內(nèi)學(xué)習(xí)一項(xiàng)新技術(shù),主要方式就是觀看一些牛人的演講視頻。他們對(duì)演講的技術(shù)非常了解,演講內(nèi)容不僅僅覆蓋基礎(chǔ)知識(shí),還深入到了這些具體技術(shù)在真實(shí)項(xiàng)目中的應(yīng)用。與其等幾個(gè)月才拿到一本很可能已經(jīng)過時(shí)的書,還不如訂閱我們的產(chǎn)品立刻獲得新技術(shù)的提升。我們已經(jīng)完成ASP.NET MVC 2的系列視頻,但目前還沒有與這個(gè)主題相關(guān)的書籍。

  InfoQ: James Avery和Rob Conery有什么來頭?

  JA:除了TekPub之外,我還搞了幾個(gè)科技創(chuàng)業(yè)公司。我運(yùn)營了Lounge和Ruby Row廣告網(wǎng)絡(luò),分別關(guān)注.NET和Ruby開發(fā)人員。我還幫助運(yùn)營DotNETKicks公司,一個(gè).NET開發(fā)人員的社區(qū)網(wǎng)站。我最新的關(guān)注點(diǎn)是Adzerk,這是我自己構(gòu)建的Web服務(wù)器,用來有效的運(yùn)行Lounge和Ruby Row,讓其他人來使用。從90年代中期我就開始使用Web,.NET發(fā)布后,我開始轉(zhuǎn)移到微軟的技術(shù)上。最近我一直再用.NET、Ruby on Rails和MongoDB等,還有任何讓我感興趣的技術(shù)。

  Rob Conery(簡稱RC):我自1991年以來一直從事軟件行業(yè),做一些數(shù)據(jù)庫,CGI和HTML之類的開發(fā)。從1997年開始使用ASP,從那之后一直堅(jiān)持使用微軟技術(shù)。2006年我開始為微軟工作,主要職責(zé)是幫助人們學(xué)習(xí)和使用新的ASP.NET MVC框架。2009年我離開了微軟開始做些不同的事情(更多的關(guān)注開源平臺(tái)),之后和James Avery一起創(chuàng)辦了Tekpub。

  InfoQ:能介紹一下你們剛創(chuàng)業(yè)時(shí)TekPub的架構(gòu)嗎?

  JA:TekPub的第一個(gè)版本是基于Ruby on Rails構(gòu)建的,當(dāng)時(shí)Rob花費(fèi)了整整一個(gè)周末的時(shí)間。之后我們仔細(xì)的進(jìn)行了討論,最終決定放棄這個(gè)版本。由于我們都很了解ASP.NET MVC技術(shù),所以決定用ASP.NET MVC來實(shí)現(xiàn)TekPub。我相信,當(dāng)開始一項(xiàng)新業(yè)務(wù)時(shí)是沒有時(shí)間嘗試和學(xué)習(xí)新技術(shù)的。Rob和我過去都寫過Rails應(yīng)用,但真正使用時(shí),我們都覺得ASP.NET MVC比Rails好得多。于是我們放棄了Rails轉(zhuǎn)而使用ASP.NET MVC技術(shù)開發(fā)網(wǎng)站。后來我們?nèi)∠撜军c(diǎn)并重新構(gòu)建它,因?yàn)樗呀?jīng)變得太復(fù)雜。在我們開始進(jìn)行技術(shù)遷移時(shí),TekPub的版本是3,主要技術(shù)是ASP.NET MVC,C#和MS SQL Server。

  InfoQ:從網(wǎng)站使用者的角度你遇到了什么樣的挑戰(zhàn)?從網(wǎng)站管理者的角度呢?

  RC:最初,或者說網(wǎng)站運(yùn)營的第一天,我們就遇到了網(wǎng)絡(luò)帶寬的問題。我們?cè)赥witter上宣布網(wǎng)站開張,這直接導(dǎo)致我們的ISP由于帶寬的需求被淘汰。他們毫不夸張的讓工程師“坐在開關(guān)上”來保證網(wǎng)站的正常運(yùn)行,但最終網(wǎng)站還是停了。之后兩小時(shí)內(nèi)我把我們所有免費(fèi)的內(nèi)容都放到了亞馬遜的S3上,這對(duì)我們幫助非常大。

還有,一小部分人不喜歡Silverlight,不愿意安裝它。我們?cè)赗eddit上投放了廣告,人們卻簡單的認(rèn)為我們的網(wǎng)站是微軟資助的一個(gè)什么東西——這是和我們的目標(biāo)背離的。對(duì)我們來說這是個(gè)大問題。

  JAASP.NET MVC運(yùn)行的很好,Windows架構(gòu)也不錯(cuò)。事實(shí)上我們?cè)谶@個(gè)領(lǐng)域沒碰到什么麻煩。主要的挑戰(zhàn)來自于我們決定使用Silverlight播放流媒體。很多用戶不愿意安裝Silverlight,這給我們帶來很大的困擾。與Rob確認(rèn)后,我們不得不遷移到Flash技術(shù)。遷移到Flash之后還沒有一個(gè)人抱怨過。我們希望HTML5很快面世。

  InfoQ:架構(gòu)如何應(yīng)對(duì)用戶需求?

  RC:我們從來沒有遇到底層框架的問題——它處理的很好。這并不是一個(gè)負(fù)載非常大的網(wǎng)站(在功能方面),所以我們從沒真正遇到那方面的問題

  InfoQ:既然平臺(tái)運(yùn)行的非常好,為什么要做架構(gòu)的改變呢?

  RC:成本。我們加入了微軟的BizSpark計(jì)劃,而且它的確給了我們一個(gè)很棒的起點(diǎn),但是隨著項(xiàng)目的發(fā)展,我們發(fā)現(xiàn),3年以后,從我們使用的數(shù)據(jù)庫到開發(fā)環(huán)境,每一件事情都需要付費(fèi)。而且我們很可能需要為Silverlight(使用流媒體)提供一個(gè)分離的服務(wù)器,用來播放視頻,這樣就需要再支付一個(gè)使用許可的費(fèi)用——此外,為了使視頻流平滑輸出,我們還需要買媒體編碼器。

  對(duì)于大公司來說,這的確不算什么,但當(dāng)我們坐下來看帳單時(shí)——噢,這可是個(gè)5位數(shù)啊。最終我們發(fā)現(xiàn),根據(jù)我們現(xiàn)有的業(yè)務(wù)規(guī)模,是無法承擔(dān)這筆費(fèi)用的。

  不僅僅如此,James和我都清楚Rails非常好用。我們意識(shí)到可以把所有事情都推到云端,只需支付很低的價(jià)格就可以獲得很好的流媒體和吞吐量。

  JA:正如Rob提到的,成本壓力是其中一個(gè)因素,BizSpark是很好,但卻像一個(gè)定時(shí)炸彈。我覺得比成本更重要的推動(dòng)因素是每天我們希望使用什么技術(shù)。ASP.NET MVC和.NET技術(shù)在某些領(lǐng)域是有缺陷的,而這些領(lǐng)域的工作對(duì)我們非常重要。在.NET上做測(cè)試就并不讓人滿意,你不得不大費(fèi)周章才能以正確的方式設(shè)計(jì)你的應(yīng)用,處理測(cè)試,而且編寫測(cè)試本身也不像其他語言那么清晰和有用。另一個(gè)問題是部署,雖然有很多種方式可以處理,但確實(shí)不如Capistrano好用。

  InfoQ:那么現(xiàn)在TekPub平臺(tái)是什么樣子的?

  RC:我們遷移到Rails 2.3.5,使用了針對(duì)MongoDB的MongoMapper技術(shù)。我們做了一個(gè)報(bào)告設(shè)置,用MySQL來跟蹤反饋使用DataMapper的情況。我們還植入了New Relic RPM,來跟蹤我們的站點(diǎn)和健康情況——所有的這些,平均成本僅僅是我們使用BizSpark的1%。

  JA:這解決了我們所有與使用許可有關(guān)的問題,我們每月需要為Amazon EC2平臺(tái)上的一個(gè)Ubuntu實(shí)例支付$80,這是保留實(shí)例后的費(fèi)用。Rob和我都很喜歡這種技術(shù),我們使用Cucumber做了大量測(cè)試,用Capistrano部署變得非常簡單容易。

  InfoQ: 能給我們講講你們的技術(shù)架構(gòu)細(xì)節(jié)嗎?

  RC:使用Rails 2.3.5及其對(duì)應(yīng)的MongoMapper/MongoDB,使用MySQL 5.2和O/R Mapping工具DataMapper。我們還用了New Relic RPM工具,非常棒。

  JA:我們選擇使用Rails 2.3.5和Ruby 1.8.7,通過Passenger運(yùn)行Rails應(yīng)用。在數(shù)據(jù)庫方面,我們通過使用優(yōu)秀的MongoMapper gem訪問MongoDB 1.3.4。我們還通過DataMapper實(shí)現(xiàn)MySQL 5.1的數(shù)據(jù)訪問。我們并不使用很多其他的Gem,只是用Pony發(fā)郵件,rpx_now訪問RPX做身份驗(yàn)證。同時(shí)我倆還都是HAML的愛好者,所有的界面都是基于HAML實(shí)現(xiàn)的。

  InfoQ:你們的EC2怎么配置的?

  JA:所有的內(nèi)容都是托管在云端,相當(dāng)于一個(gè)比較小的服務(wù)器,也就是一個(gè)單獨(dú)的EC2實(shí)例(虛擬雙核,2個(gè)計(jì)算單元,7G內(nèi)存)。在這個(gè)實(shí)例上運(yùn)行著Ubuntu 9.1(karmic)和Apache。我希望未來有更多的資源,你知道,運(yùn)行在EC2上,想增加資源是非常容易的。

  InfoQ:為什么選擇Ruby on Rails?

  RC:James和我都知道,插件的世界是非常吸引人的。例如New Relic,簡直是上帝送來的禮物。我不擔(dān)心服務(wù)器掛掉,而且我能看到所有代碼的“瓶頸點(diǎn)”。他們還能跟蹤最高發(fā)生頻率的問題,甚至?xí)岢龈倪M(jìn)意見。

MongoMapper是一個(gè)令人難以置信的數(shù)據(jù)工具,而MongoDB本身的速度比閃電還快。Rails的平臺(tái)已經(jīng)成熟到了這樣的地步,幾乎難以說服自己*不*使用它。

  JA:我們遇到的所有問題(使用許可、測(cè)試和部署)都得到了很好的解決。我們還能使用一些變通的辦法,例如寫自己的部署框架等。隨之而來的是我們都很享受與Rails工作,我們喜歡Rails社區(qū),還有很多工具和類庫可用。經(jīng)過遷移之后最棒的地方就是,這一切讓我們變的非常高興。

  InfoQ:相對(duì)很多傳統(tǒng)數(shù)據(jù)庫例如MySQL或者PostgreSQL,你們?yōu)槭裁催x擇MongoDB?

  RC:速度和擴(kuò)展性。使用MongoDB非常簡單——不用擔(dān)心遷移,非常靈活。而且它不可思議的快——這一點(diǎn)對(duì)用戶帶來的感受是巨大的。

  JA:事實(shí)上我們都用了,我們用MongoDB做那些它最擅長的(靈活存儲(chǔ)產(chǎn)品、用戶和訂單等信息),同樣我們也這么使用MySQL,我們用MySQL提供正在發(fā)生的持久事務(wù)日志。

  InfoQ:完成了新的設(shè)計(jì)和重寫應(yīng)用之后,最直接的好處是什么?

  RC: 最直接的——第一件事就是人們發(fā)現(xiàn)網(wǎng)站變快了。他們還注意到一個(gè)“更嚴(yán)格”的設(shè)計(jì),誠實(shí)的說,確實(shí)有些繁瑣,但它讓我們能更多的關(guān)注服務(wù)器端。

  不僅僅如此——當(dāng)出現(xiàn)問題時(shí),我們可以在幾秒鐘之內(nèi)消除它。這是由于基于Capistrano的部署是如此簡單。問題的修復(fù)、推出——僅需幾秒。

  我們的測(cè)試套件使用的非常好——使用Cucumber做一些事情簡直是一種享受,但用ASP.NET MVC就會(huì)很困難。例如——使用ASP測(cè)試PayPal的支付接口時(shí)就會(huì)很麻煩。

  基于Rails/Cucumber/Webrat,在這樣的框架下要做的就是填空并提交——然后確認(rèn)所有事情都是按照計(jì)劃執(zhí)行的。我想我們的用戶會(huì)看到很多功能在按照預(yù)期的方式運(yùn)行——這確實(shí)很棒。

  最直接的好處是我們想做一些變化時(shí),可以快速完成,并且這種響應(yīng)速度直接反應(yīng)到了產(chǎn)品上。在原來基于ASP.NET MVC技術(shù)的網(wǎng)站上,我經(jīng)常會(huì)寫些SQL腳本來處理一些復(fù)雜的支持需求,比如改變某人的OpenID,或合并帳戶什么的。但現(xiàn)在我只需花30-60分鐘的時(shí)間寫了幾行的Ruby腳本就能完成。

  在重寫網(wǎng)站過程中另一個(gè)重大的改變之一是如何處理用戶的文件。過去我們從自己的服務(wù)器或運(yùn)行在EC2上的Wowza媒體服務(wù)器上以流的方式處理文件。這兩種方案都可以,但是太貴了,而且在其他國家就運(yùn)行的沒那么好了。這次我們開始重新設(shè)計(jì)亞馬遜服務(wù),提供了從云端和云端流來處理私有內(nèi)容的能力。現(xiàn)在我們的全部內(nèi)容都是通過云端處理,并使用了安全簽名的URL,這就意味著世界上任何地方的用戶都可以進(jìn)行高速下載。這也節(jié)省了我們的成本,因?yàn)槲覀冎恍柚Ц妒褂脦挼馁M(fèi)用,不需要額外的設(shè)備或許可費(fèi)用。

  InfoQ: 在你們當(dāng)前的實(shí)現(xiàn)中,TDD測(cè)試方法包含哪些內(nèi)容,引入模擬對(duì)象了嗎?

  JA:我們用Cucumber和Pickle實(shí)現(xiàn)測(cè)試驅(qū)動(dòng)開發(fā)。這方面Rob應(yīng)該比我更清楚。

  RC:沒有進(jìn)行模擬測(cè)試,都是BDD(行為驅(qū)動(dòng)開發(fā))。我痛恨那種拖拉的感覺,就像我需要做“代碼覆蓋率”一樣——事實(shí)上我們有個(gè)商業(yè)應(yīng)用在運(yùn)行,我更需要確認(rèn)用戶獲得良好的體驗(yàn),這對(duì)我來說就是BDD。Cucumber扮演了一個(gè)真正的重要角色——就像Pickle和Factory Girl做的那樣——它與MongoMapper配合的好極了,對(duì)比我在微軟框架下做的和我現(xiàn)在能做的事情,這讓我高興的笑了好幾次。我?guī)缀跬耆诳紤]業(yè)務(wù)——甚至沒有注意到測(cè)試方法這回事。

  InfoQ: 你們現(xiàn)在的測(cè)試方法和以前在微軟使用的方法有什么不同?

  RC:100%不同。測(cè)試微軟的東西是極其痛苦的,當(dāng)時(shí)你很窮,還有三個(gè)月錢就花完了,在這種情況下,測(cè)試就是變成了一個(gè)很難判斷的的東西。不可否認(rèn)——我為我們的第一次修改幾乎寫了一噸的垃圾。如果你沒有客戶,那么你的應(yīng)用系統(tǒng)好不好用就無關(guān)緊要,我真正需要確定的是不出現(xiàn)那些不可預(yù)期的錯(cuò)誤。所以我進(jìn)行了一些測(cè)試,但并沒有得到想要的結(jié)果。我們對(duì)PayPal的東西進(jìn)行了大量地測(cè)試,這是你必須要做的。當(dāng)開始使用他們的API時(shí),我在他們的沙箱環(huán)境中折騰了整整三天,還是會(huì)不斷的出問題。

  另一邊呢——感覺是黑夜和白天的對(duì)比。現(xiàn)在我們覆蓋了所有的行為類型,我想James甚至抽時(shí)間寫了一些。

  JA:對(duì)微軟產(chǎn)品的測(cè)試總是像打一場(chǎng)戰(zhàn)爭,主要是因?yàn)镃#和靜態(tài)語言對(duì)測(cè)試的支持不是很好。在.NET上測(cè)試時(shí)你總是需要在各種循環(huán)中跳來跳去。話雖這么說,.NET的SpecFlow框架看上去還是很樂觀,但我對(duì)它能解決.NET的測(cè)試方面的所有問題持懷疑態(tài)度。

  InfoQ: 在微軟框架上做測(cè)試會(huì)有多少困難?為什么會(huì)這樣?

  RC:語言和工具造成的。假如微軟對(duì)這一點(diǎn)想的多一些,測(cè)試可能會(huì)更容易一些。使用RSpec進(jìn)行測(cè)試,沒有其他語言比Ruby做得更好了——它讓測(cè)試變得非常容易。微軟可以利用DLR實(shí)現(xiàn)這些功能……但是他們沒有這么做。因?yàn)檫@不符合“.NET Story”,那么好吧,這是他們的商業(yè)決策,我們這次的遷移也是一樣。

  InfoQ: 在這次全面的重新設(shè)計(jì)中,你們有什么經(jīng)驗(yàn)教訓(xùn)嗎?

  RC:沒什么——我想James和我都知道,我們到了需要調(diào)整和重寫的那個(gè)點(diǎn)。這是我的第三次創(chuàng)業(yè),對(duì)James來說應(yīng)該是第五次。開始時(shí)我們經(jīng)過很長的時(shí)間討論采用什么技術(shù)。我們都同意我們要“跟隨你所知道的,并且去實(shí)現(xiàn)它”——于是我們就做了。

  我們很幸運(yùn)把握住了這個(gè)機(jī)會(huì)——然后我們進(jìn)入了這樣一個(gè)狀態(tài):“好吧,讓我們開始為之后的3-5年規(guī)劃,進(jìn)入可控的增長模式”——這就是我們現(xiàn)在的狀態(tài)。我們不想做得很大,我們不想引入IT人員或一組開發(fā)人員。我們想自己做而且保持小的規(guī)模——重點(diǎn)放在了我們的創(chuàng)意上。

  對(duì)于我們這樣的兩個(gè)家伙來說,Rails超級(jí)簡單,易于維護(hù)。我們有世界上最可靠的支撐(可自動(dòng)擴(kuò)展的亞馬遜EC2),我們對(duì)正在做的事情非常滿意,獲得了很多樂趣。

  JA:我想大部分人看到這個(gè)故事,會(huì)認(rèn)為我們應(yīng)該從開始就使用Rails,事實(shí)上我很高興我們沒有那么做。開始創(chuàng)業(yè)時(shí)我想我們要相信自己的直覺,哪些是當(dāng)時(shí)我們認(rèn)為最好的,我們應(yīng)該關(guān)心所有的業(yè)務(wù)問題,而不是使用什么工具。現(xiàn)在業(yè)務(wù)已經(jīng)正常運(yùn)轉(zhuǎn),在這樣一個(gè)堅(jiān)實(shí)的基礎(chǔ)之上,我們就有了很多美妙的時(shí)光,釋放內(nèi)心的渴望做一些好玩的事情。平臺(tái)移植讓我們享受了很多樂趣。

  InfoQ: 你們現(xiàn)在的架構(gòu)有什么缺點(diǎn)嗎?如果今天開始重新做一遍的話,有什么改變嗎?

  RC:從我的觀點(diǎn)來看沒什么——我愛現(xiàn)在的一切。對(duì)我來說這很不可思議——我在很長一段時(shí)間內(nèi)曾是一名微軟員工,并被扣上了這樣一頂帽子……其實(shí)這對(duì)我們來說并不意味著什么。我非常喜歡硬件成本的可擴(kuò)展性——我想在很長時(shí)間之內(nèi)我們不再需要其他的硬件方案了。我們的服務(wù)器非常靈活,完全根據(jù)需求動(dòng)態(tài)擴(kuò)展。使用微軟技術(shù)你就沒法做到這些(據(jù)我所知),如果你想搞一臺(tái)獨(dú)立的機(jī)器,那你就需要支付一大筆款項(xiàng)。

  JA:針對(duì)現(xiàn)有架構(gòu),我唯一想做的改變就是把MongoDB從我們的單一服務(wù)器上分離出來,同時(shí)運(yùn)行兩個(gè)MongoDB對(duì)我們來說是有意義的,但現(xiàn)在這部分功能被廢棄了,對(duì)我們來說更有意義的事就是等MongoDB開發(fā)新的配對(duì)策略。但是考慮到額外的兩個(gè)虛擬機(jī)的成本,以及我們的業(yè)務(wù)在現(xiàn)有的單一服務(wù)器上運(yùn)行良好,我們暫時(shí)還不準(zhǔn)備這么做。

  InfoQ: 感謝Rob和James抽時(shí)間接受我們的訪談。

  關(guān)于TekPub的更多信息,請(qǐng)參考公司網(wǎng)站

  查看英文原文:Architecting TekPub - Moving from ASP.NET MVC to Ruby on Rails

NET技術(shù)重構(gòu)TekPub——從ASP.NET MVC框架遷移到Ruby on Rails,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 跪趴式啪啪GIF动态图27报 | 邻家美姨在线观看全集免费 | 成人国产一区 | 月夜直播免费看 | 小小水蜜桃视频高清在线观看免费 | 三级网站午夜三级 | 亚洲 视频 在线 国产 精品 | 超碰免费视频公开观看 | 国产色播视频在线观看 | 日本一卡精品视频免费 | 好男人好资源在线观看免费视频 | 亚洲成A人片在线观看中文不卡 | GAY东北澡堂激情2022 | 亚洲国产精品久久又爽黄A片 | 穿着丝袜被男生强行啪啪 | 国产免费网站看v片在线 | 午夜视频无码国产在线观看 | 精品综合久久久久久8888 | 灌饱娇嫩H将军公主最新章节 | 伊人久久大香线蕉综合影 | 总攻催眠受的高h巨肉np | 国产精品在线手机视频 | 国产女人乱人伦精品一区二区 | 强奷乱码中文字幕熟女免费 | 亚洲精品无码国产爽快A片百度 | 久久香蕉国产线看观看首页 | 伊人久综合 | 乱叫抽搐流白浆免费视频 | 欧美巨大xxxx做受孕妇视频 | 亚洲国产成人精品无码区APP | 99热久这里都是精品小草 | 草莓视频在线免费观看 | 四虎亚洲中文字幕永久在线 | 日日色在线影院 | 拉菲娱乐主管高工资q39709 | 久草在线精彩免费视频 | 国产日韩成人内射视频 | 99er热精品视频国产免费 | 日美欧韩一区二去三区 | 亚洲精品乱码电影在线观看 | 久久亚洲国产精品亚洲 |