高性能架構各層中間件應用及特點-個人整理


高性能的網站架構離不開各層中間件的支持,作為一個成長中的架構師,富有創造力固然很重要,但是博覽各家之架構,集各家之所長,拓展眼界,不斷進步無疑是同樣重要的,看多了各大型互聯網的架構,其實多多少少都離不開下面列到的一些東西,所謂萬變不離其宗,這些就好比各種兵器,作為一個武林高手,18般武器還是多少要熟悉一些的。下面是我的一些整理,有些實戰過,有些只是初步研究:

高性能網站的架構如下圖:

 

1.最前端負載均衡層

硬件負載均衡:

NetScalerF5RadwareArray:優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網絡服務來說暫時還沒有需要使用。

軟件負載均衡:

LVS:采用persistent機制(NAT/TUN/DR),工作在網絡4之上僅作分發之用,高抗負載,易配置,穩定性強,但對網絡要求較高,且不支持正則,不能做動靜分離。

Nginx:采用ip_hash機制,工作在網絡7之上,網絡依賴小,支持靈活正則表達,能通過端口檢測到服務器內部故障,但不支持url檢測,而且僅能支持httpEmail

HA-Proxy:采用balance source機制,工作在網絡第4層和第7,純負載軟件,支持虛擬主機,能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作,並且支持url檢測,負載效率和並發處理優於Nginx,它跟LVSpersistentNginxip_hash一樣,是讓客戶機訪問時始終訪問后端的某一台真實的web服務器。 

 

2.代理緩存層

代理緩存主要部署在web server之上,當用戶對網站后台發起連接請求時,用戶請求先到代理緩存中去查找,如果命中,則將請求返回給用戶,如果沒有命中,則代理緩存將請求發到 web server,然后web sever將請求復制一份到代理緩存中,同時把請求返回給客戶。常用的代理緩存有varnishsquid

Varnish將所有的HTTP object存於一個單獨的大文件中,該文件在工作進程初始化的時候,將其整個映射到內存中。這樣Varnish在該塊內存中實現一個簡單的文件系統,具有分配、釋放、修剪、合並內存等功能。其工作進程分為master進程和child進程,master進程負責初始化及fork並監控child進程,而child進程分配若干線程(Accept線程,Work線程,Epoll監聽線程,Expire過期處理線程)

Squid每一台Squid代理服務器上存有若干個顆磁盤。每顆磁盤又分割成多個分區,每一個分區又可建立很多目錄,目錄下存放着具體的文件(object)。其通過查詢表的方式來定位某個資源的位置。所查詢的表有兩種,一種是Hash table,一種是Digest tableHash table記錄着所有Digest table表信息,所以Hash table可以稱之為目錄或者提綱。而Digest table記錄了磁盤上每個分區、每個目錄里存放的緩存摘要,所以Digest table可以稱之為摘要或者索引。所以,Squid接到請求后先查詢Hashtable,根據Hash table所指向的Digest table,再查詢所需要的文件。

NginxNginx已經具備Squid所擁有的Web緩存加速功能,此外,Nginx對多核CPU的利用,勝過Squid不少,現在越來越來的架構師都喜歡將Nginx同時作為負載均衡服務器“Web緩存服務器來使用。 

3.Web Server

Web server的作用就是解析HTTP協議,通過用戶發來請求的url地址從web服務器的文件系統中找到用戶需要的HTML頁面、靜態文件,然后返回給用戶。如果用戶訪問的是動態頁面,則將請求轉發到應用服務器(其上部署了如CGI(Common Gateway Interface), JSP, Servlets, ASP.NETPHP腳本等)來執行。

Lighttpd一個單進程模型的web server,內存使用量很小,CPU占用率低,性能好的輕量級Web Server。支持FastCGI, CGI, 輸出壓縮,URL重寫,Alias等重要功能。使用FastCGI方式運行php

Apache是一款重量級的web服務器,也是世界上使用最多的web服務器,總體來講,Apache web 服務器具有以下特性:

  (1)  支持HTTP1.1通信協議。

  (2)  支持通用網關接口。

  (3)  支持基於ip、域名、端口的虛擬主機。

  (4)  支持服務器端包含指令(ssl)

  (5)  支持FastCGI

  (6)  支持url重寫。

Nginx使用多線程來處理請求,這使得多個線程之間可以共享內存資源,使用分階段的內存分配策略,按需分配,及時釋放,總體占用內存很小,可以支持較大的並發連接數。能夠選擇高效的epoll(Linux 2.6內核)kqueue(FreeBSD)eventport(Solaris 10)作為網絡I/O模型,在高連接並發的情況下,NginxApache服務器很好的替代者,因為在同樣並發連接的情況下,Nginx相對 Apache占用更少的系統資源。

4.應用服務器

Tomcat

websphere

JBoss

Weblogic

GlassFish

 

5.服務端緩存

Memcached是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。默認情況下采用名為Slab Allocator機制分配、管理內存。Slab Allocator的基本原理是將分配的內存分割成各種尺寸的塊(chunk),並將尺寸相同的塊分成組(chunk的集合)

 

6.文件服務器層

NFS:

 

熱備DRDB+HeartBeat+NFS:

 

MFS:

 

自主研發分布式文件系統:

淘寶TFS

7.數據庫

memcached數據緩存服務器:

 

Mysql主從復制,讀寫分離:

 

LVS+MySql集群:

當后面的MySQL機器超過十台時,HAProxy在這方面的性能不如LVS

水平分庫設計:

 

垂直分區設計:

 

 

 

 

 

 

 

 

 

 

 

 

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM