擴展Web應用程序
一、概念
簡單的來說,如果一個系統可擴展,那么你可以通過擴展來提供系統的性能。這代表著系統能夠容納更高的負載、更大的數據集,并且系統是可維護的。擴展和語言、某項具體的技術都是無關的。擴展可以分為兩種:
1. 垂直擴展(stade up),通俗的說就是將某臺單一的機器的性能提升的更高,如添加內存、更換更強的處理器等等。
2. 水平擴展(out),通俗的說就是添加新的機器。
對比可以發現,水平擴展比垂直擴展有更強大的擴展性,可以說是“無限”擴展,畢竟單臺的機器的性能總是有限的,硬件的技術發展還趕不上web的發展。但同時,水平擴展也來了更高的維護成本。實際中,需要根據具體情況來尋求一個平衡點。
二、冗余
機器總可能會發生故障,而唯一的保證故障狀況下服務依然可用的辦法就是由多個硬件備份。備份可以分為熱備份和冷備份,注意的區別在于數據服務是否在線,數據在線服務的同時進行的備份成為熱備份。例如將mysql服務器關閉,然后拷貝數據文件到備份位置,則是典型的冷備份行為。
三、負載均衡
當我們使用了水平擴展之后,我們開始考慮新的問題了,如何將大量的請求“均衡”到我們的擴展機器上呢?
兩種負載均衡模式:有狀態(如有攜帶session)和無狀態
兩種負載均衡方式:硬件均衡和軟件均衡
硬件均衡比較簡單,通常接入一個設備即可,之后的均衡和故障檢測等等都由硬件自動完成。成本較高。
軟件均衡則是通過軟件來轉發各種請求,更加容易的定義轉發規則,有較多的開源產品選擇。
第四層和第七層
經常在負載均衡中看到第四層和第七層這兩個名詞。它們實際上是指它們各自工作時所處理的網絡協議的層數(使用ISO模型)。
第四層是數據傳輸層,包括TCP和UDP,第七層則是應用層,通常web中為HTTP應用。如Apache、nginx等支持第七層的均衡,而且可配置性都相當強大,能夠適應較復雜的應用。例如可以簡單的將流量分擔到各個負載機上,也可以定義一套業務規則,將應用劃分為不同的池,每個池處理某些固定規則的URL。
對比軟件均衡與硬件均衡,可以發現它們各自的優缺點:
1. 硬件均衡成本比較高,軟件均衡多數可以使用免費的開源軟件來實現。
2. 硬件均衡對于故障檢測比軟件均衡更加強大、快速。在采用硬件均衡時,一旦某臺機器出現故障,馬上就可以檢測出來并立即屏蔽。
3. 硬件均衡可以快速的添加機器(接入硬件接口即可),而軟件均衡除了添加機器外還要添加一些配置信息,以將某些流量導入到新的機器。
4. 軟件均衡可以定義非常復雜的業務規則,而硬件均衡在這方面相對較弱。
5. 多數的硬件均衡方案都有捆綁附加的一些服務如HTTPS加速、DOS防火墻等等。
還有一種比較流行的方案:DNS解析。這種方式對解決用戶分布在不同地理位置、不同網絡的情況有著相當好的效果,每個用戶都可以根據自己的網絡得到一個較快速的訪問IP。缺點也比較明顯:DNS更新緩慢,對于實時性的均衡幾乎沒有什么作用,因為DNS的更新往往需要一兩個小時,甚至一兩天。
四、使用緩存
使用緩存將某些實時性要求不高的服務結果緩存起來是大型應用解決方案的一個共識,合理的使用緩存將極大的改善應用體驗和性能。
常用的幾類緩存:
緩存數據:memcached memcachedb
緩存HTTP請求: squid
用戶瀏覽器緩存
說說大型高并發高負載網站的系統架構
發布:倪海濤
來自:BudiChina.com
更新:2010-03-15 11:53:58
轉帖:http://www.toplee.com/blog/71.html
摘要:一個小型的網站,比如個人網站,可以使用最簡單的html靜態頁面就實現了。隨著互聯網業務的不斷豐富,網站相關的技術經過這些年的發展,已經細分到很細的方方面面,尤其對于大型網站來說,所采用的技術更是涉及面非常廣,從硬件到軟件、編程語言、數據庫、WebServer、防火墻等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站所能比擬的。
前言
鄙人先后在CERNET做過撥號接入,在Yahoo&3721搞過搜索前端,在貓撲處理過mop.com的架構升級,在6.cn視頻網站從事開發工作,還在多年的工作中接觸和開發過不少大中型網站的模塊,因此在大型網站應對高負載和并發的解決方案上有一些積累和經驗,希望和大家一起探討。
一個小型的網站,比如個人網站,可以使用最簡單的html靜態頁面就實現了,配合一些圖片達到美化效果,所有的頁面均存放在一個目錄下,這樣的網站對系統架構、性能的要求都很簡單,隨著互聯網業務的不斷豐富,網站相關的技術經過這些年的發展,已經細分到很細的方方面面,尤其對于大型網站來說,所采用的技術更是涉及面非常廣,從硬件到軟件、編程語言、數據庫、WebServer、防火墻等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站所能比擬的。
大型網站,比如門戶網站。在面對大量用戶訪問、高并發請求方面,基本的解決方案集中在這樣幾個環節:使用高性能的服務器、高性能的數據庫、高效率的編程語言、還有高性能的Web容器。但是除了這幾個方面,還沒法根本解決大型網站面臨的高負載和高并發問題。
上面提供的幾個解決思路在一定程度上也意味著更大的投入,并且這樣的解決思路具備瓶頸,沒有很好的擴展性,下面我從低成本、高性能和高擴張性的角度來說說我的一些經驗。
1、HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面采用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。但是對于大量內容并且頻繁更新的網站,我們無法全部手動去挨個實現,于是出現了我們常見的信息發布系統CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、權限管理、自動抓取等功能,對于一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
原文轉自:http://blogread.cn/it/article/1504?f=wb