大型網(wǎng)站數(shù)據(jù)庫優(yōu)化及淺析大型網(wǎng)站的架構

大型網(wǎng)站數(shù)據(jù)庫優(yōu)化及淺析大型網(wǎng)站的架構

2015-03-27 09?

千萬人同時訪問的網(wǎng)站,一般是有很多個數(shù)據(jù)庫同時工作么鹤,說明白一點就是數(shù)據(jù)庫集群和并發(fā)控制案狠,這樣的網(wǎng)站實時性也是相對的磕昼。這些網(wǎng)站都有一些共同的特點:數(shù)據(jù)量大壳坪,在線人數(shù)多,并發(fā)請求多掰烟,pageview高爽蝴,響應速度快∪移铮總結了一下各個大網(wǎng)站的架構蝎亚,主要提高效率及穩(wěn)定性的幾個地方包括:

1、程序

程序開發(fā)是一方面先馆,系統(tǒng)架構設計(硬件+網(wǎng)絡+軟件)是另一方面发框。

軟件架構方面,做網(wǎng)站首先需要很多web服務器存儲靜態(tài)資源煤墙,比如圖片梅惯、視頻、靜態(tài)頁等仿野,千萬不要把靜態(tài)資源和應用服務器放在一起铣减。

一個好的程序員寫出來的程序會非常簡潔、性能很好脚作,一個初級程序員可能會犯很多低級錯誤葫哗,這也是影響網(wǎng)站性能的原因之一。

網(wǎng)站要做到效率高球涛,不光是程序員的事情劣针,數(shù)據(jù)庫優(yōu)化、程序優(yōu)化這是必須的亿扁,在性能優(yōu)化上要數(shù)據(jù)庫和程序齊頭并進捺典!緩存也是兩方面同時入手。第一从祝,數(shù)據(jù)庫緩存和數(shù)據(jù)庫優(yōu)化襟己,這個由dba完成(而且這個有非常大的潛力可挖,只是由于我們都是程序員而忽略了他而已)哄褒。第二稀蟋,程序上的優(yōu)化,這個非常的有講究呐赡,比如說重要一點就是要規(guī)范SQL語句,少用in 多用or骏融,多用preparestatement链嘀,另外避免程序冗余如查找數(shù)據(jù)少用雙重循環(huán)等萌狂。另外選用優(yōu)秀的開源框架加以支持,我個人認為中后臺的支持是最最重要的怀泊,可以選取spring+ibatis茫藏。因為ibatis直接操作SQL并有緩存機制。spring的好處就不用我多說了霹琼,IOC的機制可以避免new對象务傲,這樣也節(jié)省開銷。據(jù)我分析枣申,絕大部分的開銷就是在NEW的時候和連接數(shù)據(jù)庫時候產(chǎn)生的售葡,請盡量避免。另外可以用一些內(nèi)存測試工具來做一個demo說明hibernate和ibatis誰更快忠藤!前臺你想用什么就用什么挟伙,struts,webwork都成,如果覺得自己挺牛X可以試試用tapestry模孩。

用數(shù)據(jù)庫也未必不能解決訪問量巨大所帶來的問題尖阔,作成靜態(tài)文件硬盤的尋址時間也未必少于數(shù)據(jù)庫的搜索時間,當然對資料的索引要下一翻工夫榨咐。我自己覺得門戶往往也就是當天介却、熱門的資料點擊率較高,將其做緩存最多也不過1~2G的數(shù)據(jù)量吧块茁,舉個例子:

◎ 拿網(wǎng)易新聞來說http://news.163.com/07/0606/09/3GA0D10N00011229.html

格式化一下筷笨,方便理解:http://域名/年/月日/新聞所屬分類/新聞ID.html

可以把當天發(fā)布的、熱門的龟劲、流攬量大的作個緩寸胃夏,用hashtable(key:年-月-日-分類-ID,value:新聞對象)昌跌,靜態(tài)將其放到內(nèi)存(速度絕對快過硬盤尋址靜態(tài)頁面)仰禀。

通常是采用oracle存儲過程+2個weblogic,更新機制也幾乎一樣每簽發(fā)一條新聞蚕愤,就會生成靜態(tài)頁面答恶,然后發(fā)往前端的web服務器,前端的web都是做負載均衡的萍诱。另外還有定時的程序悬嗓,每5-15分鐘自動生成一次。在發(fā)布新聞的同時將數(shù)據(jù)緩存裕坊。當然緩存也不會越來越大包竹,在個特定的時間段(如凌晨)剔除過期的數(shù)據(jù)。做一個大的網(wǎng)站遠沒有想象中那么簡單,服務器基本就要百十個的周瞎。

這樣可以大大增加一臺計算機的處理速度苗缩,如果一臺機器處理不了,可以用httpserver集群來解決問題了声诸。

2酱讶、網(wǎng)絡

中國的網(wǎng)絡分南北電信和網(wǎng)通,訪問的ip就要區(qū)分南北進入不同的網(wǎng)絡彼乌。

3泻肯、集群

通常會使用CDN與GSBL與DNS負載均衡技術,每個地區(qū)一組前臺服務器群慰照,例如:網(wǎng)易灶挟,百度使用了DNS負載均衡技術,每個頻道一組前臺服務器焚挠,一搜使用了DNS負載技術膏萧,所有頻道共用一組前臺服務器集群。

網(wǎng)站使用基于Linux集群的負載均衡蝌衔,失敗恢復榛泛,包括應用服務器和數(shù)據(jù)庫服務器,基于linux-ha的服務狀態(tài)檢測及高可用化噩斟。

應用服務器集群可以采用apache+tomcat集群和weblogic集群等曹锨;web服務器集群可以用反向代理,也可以用NAT的方式剃允,或者多域名解析都可以沛简;Squid也可以,方法很多斥废,可以根據(jù)情況選擇椒楣。

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

因為是千萬人同時訪問的網(wǎng)站,所以一般是有很多個數(shù)據(jù)庫同時工作的,說明白一點就是數(shù)據(jù)庫集群和并發(fā)控制片仿,數(shù)據(jù)分布到地理位置不同的數(shù)據(jù)中心,以免發(fā)生斷電事故毛俏。另外還有一點的是,那些網(wǎng)站的靜態(tài)化網(wǎng)頁并不是真的饲窿,而是通過動態(tài)網(wǎng)頁與靜態(tài)網(wǎng)頁網(wǎng)址交換做出現(xiàn)的假象煌寇,這可以用urlrewrite這樣的開源網(wǎng)址映射器實現(xiàn)。這樣的網(wǎng)站實時性也是相對的逾雄,因為在數(shù)據(jù)庫復制數(shù)據(jù)的時候有一個過程阀溶,一般在技術上可以用到hibernate和ecache腻脏,但是如果要使網(wǎng)站工作地更好,可以使用EJB和websphere淌哟,weblogic這樣大型的服務器來支持迹卢,并且要用oracle這樣的大型數(shù)據(jù)庫辽故。

大型門戶網(wǎng)站不建議使用Mysql數(shù)據(jù)庫徒仓,除非你對Mysql數(shù)據(jù)的優(yōu)化非常熟悉。Mysql數(shù)據(jù)庫服務器的master-slave模式誊垢,利用數(shù)據(jù)庫服務器在主從服務器間進行同步掉弛,應用只把數(shù)據(jù)寫到主服務器,而讀數(shù)據(jù)時則根據(jù)負載選擇一臺從服務器或者主服務器來讀取喂走,將數(shù)據(jù)按不同策略劃分到不同的服務器(組)上殃饿,分散數(shù)據(jù)庫壓力。

大型網(wǎng)站要用oracle芋肠,數(shù)據(jù)方面操作盡量多用存儲過程乎芳,絕對提升性能;同時要讓DBA對數(shù)據(jù)庫進行優(yōu)化帖池,優(yōu)化后的數(shù)據(jù)庫與沒優(yōu)化的有天壤之別奈惑;同時還可以擴展分布式數(shù)據(jù)庫,以后這方面的研究會越來越多睡汹;

5肴甸、頁面

從開始就考慮使用虛擬存儲/簇文件系統(tǒng)。它能讓你大量并行IO訪問囚巴,而且不需要任何重組就能夠增加所需要的磁盤原在。

頁面數(shù)據(jù)調(diào)用更要認真設計,一些數(shù)據(jù)查詢可以不通過數(shù)據(jù)庫的方式彤叉,實時性要求不高的可以使用lucene來實現(xiàn)庶柿,即使有實時性的要求也可以用lucene,lucene+compass還是非常優(yōu)秀的秽浇。

新聞類的網(wǎng)站可以用靜態(tài)頁存儲浮庐,采用定時更新機制減輕服務器負擔;首頁每個小模塊可以使用oscache緩存兼呵,這樣不用每次都拉數(shù)據(jù)兔辅。

前端的基于靜態(tài)頁面緩存的web加速器,主要應用有squid等击喂。squid 將大部分靜態(tài)資源(圖片维苔,js,css等)緩存起來懂昂,直接返回給訪問者介时,減少應用服務器的負載

網(wǎng)站的靜態(tài)化網(wǎng)頁并不是真的,而是通過動態(tài)網(wǎng)頁與靜態(tài)網(wǎng)頁網(wǎng)址交換做出現(xiàn)的假象,這可以用urlrewrite這樣的開源網(wǎng)址映射器實現(xiàn)沸柔,后綴名為htm或者html并不能說明程序生成了靜態(tài)頁面循衰,可能是通過url重寫來實現(xiàn)的,為的只不過是在搜索引擎中提升自己網(wǎng)站的覆蓋面積罷了褐澎。

生成靜態(tài)頁面的服務器和www服務器是兩組不同的服務器会钝,頁面生成后才會到www服務器,一部分數(shù)據(jù)庫并不是關系數(shù)據(jù)庫工三,這樣更適合信息衍生迁酸,www、mail服務器俭正、路由器多奸鬓,主要用負載平衡解決訪問瓶頸。

◎ 靜態(tài)頁面的缺點:

1) 增加了程序的復雜度

2) 不利于管理資料

3) 速度不是最快

4) 傷硬盤

6掸读、緩存

從一開始就應該使用緩存串远,高速緩存是一個更好的地方存儲臨時數(shù)據(jù),比如Web站點上跟蹤一個特定用戶的會話產(chǎn)生的臨時文件儿惫,就不再需要記錄到數(shù)據(jù)庫里澡罚。

不能用lucene實現(xiàn)的可以用緩存,分布式緩存可以用memcached姥闪,如果有錢的話用10來臺機器做緩存始苇,> 10G的存儲量相信存什么都夠了;如果沒錢的話可以在頁面緩存和數(shù)據(jù)緩存上下功夫筐喳,多用OSCACHE和EHCACHE催式,SWARMCACHE也可以,不過據(jù)說同步性不是很好避归;

可以使用Memcache進行緩存荣月,用大內(nèi)存把這些不變的數(shù)據(jù)全都緩存起來,而當修改時就通知cache過期梳毙,memcache是LJ開發(fā)的一款分布式緩存產(chǎn)品哺窄,很多大型網(wǎng)站在應用,我們可以把Cache Server與App Server裝在一起账锹。因為Cache Server對CPU消耗不大萌业,而有了Cache Server的支援,App Server對內(nèi)存要求也不是太高奸柬,所以可以和平共處生年,更有效的利用資源。

以上一些不太成熟的想法廓奕,可以從某一個層次開始抱婉,逐步細化档叔,把產(chǎn)品的性能指標提高上去。

2009-06-19 10:24:35

淺析大型網(wǎng)站的架構

一個小型的網(wǎng)站蒸绩,比如個人網(wǎng)站衙四,可以使用最簡單的html靜態(tài)頁面就實現(xiàn)了,配合一些圖片達到美化效果患亿,所有的頁面均存放在一個目錄下传蹈,這樣的網(wǎng)站對系統(tǒng)架構、性能的要求都很簡單窍育,隨著互聯(lián)網(wǎng)業(yè)務的不斷豐富卡睦,網(wǎng)站相關的技術經(jīng)過這些年的發(fā)展宴胧,已經(jīng)細分到很細的方方面面漱抓,尤其對于大型網(wǎng)站來說,所采用的技術更是涉及面非常廣恕齐,從硬件到軟件乞娄、編程語言、數(shù)據(jù)庫显歧、WebServer仪或、防火墻等各個領域都有了很高的要求,已經(jīng)不是原來簡單的html靜態(tài)網(wǎng)站所能比擬的士骤。

大型網(wǎng)站范删,比如門戶網(wǎng)站。在面對大量用戶訪問拷肌、高并發(fā)請求方面到旦,基本的解決方案集中在這樣幾個環(huán)節(jié):使用高性能的服務器、高性能的數(shù)據(jù)庫巨缘、高效率的編程語言添忘、還有高性能的Web容器。但是除了這幾個方面若锁,還沒法根本解決大型網(wǎng)站面臨的高負載和高并發(fā)問題搁骑。

上面提供的幾個解決思路在一定程度上也意味著更大的投入,并且這樣的解決思路具備瓶頸又固,沒有很好的擴展性仲器,下面我從低成本、高性能和高擴張性的角度來說說我的一些經(jīng)驗仰冠。

1乏冀、HTML靜態(tài)化

其實大家都知道,效率最高沪停、消耗最小的就是純靜態(tài)化的html頁面煤辨,所以我們盡可能使我們的網(wǎng)站上的頁面采用靜態(tài)頁面來實現(xiàn)裳涛,這個最簡單的方法其實也是最有效的方法。但是對于大量內(nèi)容并且頻繁更新的網(wǎng)站众辨,我們無法全部手動去挨個實現(xiàn)端三,于是出現(xiàn)了我們常見的信息發(fā)布系統(tǒng)CMS,像我們常訪問的各個門戶站點的新聞頻道鹃彻,甚至他們的其他頻道郊闯,都是通過信息發(fā)布系統(tǒng)來管理和實現(xiàn)的,信息發(fā)布系統(tǒng)可以實現(xiàn)最簡單的信息錄入自動生成靜態(tài)頁面蛛株,還能具備頻道管理团赁、權限管理、自動抓取等功能谨履,對于一個大型網(wǎng)站來說欢摄,擁有一套高效、可管理的CMS是必不可少的笋粟。

除了門戶和信息發(fā)布類型的網(wǎng)站怀挠,對于交互性要求很高的社區(qū)類型網(wǎng)站來說,盡可能的靜態(tài)化也是提高性能的必要手段害捕,將社區(qū)內(nèi)的帖子绿淋、文章進行實時的靜態(tài)化,有更新的時候再重新靜態(tài)化也是大量使用的策略尝盼,像Mop的大雜燴就是使用了這樣的策略吞滞,網(wǎng)易社區(qū)等也是如此。

同時盾沫,html靜態(tài)化也是某些緩存策略使用的手段裁赠,對于系統(tǒng)中頻繁使用數(shù)據(jù)庫查詢但是內(nèi)容更新很小的應用,可以考慮使用html靜態(tài)化來實現(xiàn)疮跑,比如論壇中論壇的公用設置信息组贺,這些信息目前的主流論壇都可以進行后臺管理并且存儲再數(shù)據(jù)庫中,這些信息其實大量被前臺程序調(diào)用祖娘,但是更新頻率很小失尖,可以考慮將這部分內(nèi)容進行后臺更新的時候進行靜態(tài)化,這樣避免了大量的數(shù)據(jù)庫訪問請求渐苏。

2掀潮、圖片服務器分離

大家知道,對于Web服務器來說琼富,不管是Apache仪吧、IIS還是其他容器,圖片是最消耗資源的鞠眉,于是我們有必要將圖片與頁面進行分離薯鼠,這是基本上大型網(wǎng)站都會采用的策略择诈,他們都有獨立的圖片服務器,甚至很多臺圖片服務器出皇。這樣的架構可以降低提供頁面訪問請求的服務器系統(tǒng)壓力羞芍,并且可以保證系統(tǒng)不會因為圖片問題而崩潰,在應用服務器和圖片服務器上郊艘,可以進行不同的配置優(yōu)化荷科,比如apache在配置ContentType的時候可以盡量少支持,盡可能少的 LoadModule纱注,保證更高的系統(tǒng)消耗和執(zhí)行效率畏浆。

3、數(shù)據(jù)庫集群和庫表散列

大型網(wǎng)站都有復雜的應用狞贱,這些應用必須使用數(shù)據(jù)庫刻获,那么在面對大量訪問的時候,數(shù)據(jù)庫的瓶頸很快就能顯現(xiàn)出來斥滤,這時一臺數(shù)據(jù)庫將很快無法滿足應用将鸵,于是我們需要使用數(shù)據(jù)庫集群或者庫表散列。

在數(shù)據(jù)庫集群方面佑颇,很多數(shù)據(jù)庫都有自己的解決方案,Oracle草娜、Sybase等都有很好的方案挑胸,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什么樣的DB宰闰,就參考相應的解決方案來實施即可茬贵。

上面提到的數(shù)據(jù)庫集群由于在架構、成本移袍、擴張性方面都會受到所采用DB類型的限制解藻,于是我們需要從應用程序的角度來考慮改善系統(tǒng)架構,庫表散列是常用并且最有效的解決方案葡盗。我們在應用程序中安裝業(yè)務和應用或者功能模塊將數(shù)據(jù)庫進行分離螟左,不同的模塊對應不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進行更小的數(shù)據(jù)庫散列觅够,比如用戶表胶背,按照用戶ID進行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴展性喘先。sohu的論壇就是采用了這樣的架構钳吟,將論壇的用戶、設置窘拯、帖子等信息進行數(shù)據(jù)庫分離红且,然后對帖子坝茎、用戶按照板塊和ID進行散列數(shù)據(jù)庫和表,最終可以在配置文件中進行簡單的配置便能讓系統(tǒng)隨時增加一臺低成本的數(shù)據(jù)庫進來補充系統(tǒng)性能暇番。

4景东、緩存Top

緩存一詞搞技術的都接觸過,很多地方用到緩存奔誓。網(wǎng)站架構和網(wǎng)站開發(fā)中的緩存也是非常重要斤吐。這里先講述最基本的兩種緩存。高級和分布式的緩存在后面講述厨喂。

架構方面的緩存和措,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存蜕煌,這兩種方式均可以有效的提高Apache的訪問響應能力派阱。

網(wǎng)站程序開發(fā)方面的緩存,Linux上提供的Memory Cache是常用的緩存接口斜纪,可以在web開發(fā)中使用贫母,比如用Java開發(fā)的時候就可以調(diào)用MemoryCache對一些數(shù)據(jù)進行緩存和通訊共享,一些大型社區(qū)使用了這樣的架構盒刚。另外腺劣,在使用web語言開發(fā)的時候,各種語言基本都有自己的緩存模塊和方法因块,PHP有Pear的Cache模塊橘原,Java就更多了,.net不是很熟悉涡上,相信也肯定有趾断。

5、鏡像Top

鏡像是大型網(wǎng)站常采用的提高性能和數(shù)據(jù)安全性的方式吩愧,鏡像的技術可以解決不同網(wǎng)絡接入商和地域帶來的用戶訪問速度差異芋酌,比如ChinaNet和EduNet 之間的差異就促使了很多網(wǎng)站在教育網(wǎng)內(nèi)搭建鏡像站點,數(shù)據(jù)進行定時更新或者實時更新雁佳。在鏡像的細節(jié)技術方面脐帝,這里不闡述太深,有很多專業(yè)的現(xiàn)成的解決架構和產(chǎn)品可選甘穿。也有廉價的通過軟件實現(xiàn)的思路腮恩,比如Linux上的rsync等工具。

6温兼、負載均衡Top

負載均衡將是大型網(wǎng)站解決高負荷訪問和大量并發(fā)請求采用的終極解決辦法秸滴。

負載均衡技術發(fā)展了多年,有很多專業(yè)的服務提供商和產(chǎn)品可以選擇募判,我個人接觸過一些解決方法荡含,其中有兩個架構可以給大家做參考咒唆。

硬件四層交換

第四層交換使用第三層和第四層信息包的報頭信息,根據(jù)應用區(qū)間識別業(yè)務流释液,將整個區(qū)間段的業(yè)務流分配到合適的應用服務器進行處理全释。 第四層交換功能就象是虛 IP误债,指向物理服務器浸船。它傳輸?shù)臉I(yè)務服從的協(xié)議多種多樣,有HTTP寝蹈、FTP李命、NFS、Telnet或其他協(xié)議箫老。這些業(yè)務在物理服務器基礎上封字,需要復雜的載量平衡算法。在IP世界耍鬓,業(yè)務類型由終端TCP或UDP端口地址來決定阔籽,在第四層交換中的應用區(qū)間則由源端和終端IP地址、TCP和UDP端口共同決定牲蜀。

在硬件四層交換產(chǎn)品領域笆制,有一些知名的產(chǎn)品可以選擇,比如Alteon各薇、F5等项贺,這些產(chǎn)品很昂貴,但是物有所值峭判,能夠提供非常優(yōu)秀的性能和很靈活的管理能力。Yahoo中國當初接近2000臺服務器使用了三四臺Alteon就搞定了棕叫。

軟件四層交換

大家知道了硬件四層交換機的原理后林螃,基于OSI模型來實現(xiàn)的軟件四層交換也就應運而生,這樣的解決方案實現(xiàn)的原理一致俺泣,不過性能稍差疗认。但是滿足一定量的壓力還是游刃有余的,有人說軟件實現(xiàn)方式其實更靈活伏钠,處理能力完全看你配置的熟悉能力横漏。

軟件四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server熟掂,他提供了基于心跳線heartbeat的實時災難應對解決方案缎浇,提高系統(tǒng)的魯棒性,同時可供了靈活的虛擬VIP配置和管理功能赴肚,可以同時滿足多種應用需求素跺,這對于分布式的系統(tǒng)來說必不可少二蓝。

一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集群指厌,這種思路在很多大型網(wǎng)站包括搜索引擎上被采用刊愚,這樣的架構低成本、高性能還有很強的擴張性踩验,隨時往架構里面增減節(jié)點都非常容易鸥诽。這樣的架構我準備空了專門詳細整理一下和大家探討。

對于大型網(wǎng)站來說箕憾,前面提到的每個方法可能都會被同時使用到牡借,我這里介紹得比較淺顯,具體實現(xiàn)過程中很多細節(jié)還需要大家慢慢熟悉和體會厕九,有時一個很小的squid參數(shù)或者apache參數(shù)設置蓖捶,對于系統(tǒng)性能的影響就會很大,希望大家一起討論扁远,達到拋磚引玉之效俊鱼。

淺談大型網(wǎng)站動態(tài)應用系統(tǒng)架構

原文來自:百度網(wǎng)友

動態(tài)應用,是相對于網(wǎng)站靜態(tài)內(nèi)容而言畅买,是指以c/c++并闲、php、Java谷羞、perl帝火、.net等服務器端語言開發(fā)的網(wǎng)絡應用軟件,比如論壇湃缎、網(wǎng)絡相冊犀填、交友、BLOG等常見應用嗓违。動態(tài)應用系統(tǒng)通常與數(shù)據(jù)庫系統(tǒng)九巡、緩存系統(tǒng)、分布式存儲系統(tǒng)等密不可分蹂季。

大型動態(tài)應用系統(tǒng)平臺主要是針對于大流量冕广、高并發(fā)網(wǎng)站建立的底層系統(tǒng)架構。大型網(wǎng)站的運行需要一個可靠偿洁、安全撒汉、可擴展、易維護的應用系統(tǒng)平臺做為支撐涕滋,以保證網(wǎng)站應用的平穩(wěn)運行睬辐。

大型動態(tài)應用系統(tǒng)又可分為幾個子系統(tǒng):

l?????????Web前端系統(tǒng)

l?????????負載均衡系統(tǒng)

l?????????數(shù)據(jù)庫集群系統(tǒng)

l?????????緩存系統(tǒng)

l?????????分布式存儲系統(tǒng)

l?????????分布式服務器管理系統(tǒng)

l?????????代碼分發(fā)系統(tǒng)

Web前端系統(tǒng)

結構圖:

為了達到不同應用的服務器共享、避免單點故障、集中管理溉委、統(tǒng)一配置等目的鹃唯,不以應用劃分服務器,而是將所有服務器做統(tǒng)一使用瓣喊,每臺服務器都可以對多個應用提供服務坡慌,當某些應用訪問量升高時,通過增加服務器節(jié)點達到整個服務器集群的性能提高藻三,同時使他應用也會受益洪橘。該Web前端系統(tǒng)基于Apache/Lighttpd/Eginx等的虛擬主機平臺,提供PHP程序運行環(huán)境棵帽。服務器對開發(fā)人員是透明的熄求,不需要開發(fā)人員介入服務器管理

負載均衡系統(tǒng)

負載均衡系統(tǒng)分為硬件和軟件兩種。硬件負載均衡效率高逗概,但是價格貴弟晚,比如F5等。軟件負載均衡系統(tǒng)價格較低或者免費逾苫,效率較硬件負載均衡系統(tǒng)低卿城,不過對于流量一般或稍大些網(wǎng)站來講也足夠使用,比如lvs/nginx/haproxy铅搓。大多數(shù)網(wǎng)站都是硬件瑟押、軟件負載均衡系統(tǒng)并用。

數(shù)據(jù)庫集群系統(tǒng)

結構圖:

由于Web前端采用了負載均衡集群結構提高了服務的有效性和擴展性星掰,因此數(shù)據(jù)庫必須也是高可靠的才能保證整個服務體系的高可靠性多望,如何構建一個高可靠的、可以提供大規(guī)模并發(fā)處理的數(shù)據(jù)庫體系氢烘?

我們可以采用如上圖所示的方案:

1)????????使用?MySQL?數(shù)據(jù)庫怀偷,考慮到Web應用的數(shù)據(jù)庫讀多寫少的特點,我們主要對讀數(shù)據(jù)庫做了優(yōu)化播玖,提供專用的讀數(shù)據(jù)庫和寫數(shù)據(jù)庫枢纠,在應用程序中實現(xiàn)讀操作和寫操作分別訪問不同的數(shù)據(jù)庫。

2)????????使用?MySQL Replication?機制實現(xiàn)快速將主庫(寫庫)的數(shù)據(jù)庫復制到從庫(讀庫)黎棠。一個主庫對應多個從庫,主庫數(shù)據(jù)實時同步到從庫镰绎。

3)????????寫數(shù)據(jù)庫有多臺脓斩,每臺都可以提供多個應用共同使用,這樣可以解決寫庫的性能瓶頸問題和單點故障問題畴栖。

4)????????讀數(shù)據(jù)庫有多臺随静,通過負載均衡設備實現(xiàn)負載均衡,從而達到讀數(shù)據(jù)庫的高性能、高可靠和高可擴展性燎猛。

5)????????數(shù)據(jù)庫服務器和應用服務器分離恋捆。

6)????????從數(shù)據(jù)庫使用BigIP做負載均衡。

緩存系統(tǒng)

緩存分為文件緩存重绷、內(nèi)存緩存沸停、數(shù)據(jù)庫緩存。在大型Web應用中使用最多且效率最高的是內(nèi)存緩存昭卓。最常用的內(nèi)存緩存工具是Memcachd愤钾。使用正確的緩存系統(tǒng)可以達到實現(xiàn)以下目標:

1、???使用緩存系統(tǒng)可以提高訪問效率候醒,提高服務器吞吐能力能颁,改善用戶體驗。

2倒淫、???減輕對數(shù)據(jù)庫及存儲集服務器的訪問壓力

3伙菊、?Memcached服務器有多臺,避免單點故障敌土,提供高可靠性和可擴展性镜硕,提高性能。

分布式存儲系統(tǒng)

結構圖:

WEB系統(tǒng)平臺中的存儲需求有下面兩個特點:

1)?存儲量很大,經(jīng)常會達到單臺服務器無法提供的規(guī)模,比如相冊颈走、視頻等應用摊求。因此需要專業(yè)的大規(guī)模存儲系統(tǒng)。

2)?負載均衡cluster中的每個節(jié)點都有可能訪問任何一個數(shù)據(jù)對象已卸,每個節(jié)點對數(shù)據(jù)的處理也能被其他節(jié)點共享,因此這些節(jié)點要操作的數(shù)據(jù)從邏輯上看只能是一個整體,不是各自獨立的數(shù)據(jù)資源峰伙。

因此高性能的分布式存儲系統(tǒng)對于大型網(wǎng)站應用來說是非常重要的一環(huán)。(這個地方需要加入對某個分布式存儲系統(tǒng)的簡單介紹该默。)

分布式服務器管理系統(tǒng)

結構圖:

隨著網(wǎng)站訪問流量的不斷增加瞳氓,大多的網(wǎng)絡服務都是以負載均衡集群的方式對外提供服務,隨之集群規(guī)模的擴大栓袖,原來基于單機的服務器管理模式已經(jīng)不能夠滿足我們的需求匣摘,新的需求必須能夠集中式的、分組的裹刮、批量的音榜、自動化的對服務器進行管理,能夠批量化的執(zhí)行計劃任務捧弃。

在分布式服務器管理系統(tǒng)軟件中有一些比較優(yōu)秀的軟件赠叼,其中比較理想的一個是?Cfengine擦囊。它可以對服務器進行分組,不同的分組可以分別定制系統(tǒng)配置文件嘴办、計劃任務等配置瞬场。它是基于C/S?結構的,所有的服務器配置和管理腳本程序都保存在Cfengine Server上涧郊,而被管理的服務器運行著?Cfengine Client?程序贯被,Cfengine Client通過SSL加密的連接定期的向服務器端發(fā)送請求以獲取最新的配置文件和管理命令、腳本程序底燎、補丁安裝等任務刃榨。

有了Cfengine?這種集中式的服務器管理工具,我們就可以高效的實現(xiàn)大規(guī)模的服務器集群管理双仍,被管理服務器和?Cfengine Server?可以分布在任何位置枢希,只要網(wǎng)絡可以連通就能實現(xiàn)快速自動化的管理。

代碼發(fā)布系統(tǒng)

結構圖:

隨著網(wǎng)站訪問流量的不斷增加朱沃,大多的網(wǎng)絡服務都是以負載均衡集群的方式對外提供服務苞轿,隨之集群規(guī)模的擴大,為了滿足集群環(huán)境下程序代碼的批量分發(fā)和更新逗物,我們還需要一個程序代碼發(fā)布系統(tǒng)搬卒。

這個發(fā)布系統(tǒng)可以幫我們實現(xiàn)下面的目標:

1)?生產(chǎn)環(huán)境的服務器以虛擬主機方式提供服務,不需要開發(fā)人員介入維護和直接操作翎卓,提供發(fā)布系統(tǒng)可以實現(xiàn)不需要登陸服務器就能把程序分發(fā)到目標服務器契邀。

2)?我們要實現(xiàn)內(nèi)部開發(fā)、內(nèi)部測試失暴、生產(chǎn)環(huán)境測試坯门、生產(chǎn)環(huán)境發(fā)布的4個開發(fā)階段的管理,發(fā)布系統(tǒng)可以介入各個階段的代碼發(fā)布逗扒。

3)?我們需要實現(xiàn)源代碼管理和版本控制古戴,SVN可以實現(xiàn)該需求。

這里面可以使用常用的工具Rsync矩肩,通過開發(fā)相應的腳本工具實現(xiàn)服務器集群間代碼同步分發(fā)现恼。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黍檩,隨后出現(xiàn)的幾起案子叉袍,更是在濱河造成了極大的恐慌,老刑警劉巖刽酱,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦韭,死亡現(xiàn)場離奇詭異,居然都是意外死亡肛跌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衍慎,“玉大人转唉,你說我怎么就攤上這事∥壤Γ” “怎么了赠法?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乔夯。 經(jīng)常有香客問我砖织,道長,這世上最難降的妖魔是什么末荐? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任侧纯,我火速辦了婚禮,結果婚禮上甲脏,老公的妹妹穿的比我還像新娘眶熬。我一直安慰自己,他們只是感情好块请,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布娜氏。 她就那樣靜靜地躺著,像睡著了一般墩新。 火紅的嫁衣襯著肌膚如雪贸弥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天海渊,我揣著相機與錄音绵疲,去河邊找鬼。 笑死切省,一個胖子當著我的面吹牛最岗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朝捆,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼般渡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芙盘?” 一聲冷哼從身側響起驯用,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儒老,沒想到半個月后蝴乔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡驮樊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年薇正,在試婚紗的時候發(fā)現(xiàn)自己被綠了片酝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挖腰,死狀恐怖雕沿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猴仑,我是刑警寧澤审轮,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站辽俗,受9級特大地震影響疾渣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崖飘,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一榴捡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坐漏,春花似錦薄疚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躏筏,卻和暖如春板丽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趁尼。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工埃碱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酥泞。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓砚殿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芝囤。 傳聞我的和親對象是個殘疾皇子似炎,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)悯姊,斷路器羡藐,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 可伸縮性架構指的是:不改變網(wǎng)站的軟硬件設計,只通過改變部署的服務器數(shù)量就可以擴大或縮小網(wǎng)站的服務處理能力悯许。 大型網(wǎng)...
    deniro閱讀 2,713評論 4 52
  • 大型網(wǎng)站架構 網(wǎng)站架構包括:前端架構+應用層架構+服務層架構+存儲層架構+后臺架構+數(shù)據(jù)中心機房架構+安全架構+數(shù)...
    運維開發(fā)筆記閱讀 1,111評論 0 7
  • 性能既是客觀指標仆嗦,諸如響應時間、吞吐量等技術指標先壕;又是實際參與者的主觀感受瘩扼。 1 性能測試 性能測試是性能優(yōu)化的前...
    deniro閱讀 1,352評論 2 15
  • 概述 1 架構演化大型網(wǎng)站的關注指標高可用 高性能 易擴展 可伸縮 安全 大型網(wǎng)站的特點高并發(fā)谆甜,大流量 高可用 海...
    西西老師閱讀 2,819評論 0 12