黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

大型網(wǎng)站的架構(gòu)

系統(tǒng) 2638 0

轉(zhuǎn)自 http://blog.csdn.net/LoveCherry/archive/2008/06/19/2564096.aspx

我們知道,對(duì)于一個(gè)大型網(wǎng)站來(lái)說(shuō),可伸縮性是非常重要的,怎么樣在縱向和橫向有良好的可伸縮性,就需要在做架構(gòu)設(shè)計(jì)的時(shí)候考慮到一個(gè)分的原則,我想在多個(gè)方面說(shuō)一下怎么分:

首先是橫向的分: 1.大的網(wǎng)站化解為多個(gè)小網(wǎng)站:當(dāng)我們一個(gè)網(wǎng)站有多個(gè)功能的時(shí)候,可以考慮把這個(gè)網(wǎng)站拆分成幾個(gè)小模塊,每一個(gè)模塊可以是一個(gè)網(wǎng)站,這樣的話我們到時(shí)候就可以很靈活地去把這些網(wǎng)站部署到不同的服務(wù)器上。 2.靜態(tài)動(dòng)態(tài)分離:靜態(tài)文件和動(dòng)態(tài)文件最好分離開(kāi)成2個(gè)網(wǎng)站,我們知道靜態(tài)網(wǎng)站和動(dòng)態(tài)網(wǎng)站對(duì)服務(wù)器來(lái)說(shuō)壓力的側(cè)重不同,前者可能重IO后者重CPU,那么我們?cè)谶x擇硬件的時(shí)候也可以有側(cè)重,而且靜態(tài)和動(dòng)態(tài)內(nèi)容的緩存策略也不一樣。典型的應(yīng)用,我們一般會(huì)有獨(dú)立的文件或圖片服務(wù)器。 3.按照功能來(lái)分:比如有一個(gè)模塊是負(fù)責(zé)上傳的,上傳操作很消耗時(shí)間,如果和其它應(yīng)用混在一起的話很可能,一點(diǎn)點(diǎn)訪問(wèn)就會(huì)使服務(wù)器癱瘓,這種特殊的模塊應(yīng)該分開(kāi)。安全的不安全的也要分開(kāi),還需要考慮到以后SSL的購(gòu)買(mǎi)。 4.我們不一定要全部用自己的服務(wù)器,搜索、報(bào)表可以依靠別人的服務(wù),比如google的搜索和報(bào)表服務(wù),自己做的不一定比得過(guò)別人,服務(wù)器帶寬都省了。 其次是縱向的分: 1.文件也相當(dāng)于數(shù)據(jù)庫(kù),IO的流量可能比數(shù)據(jù)庫(kù)還大,這也算是縱向級(jí)別的訪問(wèn),上傳的文件圖片一定要和WEB服務(wù)器分開(kāi)。當(dāng)然,數(shù)據(jù)庫(kù)和網(wǎng)站都放在一個(gè)服務(wù)器上的很少了,這是最基本的。 2.對(duì)于涉及到數(shù)據(jù)庫(kù)訪問(wèn)的動(dòng)態(tài)程序來(lái)說(shuō),我們可以使用一個(gè)中間層(所謂的應(yīng)用層或邏輯層)來(lái)訪問(wèn)數(shù)據(jù)庫(kù)(部署在獨(dú)立的服務(wù)器上),最大的好處就是緩存和靈活性。緩存的內(nèi)存占用比較大,我們要把它和網(wǎng)站進(jìn)程分開(kāi),而且這樣做我們可以很方便的去改變一些數(shù)據(jù)訪問(wèn)的策略,即使到時(shí)候數(shù)據(jù)庫(kù)有分布的話在這里可以做一個(gè)調(diào)配工作,這樣靈活性就很大了。還有好處是中間層可以做電線網(wǎng)通橋梁,可能網(wǎng)通訪問(wèn)雙線再訪問(wèn)電信會(huì)比網(wǎng)通直接訪問(wèn)電信服務(wù)器快。 有人說(shuō)我不分,我可以做負(fù)載均衡,對(duì),是可以的,但是如果分的話,同樣的10臺(tái)機(jī)器肯定比不分10臺(tái)機(jī)器可以承受更多的訪問(wèn)量,而且對(duì)硬件的需求可能不會(huì)很高,因?yàn)橹佬枰膫€(gè)硬件特別好。爭(zhēng)取讓每一個(gè)服務(wù)期都不空閑,又都不是太忙,合理進(jìn)行組合調(diào)整和擴(kuò)充,這樣的系統(tǒng)伸縮性就高了,能根據(jù)訪問(wèn)量來(lái)調(diào)整的前提就是之前有考慮到分,分的好處是靈活性、伸縮性、隔離性以及安全性。

對(duì)服務(wù)器來(lái)說(shuō),我們有幾點(diǎn)是要長(zhǎng)期觀察的,任何一點(diǎn)都可能是瓶頸: 1.CPU:動(dòng)態(tài)文件的解析需要比較多的CPU,CPU出現(xiàn)瓶頸就要看是不是哪個(gè)功能過(guò)長(zhǎng)時(shí)間占用線程,如果是就分出去?;蛘呔褪敲恳粋€(gè)請(qǐng)求處理時(shí)間不長(zhǎng),但是訪問(wèn)量很高,那么就加服務(wù)器。CPU是好東西,不能讓他干等,不做事情。 2.內(nèi)存:緩存從IIS進(jìn)程獨(dú)立出去,一般對(duì)WEB服務(wù)器來(lái)說(shuō)內(nèi)存不夠的情況不是很多。內(nèi)存比磁盤(pán)快,要合理利用。 3.磁盤(pán)IO:用性能監(jiān)視器找到哪些文件IO特別大,找到了就分到獨(dú)立的一組文件服務(wù)器上去,或者直接做CDN。磁盤(pán)慢,大規(guī)模讀取數(shù)據(jù)的應(yīng)用靠緩存,大規(guī)模寫(xiě)入數(shù)據(jù)的應(yīng)用可以靠隊(duì)列來(lái)降低突發(fā)的并發(fā)。 4.網(wǎng)絡(luò):我們知道,網(wǎng)絡(luò)的通訊是比較慢的,比磁盤(pán)還慢,如果是做分布式緩存,分布式計(jì)算的話,要考慮到物理服務(wù)器之間網(wǎng)絡(luò)通訊的時(shí)間,當(dāng)然,在流量大了以后,這可以提高系統(tǒng)的接納能力一個(gè)等級(jí)。靜態(tài)內(nèi)容可以借助CSD分擔(dān)一部分,在做服務(wù)器假設(shè)的時(shí)候還要考慮中國(guó)特色的電信網(wǎng)通情況以及防火墻。 對(duì)SQL SERVER數(shù)據(jù)庫(kù)服務(wù)器來(lái)說(shuō)[UPDATE]: 其實(shí)還是水平分割和縱向分割,一個(gè)二維表,水平分割就是橫過(guò)來(lái)切一刀,縱向分割就是豎直切一刀: 1、縱向分割就是,我們不同的應(yīng)用可以分到不同的DB中,不同的實(shí)例中,或者說(shuō)把某個(gè)擁有很多字段的表拆分成小表。 2、橫向分割就是,某些應(yīng)用可能不負(fù)載,比如用戶注冊(cè),但是用戶表會(huì)非常大,可以把大表分開(kāi)??梢圆捎帽矸謪^(qū),數(shù)據(jù)存儲(chǔ)在不同文件上,然后再部署到獨(dú)立物理服務(wù)器增加IO吞吐以改善讀寫(xiě)性能,土一點(diǎn)的做法就是自己定期把老的數(shù)據(jù)存檔。表分區(qū)的另外一個(gè)優(yōu)勢(shì)可以增加數(shù)據(jù)查詢速度,因?yàn)槲覀兊捻?yè)索引可以有多層了,就像一個(gè)文件夾中的文件不要太多,多分幾層文件夾一樣。 3、還可以通過(guò)數(shù)據(jù)庫(kù)鏡像、復(fù)制訂閱、事物日志,把讀寫(xiě)分開(kāi)到不同的鏡像物理數(shù)據(jù)庫(kù)上,一般來(lái)說(shuō)夠用,如果還不行可以用硬件來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的負(fù)載均衡。當(dāng)然,對(duì)于BI,我們可能還會(huì)有數(shù)據(jù)倉(cāng)庫(kù)。 架構(gòu)上考慮到了這些之后,流量大了,就可以在這個(gè)的基礎(chǔ)上再去調(diào)整或者做WEB服務(wù)器或者應(yīng)用服務(wù)器的負(fù)載均衡。很多時(shí)候我們都是在重復(fù)發(fā)現(xiàn)問(wèn)題-》找到瓶頸-》解決這個(gè)過(guò)程。 典型的架構(gòu)如下: 大型網(wǎng)站的架構(gòu) 動(dòng)態(tài)WEB服務(wù)器配好點(diǎn)的CPU,靜態(tài)WEB服務(wù)器和文件服務(wù)器磁盤(pán)好點(diǎn)應(yīng)用服務(wù)器內(nèi)存大點(diǎn),緩存服務(wù)器也是,數(shù)據(jù)庫(kù)服務(wù)器當(dāng)然內(nèi)存和CPU都要好

大型互聯(lián)網(wǎng)網(wǎng)站架構(gòu)心得之二:并于換

“分”是一個(gè)比較大的原則也是一個(gè)比較高層的原則,這次我想說(shuō)一下其它兩個(gè)原則:并與換。

為什么要分?是因?yàn)槲覀兿Mㄟ^(guò)分來(lái)提高系統(tǒng)的承載能力,那并又是并什么呢?我想了一下有幾個(gè)方面可以并:
1. 合并用戶請(qǐng)求,最基本的就是合并CSS/圖片/腳本,還可以合并頁(yè)面。不過(guò)合并就可能產(chǎn)生流量的浪費(fèi),需要有一個(gè)平衡點(diǎn)。
2. 合并接口的粒度,如果做分布式應(yīng)用的話,我們可能不會(huì)直接訪問(wèn)數(shù)據(jù)庫(kù)而是調(diào)用應(yīng)用層提供的接口,由于是網(wǎng)絡(luò)調(diào)用,代價(jià)比較大,因此在設(shè)計(jì)的時(shí)候盡量提供粒度比較粗的接口,一次調(diào)用返回比較多的數(shù)據(jù),而不是細(xì)化到添加刪除修改的層次。
3. 合并接口的部署,對(duì)于頻繁的跨機(jī)器調(diào)用可以考慮有一些數(shù)據(jù)冗余,把跨網(wǎng)絡(luò)的服務(wù)編程進(jìn)程間通訊,甚至轉(zhuǎn)到客戶端來(lái)做。比如論壇發(fā)貼時(shí)候臟詞的過(guò)濾,直接調(diào)用應(yīng)用層提供的接口(跨機(jī)器)是可以的,但是可能代價(jià)比較大,可以把這個(gè)接口使用IPC方式部署在本機(jī)。
時(shí)間換空間,空間換時(shí)間是常見(jiàn)的做法,具體一點(diǎn)說(shuō):
1. 緩存。緩存的重要性早計(jì)算機(jī)的硬件中就有重要的體現(xiàn)。對(duì)于網(wǎng)站,有很多種緩存,可以是客戶端資源的緩存,可以是頁(yè)面輸出緩存,也可以是應(yīng)用層的數(shù)據(jù)緩存,目的都是一樣的,或是減少了服務(wù)器請(qǐng)求次數(shù),或是減少了請(qǐng)求的處理過(guò)程,或是減少了數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù)。當(dāng)然,生成靜態(tài)文件也可以算是一種緩存。不訪問(wèn)磁盤(pán)固然不可能,但是我們要極大限度降低磁盤(pán)訪問(wèn)的機(jī)會(huì)。
2. 有的時(shí)候?yàn)榱双@取極快的響應(yīng),我們還會(huì)不惜代價(jià)采用重復(fù)計(jì)算。比如,我們的某個(gè)操作很可能會(huì)由于網(wǎng)絡(luò)問(wèn)題等原因響應(yīng)比較慢,在設(shè)計(jì)的時(shí)候可以有一個(gè)統(tǒng)一的處理接口,由這個(gè)接口分發(fā)到不同的服務(wù)器去異步實(shí)現(xiàn)這個(gè)操作,哪個(gè)服務(wù)器先返回了結(jié)果我們就用這個(gè)結(jié)果,然后殺死其他服務(wù)器的冗余操作。
3. 網(wǎng)站一般追求比較快的響應(yīng),一般不太會(huì)在比較高的層次用時(shí)間來(lái)?yè)Q取空間,但是在一些用戶獨(dú)有數(shù)據(jù)的處理算法上可能還是會(huì)考慮到空間的節(jié)省問(wèn)題。
4. 有的時(shí)候我們會(huì)用一些聚合表來(lái)存放聚合數(shù)據(jù),也就是進(jìn)行一些預(yù)計(jì)算提高復(fù)雜計(jì)算(比如報(bào)表)的性能。當(dāng)然,對(duì)于數(shù)據(jù)分析,構(gòu)建多維數(shù)據(jù)庫(kù)也是一種不錯(cuò)的選擇。
有很多網(wǎng)友留言說(shuō)說(shuō)的比較粗,沒(méi)有什么具體的東西。我覺(jué)得架構(gòu)這個(gè)東西很難去說(shuō)具體怎么做,因?yàn)榫唧w實(shí)施的時(shí)候要看情況去應(yīng)用的,由于沒(méi)有完美的東西,所以做架構(gòu)通常是去做一個(gè)平衡,很可能某一個(gè)側(cè)重不同會(huì)影響到架構(gòu)的實(shí)施。希望我的這些文章能給大家一個(gè)提示的作用,看了之后如果你覺(jué)得“這點(diǎn)我倒沒(méi)有考慮到,以后要注意”那或許就是最大的幫助了,下面我想說(shuō)一些其它方面的問(wèn)題,每一條都很零散,算是一個(gè)補(bǔ)充吧:
1. 到底是采用已有的東西還是自己去做需要詳細(xì)考慮的,采用別人的東西可能比較穩(wěn)定,但是自己的控制少了一點(diǎn),采用自己做的東西可以很靈活,但是可能會(huì)問(wèn)題比較多。不管怎么樣,我們?cè)诓捎靡粋€(gè)第三方框架的時(shí)候務(wù)必要進(jìn)行縝密的調(diào)查,看到他的不足,否則項(xiàng)目很可能在后期被這個(gè)框架制約,反之,決定自己去做一個(gè)框架的時(shí)候也要看到自己需要什么其他框架不能提供的東西。
2. 數(shù)據(jù)傳輸?shù)臅r(shí)候可以做壓縮,但要考慮到壓縮解壓縮需要CPU資源,在IO(磁盤(pán),帶寬,傳輸能力)和CPU之間有一個(gè)平衡的考慮。
3. 理想的可伸縮性架構(gòu)是可以自由增加或替換服務(wù)器,無(wú)需去停機(jī)維護(hù)或做很大的調(diào)整。在使用一個(gè)統(tǒng)一的調(diào)度中心來(lái)調(diào)度這些服務(wù)器,分配請(qǐng)求的時(shí)候,我們要考慮一下調(diào)度服務(wù)器能承受多少流量。
4. 使用大量的廉價(jià)服務(wù)器還是少量的高配服務(wù)器?如何根據(jù)需求來(lái)組合服務(wù)器發(fā)揮最大作用。
5. 對(duì)于分布式構(gòu)架,我們盡量讓每一個(gè)節(jié)點(diǎn)保持簡(jiǎn)單的邏輯,盡量減少同一層次節(jié)點(diǎn)之間的依賴,另外。需要有統(tǒng)一的地方來(lái)管理所有的節(jié)點(diǎn)。
6. 功能分解、使用異步進(jìn)行整合、故障轉(zhuǎn)移、失效保護(hù)。
7. 軟件的架構(gòu)升級(jí)和計(jì)算機(jī)硬件的架構(gòu)升級(jí)很像,可能有一段時(shí)期,我們是在慢慢提高整體能力,2年也才提高了幾倍,之后發(fā)現(xiàn)只有通過(guò)某種徹底的架構(gòu)改變才能提高數(shù)十倍的能力,升級(jí)之后,我們或許又會(huì)遇到其他問(wèn)題。就像CPU,是簡(jiǎn)單提高主頻還是徹底更換架構(gòu)。
8. 數(shù)據(jù)方面,讀寫(xiě)分離、數(shù)據(jù)庫(kù)分隔、功能劃分、緩存、鏡像。
9. 硬件網(wǎng)絡(luò)上的架構(gòu)很重要,但軟件開(kāi)發(fā)中的一些細(xì)節(jié)不可忽略,好的架構(gòu)不意味著不需要代碼審閱。

大型網(wǎng)站的架構(gòu)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論