自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳述百萬級訪問網(wǎng)站前期的技術(shù)準備(上篇)

開發(fā) 前端
今天我們要談的是百萬級訪問網(wǎng)站的前期技術(shù)準備,包括開發(fā)語言的選擇,服務(wù)器的選擇,機房的選擇等等。希望對大家有所幫助。

51CTO編者按:IT技術(shù)人員在工作年限到達一定層次,比如十年就會考慮自己創(chuàng)業(yè)的問題。在這創(chuàng)業(yè)的前期,盡管我們有很高的熱情,但是現(xiàn)實是殘酷的。萬事開頭難,究竟我們該如何準備一個百萬級的網(wǎng)站所需的技術(shù)資源,請看本文。我們將介紹如何進行開發(fā)語言,機房,數(shù)據(jù)庫,緩存等方面的選擇。

作為一個技術(shù)從業(yè)者十年,逛了十年發(fā)現(xiàn)有些知識東一榔頭西一棒槌的得滿世界看個遍才整理出個頭緒,那咱就系統(tǒng)點的從頭一步一步的說,一個從日幾千訪問的小小網(wǎng)站,到日訪問一兩百萬的小網(wǎng)站,怎么才能讓它平滑的度過這個階段,別在 技術(shù)上出現(xiàn)先天不足,寫給一些技術(shù)人員,也寫給不懂技術(shù)的創(chuàng)業(yè)者。

對互聯(lián)網(wǎng)有了解的人都有自己的想法,有人就把想法付諸實現(xiàn),做個網(wǎng)站然后開始運營。其實從純網(wǎng)站技術(shù)上來說,因為開源模式的發(fā)展,現(xiàn)在建一個小網(wǎng)站 已經(jīng)很簡單也很便宜。當(dāng)訪問量到達一定數(shù)量級的時候成本就開始飆升了,問題也開始顯現(xiàn)了。因為帶寬的增加、硬件的擴展、人員的擴張所帶來的成本提高是顯而 易見的,而還有相當(dāng)大的一部分成本是因為代碼重構(gòu)、架構(gòu)重構(gòu),甚至底層開發(fā)語言更換引起的,最慘的就是數(shù)據(jù)丟失,辛辛苦苦好幾年,一夜回到創(chuàng)業(yè)前。

減少成本就是增加利潤。很多事情,我們在一開始就可以避免,先打好基礎(chǔ),往后可以省很多精力,少操很多心。

假設(shè)你是一個參與創(chuàng)業(yè)的技術(shù)人員,當(dāng)前一窮二白,什么都要自己做,自己出錢,初期幾十萬的資金,做一個應(yīng)用不是特別復(fù)雜的網(wǎng)站,那么就要注意以下幾點:

一、開發(fā)語言

一般來說,技術(shù)人員(程序員)創(chuàng)業(yè)都是根據(jù)自己技術(shù)背景選擇自己最熟悉的語言,不過考慮到不可能永遠是您一個人寫程序,這點還得仔細想想。無論用什么語言,最終代碼質(zhì)量是看管理,所以我們還是從純語言層面來說實際一點?,F(xiàn)在流行的Java、PHP、.NETpython、ruby都有自己的優(yōu)劣,python和ruby,現(xiàn)在人員還是相對難招一些,性能優(yōu)化也會費些力氣,.NET平臺買不起Windows server。Java、PHP用的還是最多。對于初期,應(yīng)用幾乎都是靠前端支撐的網(wǎng)站來說,PHP的優(yōu)勢稍大一些,入門簡單、設(shè)計模式簡單、寫起來快、 性能足夠等,不過不注重設(shè)計模式也是它的劣勢,容易變得松散,隱藏bug稍多、難以維護。Java的優(yōu)勢在于整套管理流程已經(jīng)有很多成熟工具來輔助,強類 型也能避免一些弱智BUG,大多數(shù)Java程序員比較注重設(shè)計模式,別管實不實際,代碼格式看起來還是不錯的。這也是個劣勢,初學(xué)者可能太注重模式而很難 解決實際需求。

前端不只是html、css這類。整個負責(zé)跟用戶交互的部分都是前端,包括處理程序。這類程序還是建議用PHP,主要原因就是開發(fā)迅速、從業(yè)人員廣泛。至于后端例如行為分析、銀行接口、異步消息處理等,隨便用什么程序,那個只能是根據(jù)不同業(yè)務(wù)需求來選擇不同語言了。

二、代碼版本管理

如果開發(fā)人員之間的網(wǎng)絡(luò)速度差不多,就SVN;比較分散例如跨國,就hg。大多數(shù)人還是SVN的.

假設(shè)選了SVN,那么有幾點考慮。一是采用什么樹結(jié)構(gòu)。初期可能只有一條主干,往后就需要建立分支,例如一條開發(fā)分支,一條上線分支,再往后,可能要每個小組一個分支。建議一開始人少時選擇兩條分支,開發(fā)和線上,每個功能本地測試無誤后提交到開發(fā)分支,最后統(tǒng)一測試,可以上線時合并到上線分支。如果 喜歡把SVN當(dāng)做移動硬盤用,寫一點就commit一次也無所謂,就是合并的時候頭大一些,這些人可以自己建個分支甚至建立個本地代碼倉庫,隨便往自己的 分支提交,測試完畢后再提交到開發(fā)分支上。

部署,可以手工部署也可以自動部署。手工部署相對簡單,一般是直接在服務(wù)器上SVN update,或者找個新目錄SVN checkout,再把Web root給ln -s過去。應(yīng)用越復(fù)雜,部署越復(fù)雜,沒有什么統(tǒng)一標(biāo)準,只要別再用ftp上傳那種形式就好,一是上傳時文件引用不一致錯誤率增加,二是很容易出現(xiàn)開發(fā)人員 的版本跟線上版本不一致,導(dǎo)致本來想改個錯字結(jié)果變成回滾的杯具。如果有多臺服務(wù)器還是建議自動部署,更換代碼的機器從當(dāng)前服務(wù)池中臨時撤出,更新完畢后 再重新加入。

不管項目多小,養(yǎng)成使用版本管理的好習(xí)慣,最起碼還可以當(dāng)做你的備份,我的http://zhiyi.us雖然就是一個wordpress,可還是SVN了,只改動一兩句css那也是勞動成果。

三、服務(wù)器硬件

別羨慕大客戶和有錢人,看看機房散戶區(qū),一臺服務(wù)器孤獨的支撐的網(wǎng)站數(shù)不清。如果資金稍微充足,建議至少三臺的標(biāo)準配置,分別用作Web處理、數(shù)據(jù) 庫、備份。Web服務(wù)器至少要8G內(nèi)存,雙sata raid1,如果經(jīng)濟稍微寬松,或靜態(tài)文件或圖片多,則15k sas raid1+0。數(shù)據(jù)庫至少16G內(nèi)存,15k sas raid 1+0。備份服務(wù)器最好跟數(shù)據(jù)庫服務(wù)器同等配置。硬件可以自己買品牌的底板,也就是機箱配主板和硬盤盒,CPU內(nèi)存硬盤都自己配,也可以上整套品牌,也可 以兼容機。三臺機器,市場行情6、7萬也就配齊了。

Web服務(wù)器可以既跑程序又當(dāng)內(nèi)存緩存,數(shù)據(jù)庫服務(wù)器則只跑主數(shù)據(jù)庫(假如是MySQL的話),備份服務(wù)器干的活就相對多一些,Web配置、緩存配置、數(shù)據(jù)庫配置都要跟前兩臺一致,這樣Web和數(shù)據(jù)庫任意一臺出問題,把備份服務(wù)器換個ip就切換上去了。備份策略,可以drbd,可以rsync,或者其他的很多很多的開源備份方案可選擇。rsync最簡單,放cron里自己跑就行。備份和切換,建議多做測試,選最安全最適合業(yè)務(wù)的,并且盡可能異地備份。

四、機房

三種機房盡量不要選:聯(lián)通訪問特別慢的電信機房、電信訪問特別慢的聯(lián)通機房、電信聯(lián)通訪問特別慢的移動或鐵通機房。那網(wǎng)通機房呢?親,網(wǎng)通聯(lián)通N久 以前合并改叫聯(lián)通了。多多尋找,實地參觀,多多測試,多方打探,北京、上海、廣州等各個主節(jié)點城市,還是有很多優(yōu)質(zhì)機房的,找個網(wǎng)絡(luò)質(zhì)量好,管理嚴格的機 房,特別是管理要嚴格,千萬別網(wǎng)站無法訪問了,打個電話過去才知道別人維護時把你網(wǎng)線碰掉了,這比DOS都頭疼。自己扯了幾根光纖就稱為機房的,看您抗風(fēng) 險程度和心理素質(zhì)了。機房可以說是非常重要,直接關(guān)系到網(wǎng)站訪問速度,網(wǎng)站訪問速度直接關(guān)系到用戶體驗,我可以翻墻看風(fēng)景,但買個網(wǎng)游vpn才能打開你這 個還不怎么知名的網(wǎng)站就有難度了。或許您網(wǎng)站的ajax很出色,可是document怎么也不ready,一些代碼永遠絕緣于用戶。

五、架構(gòu)

初期架構(gòu)一般比較簡單,Web負載均衡+數(shù)據(jù)庫主從+緩存+分布式存儲+隊列。大方向上也確實就這幾樣?xùn)|西,細節(jié)上也無數(shù)文章都重復(fù)過了,按照將來 會有很多Web,N多主從關(guān)系,很多緩存,很多xxx設(shè)計就行,基本方案都是現(xiàn)成的,只是您比其他人厲害之處就在于設(shè)計上考慮到緩存失效時的雪崩效應(yīng)、主從同步的數(shù)據(jù)一致性和時間差、隊列的穩(wěn)定性和失敗后的重試策略、文件存儲的效率和備份方式等等意外情況。緩存總有一天會失效,數(shù)據(jù)庫復(fù)制總有一天會斷掉, 隊列總有一天會寫不進去,電源總有一天會燒壞。根據(jù)墨菲定律,如果不考慮這些,網(wǎng)站早晚會成為廢品。

六、服務(wù)器軟件

Linux、nginx、PHP、MySQL,幾乎是標(biāo)配,我們除了看名字,還得選版本。Linux發(fā)行版眾多,只要沒特殊要求,就選個用的人最多的,社區(qū)最活躍的,配置最方便的,軟件包最全最新的,例如debian、uBuntu。 至于RHEL之類的嘛,你用只能在RHEL上才能運行的軟件么?剩下的nginx、PHP、MySQL、activemq、其他的等等,除非你改過這些軟 件或你的程序真的不兼容新版本,否則盡量版本越新越好,版本新,意味著新特性增多、BUG減少、性能增加。總有些道聽途說的人跟你說老的版本穩(wěn)定。所謂穩(wěn) 定,是相對于特殊業(yè)務(wù)來說的,而就一個PHP寫的網(wǎng)站,大多數(shù)人都沒改過任何服務(wù)器軟件源代碼,絕大多數(shù)情況是能平穩(wěn)的升級到新版本的。類似于jdk5到 jdk6,python2到python3這類變動比較大的升級還是比較少見的??纯碈hangeLog,看看升級說明,結(jié)合自己情況評估一下,越早升級 越好,別人家都用PHP6寫程序了這邊還PHP4的逛游呢。優(yōu)秀的開源程序升級還是很負責(zé)任的,看好文檔,別怕。

以上這六點準備完畢,現(xiàn)在我們有了運行環(huán)境,有了基本架構(gòu)骨架,有了備份和切換方案,應(yīng)該開始著手設(shè)計開發(fā)方面的事情了。

七、數(shù)據(jù)庫

幾乎所有操作最后都要落到數(shù)據(jù)庫身上,它又最難擴展(存儲也挺難)。對于MySQL,什么樣的表用myisam,什么樣的表用innodb,在開發(fā)之前要確定。復(fù)制策略、分片策略,也要確定。表引擎方面,一般,更新不多、不需要事務(wù)的表可以用myisam,需要行鎖定、事務(wù)支持的,用innodb。myisam的鎖表不一定是性能低下的根源,innodb也不一定全是行鎖,具體細節(jié)要多看相關(guān)的文檔,熟悉了引擎特性才能用的更好。現(xiàn)代Web應(yīng)用越來越復(fù)雜了,我們設(shè)計表結(jié)構(gòu)時常常設(shè)計很多冗余,雖然不符合傳統(tǒng)范式,但為了速度考慮還是值得的,要求高的情況下甚至要杜絕聯(lián)合查詢。編程時得多注意數(shù)據(jù)一致性。

復(fù)制策略方面,多主多從結(jié)構(gòu)也最好一開始就設(shè)計好,代碼直接按照多主多從來編寫,用一些小技巧來避免復(fù)制延時問題,并且還要解決多數(shù)據(jù)庫數(shù)據(jù)是否一致,可以自己寫或者找現(xiàn)成的運維工具。

分片策略??倳心敲磶讉€表數(shù)據(jù)量超大,這時分片必不可免。分片有很多策略,從簡單的分區(qū)到根據(jù)熱度自動調(diào)整,依照具體業(yè)務(wù)選擇一個適合自己的。避免自增ID作為主鍵,不利于分片。

用存儲過程是比較難擴展的,這種情形多發(fā)生于傳統(tǒng)C/S,特別是OA系統(tǒng)轉(zhuǎn)換過來的開發(fā)人員。低成本網(wǎng)站不是一兩臺小型機跑一個數(shù)據(jù)庫處理所有業(yè)務(wù)的模式,是機海作戰(zhàn)。方便水平擴展比那點預(yù)分析時間和網(wǎng)絡(luò)傳輸流量要重要的多的多。

NoSQL。這只是一個概念。實際應(yīng)用中,網(wǎng)站有著越來越多的密集寫操作、上億的簡單關(guān)系數(shù)據(jù)讀取、熱備等,這都不是傳統(tǒng)關(guān)系數(shù)據(jù)庫所擅長的,于是就產(chǎn)生了很多非關(guān)系型數(shù)據(jù)庫,比如Redis/TC&TT/MongoDB/Memcachedb等,在測試中,這些幾乎都達到了每秒至少一萬次的寫操作,內(nèi)存型的甚至5萬以上。例如MongoDB,幾句配置就可以組建一個復(fù)制+自動分片+failover的環(huán)境,文檔化的存儲也簡化了傳統(tǒng)設(shè)計庫結(jié)構(gòu)再開發(fā)的模式。很多業(yè)務(wù)是可以用這類數(shù)據(jù)庫來替代mysql的。

八、緩存

數(shù)據(jù)庫很脆弱,一定要有緩存在前面擋著,其實我們優(yōu)化速度,幾乎就是優(yōu)化緩存,能用緩存的地方,就不要再跑到后端數(shù)據(jù)庫那折騰。緩存有持久化緩存、內(nèi)存緩存,生成靜態(tài)頁面是最容易理解的持久化緩存了,還有很多比如varnish的分塊緩存、前面提到的memcachedb等,內(nèi)存緩存,memcached首當(dāng)其沖。緩存更新可用被動更新和主動更新。被動更新的好處是設(shè)計簡單,緩存空了就自動去數(shù)據(jù)庫取數(shù)據(jù)再把緩存填上,但容易引發(fā)雪崩效應(yīng),一旦緩存大面積失效,數(shù)據(jù)庫的壓力直線上升很可能掛掉。主動緩存可避免這點但是可能引發(fā)程序取不到數(shù)據(jù)的問題。這兩者之間如何配合,程序設(shè)計要多動腦筋。

九、隊列

用戶一個操作很可能引發(fā)一系列資源和功能的調(diào)動,這些調(diào)動如果同時發(fā)生,壓力無法控制,用戶體驗也不好,可以把這樣一些操作放入隊列,由另幾個模塊去異步執(zhí)行,例如發(fā)送郵件,發(fā)送手機短信。開源隊列服務(wù)器很多,性能要求不高用數(shù)據(jù)庫當(dāng)做隊列也可以,只要保證程序讀寫隊列的接口不變,底層隊列服務(wù)可隨時更換就可以,類似Zend Framework里的Zend_Queue類,java.util.Queue接口等。

十、文件存儲

除了結(jié)構(gòu)化數(shù)據(jù),我們經(jīng)常要存放其他的數(shù)據(jù),像圖片之類的。這類數(shù)據(jù)數(shù)量繁多、訪問量大。典型的就是圖片,從用戶頭像到用戶上傳的照片,還要生成不同的縮略圖尺寸。存儲的分布幾乎跟數(shù)據(jù)庫擴展一樣艱難。不使用專業(yè)存儲的情況下,基本都是靠自己的NAS。這就涉及到結(jié)構(gòu)。拿圖片存儲舉例,圖片是非常容易產(chǎn)生熱點的,有些圖片上傳后就不再有人看,有些可能每天被訪問數(shù)十萬次,而且大量小文件的異步備份也很耗費時間。

為了將來圖片走cdn做準備,一開始最好就將圖片的域名分開,且不用主域名。很多網(wǎng)站都將cookie設(shè)置到了.domain.ltd,如果圖片也在這個域名下,很可能因為cookie而造成緩存失效,并且占多余流量,還可能因為瀏覽器并發(fā)線程限制造成訪問緩慢。

如果用普通的文件系統(tǒng)存儲圖片,有一個簡單的方法。計算文件的hash值,比如md5,以結(jié)果第一位作為第一級目錄,這樣第一級有16個目錄。從0到F,可以把這個字母作為域名,0.yourimg.com到f.yourimg.com(客戶端dns壓力會增大),還可以擴展到最多16個NAS集群上。第二級可用年月例如,201011,第三級用日,第四級可選,根據(jù)上傳量,比如am/pm,甚至小時。最終的目錄結(jié)構(gòu)可能會是 e/201008/25/am/e43ae391c839d82801920cf.jpg。rsync備份時可以用腳本只同步某年某日某時的文件,避免計算大量文件帶來的開銷。當(dāng)然最好是能用專門的分布式文件系統(tǒng)或更專業(yè)點的存儲解決方案。

原文鏈接:http://zhiyi.us/internet/thinking-twice-before-building-your-site-one.html

【編輯推薦】

  1. 大型B2C網(wǎng)站高性能可伸縮架構(gòu)技術(shù)探秘
  2. 世界最大的PHP站點 Facebook后臺技術(shù)探秘
  3. 視頻專題:大型網(wǎng)站架構(gòu)技術(shù)專家談
  4. 大型網(wǎng)站架構(gòu)演變和知識體系
  5. 高并發(fā)高負載的大型網(wǎng)站系統(tǒng)架構(gòu)
責(zé)任編輯:彭凡 來源: cnbeta
相關(guān)推薦

2010-12-09 14:38:59

百萬級訪問網(wǎng)站

2010-12-17 13:01:55

2011-06-19 11:57:08

SEO

2011-08-25 11:52:35

2009-12-14 15:42:46

Ruby Tk編程

2009-12-18 16:49:07

組建宿舍網(wǎng)

2010-07-23 08:48:21

PHP架構(gòu)

2011-09-09 14:01:53

組網(wǎng)路由器交換機

2009-03-12 09:44:05

高并發(fā)開源數(shù)據(jù)庫MySQL

2011-08-23 17:12:22

MySQL支撐百萬級流

2009-09-11 10:41:20

C# WinForm控

2009-09-03 17:49:59

C#瀏覽器開發(fā)

2013-08-20 16:33:52

前端模塊化

2014-02-10 16:27:09

百萬級IOPSOceanStor 1

2025-02-28 10:10:48

2010-07-28 18:03:09

ADSL接入技術(shù)

2016-08-24 12:57:43

SQLIO統(tǒng)計SQL Server

2021-04-01 13:44:50

開發(fā)前端Web

2023-03-28 00:00:45

開發(fā)web工具

2011-04-12 10:12:36

光纜光纖
點贊
收藏

51CTO技術(shù)棧公眾號