基於windows + .net開發網站, 高並發/高訪問量的系統架構是怎麼樣的呢?
01-08
其實很多人都有一些誤區,例如網站一開始的基礎必須很好,決定了這個網站將來十幾年能不能支撐。
也許蓋房子是這樣的,但網站我覺得不會是這樣。
事實上,所有的網站一開始的時候,都非常簡單,即使你使用最糟糕的架構,如果流量突然擊垮你的網站,你也有足夠的資源去重新構建一個網站。(你做的不是http://12306.cn)
網站與蓋房子的不同之處在於,你在一開始根本就沒有藍圖,也不存在什麼商品房預售許可證來解決你的資金斷鏈問題。
在網站的一開始,你幾乎無法作出和十幾年後幾萬倍流量情況下一模一樣的選擇,即使你具有這樣的先知先覺,公司的資源也不一定能夠支撐。
問題的關鍵在於這十幾年中的抉擇,你是否會為了功能而妥協性能,你如何去取捨新增的功能帶來的性能影響,如何去承認錯誤和安排資源去重構你的代碼。
當一個網站已經無法滿足日益增長的用戶需求,而還沒有合適的CTO人選的時候。顯然把一切歸咎於「一開始選錯了架構」是最合適的。
跟非windows+.net的網站一個架構。
於是乎,我又想到了那個神吐槽……
我承認,我跟不上。
我剛剛學會了backbone.js,但現在發現它已經過時了,我應該使用ember.js,了解的過程中,有人說我應該使用Meteor,不,應該用AngularJS,不,應該Tower.js (基於node.js)。而對於HTML模板,我應該使用handlebars,而不是mustache,稍等一下, DoT.js看起來更好,慢著,為什麼要用一個瀏覽器里的HTML解析器?瀏覽器不就是干這事的嗎?那麼,不該使用HTML模板嗎?對,用DOM snippets,好,你是說Web Components嗎?W3C不是專門做這個的嗎?你是說像Google那樣開發一個常規的Javascript語言嗎?太扯了,我只需要用CofeeScript就行了,它的表現不錯,不用CofeeScript?用Coco? LiveScript? DART? GWT?這樣吧,我還是重新使用Ruby on Rails吧,哦,它沒有擴展性?Grails?Groovy? Roo?太簡單?那好,node.js怎麼樣?擴展性也不好??但是用它我既可以寫客戶端代碼,伺服器端代碼,還可以寫mongodb代碼,都用同一種語言。(非要用Javascript語言嗎?)那麼,PHP怎麼樣?你說它不是真正的線程安全?他們在撒謊??那好,讓我們重新回到伺服器端編程吧,還是用Java怎麼樣?不好?Lisp?哦,應該是Clojure?不錯,它有一個Bridge / protocol buffers / thrift實現,這樣語言就相通了,這樣我們的Haskell程序員也能開發了。或者用Scala/Lift/Play,它們都是最好的框架(Foresquare就是用的它們,它們一定很不錯)。當然,我們不該用SOAP,應該用JSON RESTful服務,只有銀行和沃爾瑪用SOAP,還有,堅決不能用SQL資料庫,它們不可能擴展。我明白了,我打算把這個項目外包出去… 他們可能會用一個Wordpress模板,然後拷貝粘貼一些jQuery代碼,這樣就能實現完全相同的效果,不會有任何上面說的那些讓人頭疼的事 [1]
所以,總的來說,如果不是已經知道了具體可能的訪問量(學校的系統?政府的系統?工廠的系統?),贊同 @Ivony 的答案。
[1] 原始出處不詳……不管是.net還是php,首先要考慮底層穩定性、應用層面的可擴展性,以及易開發性。你可以研究一下這個.net架構http://www.jinhusns.com/?type=f
鬆散架構 弱化各個功能區域的耦合
php之所以流行無非網上橫飛的代碼多了,拿來用的人太多.php寫法可以不嚴謹,沒有編譯的簡約實現,使得上手也比較容易,但是任何項目要做得好只和工匠有關,和工具無關.
你覺得你的項目本身的商業模式能達到什麼量級? 先想好這個問題再來提問。。。
架構上考慮:1、如何提高可靠性2、是否可以方便的擴展,一般是橫向擴展。
3、系統中是否存在單點。
具體的架構方法和語言及平台毫無關係。做到可以橫向擴展,通過加減伺服器來控制
推薦閱讀:
※如何學習大型網站的架構技術?
※如何把自己單獨做的HTML頁面放到基於 WordPress 的網站上?
※如果由你來設計 12306.cn,你會怎麼設計?
※為什麼現在還有網站在使用明文保存密碼?
※網站突發大流量怎麼做預警?