資源描述:
《淺談web網(wǎng)站架構(gòu)演變過程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、淺談web網(wǎng)站架構(gòu)演變過程刖B我們以javaweb為例,來搭建一個(gè)簡單的電商系統(tǒng),看看這個(gè)系統(tǒng)可以如何一步步演變。該系統(tǒng)具備的功能:?■■?用戶模塊:用戶注冊和管理商品模塊:商品展示和管理交易模塊:創(chuàng)建交易和管理階段一、單機(jī)構(gòu)建網(wǎng)站網(wǎng)站的初期,我們經(jīng)常會(huì)在單機(jī)上跑我們所有的程序和軟件。此時(shí)我們使用一個(gè)容器,如tomcat>jetty、jboos,然后直接使用JSP/servlet技術(shù),或者使用一些開源的框架如maven+spring+struct+hibernate>maven+spring+springmvc+mybatis;最后再選擇一個(gè)數(shù)據(jù)庫管理系統(tǒng)來存儲(chǔ)數(shù)據(jù),如my
2、sqLsqlserver、oracle,然后通過JDBC進(jìn)行數(shù)據(jù)庫的連接和操作。把以上的所有軟件都裝載同一臺(tái)機(jī)器上,應(yīng)用跑起來了,也算是一個(gè)小系統(tǒng)了。此時(shí)系統(tǒng)結(jié)果如下:階段二、應(yīng)用服務(wù)器與數(shù)據(jù)庫分離隨著網(wǎng)站的上線,訪問量逐步上升,服務(wù)器的負(fù)載慢慢提高,在服務(wù)器還沒有超載的時(shí)候,我們應(yīng)該就要做好準(zhǔn)備,提升網(wǎng)站的負(fù)載能力。假如我們代碼層面已難以優(yōu)化,在不提高單臺(tái)機(jī)器的性能的情況下,增加機(jī)器是一個(gè)不錯(cuò)的方式,不僅可以有效地提高系統(tǒng)的負(fù)載能力,而且性價(jià)比高。增加的機(jī)器用來做什么呢?此時(shí)我們可以把數(shù)據(jù)庫,web服務(wù)器拆分開來,這樣不僅提高了單臺(tái)機(jī)器的負(fù)載能力,也提高了容災(zāi)能力。應(yīng)用服
3、務(wù)器與數(shù)據(jù)庫分開后的架構(gòu)如下圖所示:階段三、應(yīng)用服務(wù)器集群隨著訪問量繼續(xù)增加,單臺(tái)應(yīng)用服務(wù)器己經(jīng)無法滿足需求了。在假設(shè)數(shù)據(jù)庫服務(wù)器沒有壓力的情況下,我們可以把應(yīng)用服務(wù)器從一臺(tái)變成了兩臺(tái)甚至多臺(tái),把用戶的請求分散到不同的服務(wù)器屮,從而提高負(fù)載能力。多臺(tái)應(yīng)用服務(wù)器之間沒有直接的交互,他們都是依賴數(shù)據(jù)庫各自對外提供服務(wù)。著名的做故障切換的軟件有keepalived,keepalived是一個(gè)類似于layers.4.7交換機(jī)制的軟件,他不是某個(gè)具體軟件故障切換的專屬品,而是可以適用于各種軟件的一款產(chǎn)品。keepalived配合上ipvsadm又可以做負(fù)載均衡,可謂是神器。我們以增加
4、了一臺(tái)應(yīng)用服務(wù)器為例,增加后的系統(tǒng)結(jié)構(gòu)圖如下:系統(tǒng)演變到這里,將會(huì)出現(xiàn)下面四個(gè)問題:1.用戶的請求由誰來轉(zhuǎn)發(fā)到到具體的應(yīng)用服務(wù)器2.有什么轉(zhuǎn)發(fā)的算法3.應(yīng)用服務(wù)器如何返回用戶的請求4.用戶如果每次訪問到的服務(wù)器不一樣,那么如何維護(hù)session的一致性我們來看看解決問題的方案:11、http重定向。HTTP重定向就是應(yīng)用層的請求轉(zhuǎn)發(fā)。用戶的請求其實(shí)已經(jīng)到了HTTP重定向負(fù)載均衡服務(wù)器,服務(wù)器根據(jù)算法要求用戶重定向,用戶收到重定向請求后,再次請求真正的集群優(yōu)點(diǎn):簡單。缺點(diǎn):性能較差。2、DNS域名解析負(fù)載均衡。DNS域名解析負(fù)載均衡就是在用戶請求DNS服務(wù)器,獲取域名對應(yīng)的I
5、P地址時(shí),DNS服務(wù)器直接給出負(fù)載均衡后的服務(wù)器IPo優(yōu)點(diǎn):交給DNS,不用我們?nèi)ゾS護(hù)負(fù)載均衡服務(wù)器。缺點(diǎn):當(dāng)一個(gè)應(yīng)用服務(wù)器掛了,不能及時(shí)通知DNS,而<DNS負(fù)載均衡的控制權(quán)在域名服務(wù)商那里,網(wǎng)站無法做更多的改善和更強(qiáng)大的管理。3、反向代理服務(wù)器。在用戶的請求到達(dá)反向代理服務(wù)器時(shí)(己經(jīng)到達(dá)網(wǎng)站機(jī)房),由反向代理服務(wù)器根據(jù)算法轉(zhuǎn)發(fā)到具體的服務(wù)器。常用的apache,nginx都可以充當(dāng)反向代理服務(wù)器。優(yōu)點(diǎn):部署簡單。缺點(diǎn):代理服務(wù)器可能成為性能的瓶頸,特別是一次上傳大文件。4、IP層負(fù)載均衡。在請求到達(dá)負(fù)載均衡器后,負(fù)載均衡器通過修改請求的目的IP地址,從而實(shí)現(xiàn)請求的轉(zhuǎn)發(fā),
6、做到負(fù)載均衡。優(yōu)點(diǎn):性能更好。缺點(diǎn):負(fù)載均衡器的寬帶成為瓶頸。5、數(shù)據(jù)鏈路層負(fù)載均衡。在請求到達(dá)負(fù)載均衡器后,負(fù)載均衡器通過修改請求的mac地址,從而做到負(fù)載均衡,與IP負(fù)載均衡不一樣的是,當(dāng)請求訪問完服務(wù)器Z后,直接返回客戶。而無需再經(jīng)過負(fù)載均衡器。2、第二個(gè)問題即是集群調(diào)度算法問題,常見的調(diào)度算法有10種。1>rr輪詢調(diào)度算法。顧名思義,輪詢分發(fā)請求。優(yōu)點(diǎn):實(shí)現(xiàn)簡單缺點(diǎn):不考慮毎臺(tái)服務(wù)器的處理能力2、wrr加權(quán)調(diào)度算法。我們給每個(gè)服務(wù)器設(shè)置權(quán)值weight,負(fù)載均衡調(diào)度器根據(jù)權(quán)值調(diào)度服務(wù)器,服務(wù)器被調(diào)用的次數(shù)跟權(quán)值成正比。優(yōu)點(diǎn):考慮了服務(wù)器處理能力的不同3、sh原地址散
7、列:提取用戶IP,根據(jù)散列函數(shù)得出一個(gè)key,再根據(jù)靜態(tài)映射表,查處對應(yīng)的value,即目標(biāo)服務(wù)器IP。過目標(biāo)機(jī)器超負(fù)荷,則返回空。4、dh目標(biāo)地址散列:同上,只是現(xiàn)在提取的是目標(biāo)地址的IP來做哈希。優(yōu)點(diǎn):以上兩種算法的都能實(shí)現(xiàn)同一個(gè)用戶訪問同一個(gè)服務(wù)器。5、lc最少連接。優(yōu)先把請求轉(zhuǎn)發(fā)給連接數(shù)少的服務(wù)器。優(yōu)點(diǎn):使得集群中各個(gè)服務(wù)器的負(fù)載更加均勻。6、wlc加權(quán)最少連接。在lc的基礎(chǔ)上,為每臺(tái)服務(wù)器加上權(quán)值。算法為:(活動(dòng)連接數(shù)*256+非活動(dòng)連接數(shù))一權(quán)重,計(jì)算出來的值小的服務(wù)器優(yōu)先被選擇。優(yōu)點(diǎn):可以根據(jù)服務(wù)器的