web相關(guān)

1、Nginx、haproxy、LVS三者的優(yōu)缺點(diǎn)

nginx

  • 工作在網(wǎng)絡(luò)7層上,可針對(duì)http應(yīng)用做一些分流的策略(域名、目錄結(jié)構(gòu)),相比之下lvs并不具備這樣的功能

  • Nginx對(duì)網(wǎng)絡(luò)的穩(wěn)定性依賴較小,安裝配置簡(jiǎn)單,LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性要求較高

  • 可以承擔(dān)高負(fù)載壓力且穩(wěn)定,一般能支撐幾萬次并發(fā)量(受限于IO和配置),不過不如LVS(幾十萬)

  • 可以檢測(cè)服務(wù)器內(nèi)部的故障,如服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時(shí)等,并會(huì)把返回錯(cuò)誤的請(qǐng)求提交到另外一個(gè)節(jié)點(diǎn)。而LVS不支持重發(fā)請(qǐng)求。

  • web服務(wù)器、反向代理服務(wù)器;

  • 適應(yīng)范圍較小,僅能支持http、https、Email協(xié)議

LVS

  • 抗負(fù)載能力強(qiáng),工作在網(wǎng)絡(luò)4層,僅做分發(fā)之用,沒有流量產(chǎn)生,對(duì)內(nèi)存CPU消耗比較低

  • 配置性低

  • 工作穩(wěn)定,因?yàn)楸旧砜关?fù)載能力強(qiáng),自身有完整的雙機(jī)熱備方案如LVS(DR)+keepalived

  • 應(yīng)用范圍廣,因?yàn)楣ぷ髟?層,幾乎可以對(duì)所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫(kù)、在線聊天室

  • 不支持正則表達(dá)式處理,不能做靜態(tài)分離

HAProxy

  • 可工作在4、7層(支持多網(wǎng)點(diǎn))
  • 支持session的保持,cookie的引導(dǎo);支持通過獲取指定的URL來檢測(cè)后端服務(wù)器的狀態(tài)
  • 負(fù)載均衡,并發(fā)處理優(yōu)于Nginx
  • 負(fù)載均衡策略多:輪詢、最少連接、源地址哈希、目標(biāo)地址哈希等
  • 不支持POP/SMTP協(xié)議
  • 不支持HTTP cache功能
  • 不支持熱加載配置文件

2、Nginx

多進(jìn)程結(jié)構(gòu),一個(gè)Master主進(jìn)程和Worker工作進(jìn)程
處理請(qǐng)求過程:(異步非堵塞型)

  • nginx啟動(dòng)是,master進(jìn)程,加載配置文件
  • master進(jìn)程,初始化監(jiān)聽的socket
  • master進(jìn)程,fork出多個(gè)worker進(jìn)程
  • worker進(jìn)程,競(jìng)爭(zhēng)新的鏈接,獲取方通過三次握手,建立socket鏈接,并處理請(qǐng)求
    (nginx接收一個(gè)請(qǐng)求后,首先由listen和server_name指令匹配server模塊,再匹配server模塊里的location,location就是實(shí)際地址)

master進(jìn)程

  • 監(jiān)控worker進(jìn)程的運(yùn)行狀態(tài)
  • 讀取nginx配置文件并驗(yàn)證有效性和正確性
  • 建立、綁定和關(guān)閉socket連接
  • 不中斷服務(wù),實(shí)現(xiàn)平滑升級(jí)等
  • 開啟日志文件,獲取文件描述符

worker進(jìn)程

  • 處理網(wǎng)絡(luò)請(qǐng)求
  • I/O調(diào)用,獲取響應(yīng)數(shù)據(jù)
  • 緩存數(shù)據(jù)等

主要模塊

  1. 核心模塊core module,提供錯(cuò)誤日志記錄,配置文件解析、事件驅(qū)動(dòng)機(jī)制、進(jìn)程管理等核心功能
  2. 標(biāo)準(zhǔn)模塊:HTTP(主要處理Flash多媒體傳輸、解析GeoIP請(qǐng)求、網(wǎng)絡(luò)傳輸壓縮、安全協(xié)議SSL支持)、Mail(郵件服務(wù),POP3、IMAP、SMTP協(xié)議)、Stream(反向代理,包括TCP協(xié)議代理)
  3. 第三方模塊:Json支持、Lua支持

事件驅(qū)動(dòng)
epoll是nginx支持的最高性能的事件驅(qū)動(dòng)庫(kù)之一。創(chuàng)建一個(gè)待處理的事件列表,然后發(fā)給內(nèi)核,返回時(shí)再去輪詢檢查這個(gè)表,以判斷事件是否發(fā)生

負(fù)載均衡算法 upstream
輪詢(自動(dòng)剔除有問題服務(wù)器)、權(quán)重、iphash(固定IP訪問服務(wù)器,適合有狀態(tài)服務(wù)如session,down需要手動(dòng)剔除)、最少連接、fair(根據(jù)響應(yīng)時(shí)間)、urlhash

Nginx+keepalived

keepalived

keepalived的核心功能是健康檢查、失敗切換
健康檢查是指通過tcp三次握手、http請(qǐng)求、ICMP請(qǐng)求、udp echo 請(qǐng)求等方式對(duì)負(fù)載均衡器后面實(shí)際的服務(wù)器進(jìn)行?;睢?br> 失敗切換主要是應(yīng)用配置了主備模式的負(fù)載均衡器,利用VRRP維持主備負(fù)載均衡器的心跳,當(dāng)主出現(xiàn)問題時(shí),由備承載對(duì)應(yīng)的業(yè)務(wù),從而在最大限度上減少流量損失,并提供服務(wù)的穩(wěn)定性。
VRRP協(xié)議主機(jī)間的通信都是基于靜態(tài)路由配置或者默認(rèn)網(wǎng)關(guān),如果主機(jī)間的路由器故障,通信就會(huì)失效。VRRP是一種容錯(cuò)的主備模式協(xié)議,保證當(dāng)主機(jī)的下一跳路由出現(xiàn)故障時(shí),由另一臺(tái)路由器代替工作,通過VRRP協(xié)議可以在網(wǎng)絡(luò)發(fā)送故障時(shí)透明的進(jìn)行切換而不影響主機(jī)間的通信。(三種狀態(tài):Initialize狀態(tài),Master狀態(tài),Backup狀態(tài))

只有作為主的服務(wù)器會(huì)一直發(fā)送VRRP廣播包,告訴備它還活著,此時(shí)備不會(huì)搶占主,當(dāng)主不可用時(shí),即備監(jiān)聽不到主發(fā)送的廣播包時(shí),就會(huì)啟動(dòng)相關(guān)服務(wù)接管資源,保證業(yè)務(wù)的連續(xù)性.接管速度最快。主備之間用心跳線連接去探測(cè)心跳,專門拉一條線或者交換機(jī)。

LVS算法

I/O

I/O:從內(nèi)核空間中的內(nèi)存數(shù)據(jù)復(fù)制到用戶空間中進(jìn)程的內(nèi)存當(dāng)中。
一次完整的I/O是用戶空間的進(jìn)程數(shù)據(jù)與內(nèi)核空間的內(nèi)核數(shù)據(jù)的報(bào)文的完整交換,但是內(nèi)核空間與用戶空間是嚴(yán)格隔離的,數(shù)據(jù)交換過程中不能在用戶空間的進(jìn)程直接調(diào)用內(nèi)核空間的內(nèi)存數(shù)據(jù)。
而是需要把內(nèi)核空間的內(nèi)存數(shù)據(jù)copy到用戶空間的進(jìn)程內(nèi)存中。

磁盤I/O是進(jìn)程向內(nèi)核發(fā)起系統(tǒng)調(diào)用,請(qǐng)求磁盤上的某個(gè)資源比如圖片,內(nèi)核通過相應(yīng)的驅(qū)動(dòng)將目標(biāo)文件加載到內(nèi)核的內(nèi)存空間,加載完成之后吧數(shù)據(jù)從內(nèi)核內(nèi)存再?gòu)?fù)制給進(jìn)程內(nèi)存。
網(wǎng)絡(luò)I/O 網(wǎng)絡(luò)協(xié)議棧到用戶空間進(jìn)程的IO
網(wǎng)絡(luò)I/O處理過程
客戶端 --》TCP連接 --》內(nèi)核空間 --》用戶空間的web服務(wù) --》內(nèi)核空間 --》客戶端

同步/異步:關(guān)注的是消息通信機(jī)制,即調(diào)用這再等待一件事情的處理結(jié)果時(shí),被調(diào)用者是否提供完成狀態(tài)的通知。
阻塞/非阻塞:關(guān)注調(diào)用者在等待結(jié)果返回之所處的狀態(tài)。
mmap()系統(tǒng)調(diào)用使得進(jìn)程之間用過映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。
即普通文件從磁盤映射到進(jìn)程地址空間,進(jìn)程就可以向訪問普通內(nèi)存一樣對(duì)文件進(jìn)行訪問。

淺拷貝只復(fù)制 指向某個(gè)對(duì)象的指針,而不復(fù)制對(duì)象本身,新舊對(duì)象共享同一塊內(nèi)存。
深拷貝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容