面试官:关于负载均衡你了解多少
面試官:關(guān)于負(fù)載均衡你了解多少,知道哪些常用框架
問(wèn)題分析:
工作中小編也會(huì)經(jīng)常接觸到 Nginx,比如美團(tuán)的 Oceanus 框架,是一款 HTTP 服務(wù)治理框架,這個(gè)框架就是基于 Nginx和 ngx_lua 擴(kuò)展的,主要提供服務(wù)注冊(cè)與發(fā)現(xiàn)、動(dòng)態(tài)負(fù)載均衡功能,日常的開(kāi)發(fā)學(xué)習(xí)中,如果你想弄懂公司的 Oceanus ,Nginx 知識(shí)肯定是必不可少的,我想這也是我在面試中被問(wèn)及 Nginx 相關(guān)知識(shí)的原因。
Nginx,使用最多最常見(jiàn)的,很多公司自己的負(fù)載均衡框架都是基于 Nginx 開(kāi)發(fā)的。
LVS
HAProxy
F5,硬件負(fù)載均衡,價(jià)格昂貴。
無(wú)論使用哪種方案,目的都是要解決同樣的問(wèn)題,掌握其中一個(gè)框架的原理后,再看其它幾個(gè)一定不會(huì)覺(jué)得吃力,接下來(lái)就通過(guò) Nginx 實(shí)例來(lái)學(xué)習(xí)。
NGINX-logo-rgb-large1.Nginx 簡(jiǎn)介
Nginx(發(fā)音同engine x)是異步框架的網(wǎng)頁(yè)服器,也可以用作反向代理、負(fù)載平衡器和HTTP緩存。該軟件由伊戈?duì)枴べ愃饕騽?chuàng)建并于2004年首次公開(kāi)發(fā)布。[6] 2011年成立同名公司以提供支持。[7]2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購(gòu)[8]。
Nginx 官網(wǎng):http://nginx.org/
下載列表:http://nginx.org/en/download.html
————維基百科
注意,http://nginx.org/ 區(qū)別于 http://nginx.com 前者是開(kāi)源免費(fèi)的,后者是企業(yè)版收費(fèi)的
選擇 Nginx 的理由
軟件成熟,2002年誕生到2019年,經(jīng)過(guò)多年的沉淀和各大互聯(lián)網(wǎng)公司的實(shí)踐改進(jìn),Nginx 已經(jīng)非常成熟,網(wǎng)上教程豐富,易于開(kāi)發(fā)者維護(hù)。
高性能Web服務(wù)器,單機(jī)能夠支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)的響應(yīng)。
異步的、非阻塞,使用了epoll和kqueue模型,壓縮請(qǐng)求和相應(yīng)數(shù)據(jù)大小,節(jié)省寬帶。
優(yōu)秀的反向代理服務(wù)器,隱藏 Server 地址,提高安全性。
支持 Http 緩存
只需要安裝 Nginx 配置好配置文件,就可以是實(shí)現(xiàn) Https 訪(fǎng)問(wèn)。
worker_processes 1; events { worker_connections 1024; }http { include mime.types; default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 443;server_name wangzha.tech www.wangzha.tech;ssl on;root html;index index.html index.htm;ssl_certificate /www/server/nginx/conf/1631800_www.wangzha.tech.pem;ssl_certificate_key /www/server/nginx/conf/1631800_www.wangzha.tech.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {proxy_pass http://47.99.146.163:80;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;} }server {listen 80;server_name www.wangzha.tech;} }2.Nginx 整體架構(gòu)設(shè)計(jì)
nginx架構(gòu)圖Nginx架構(gòu)圖 ?圖片來(lái)自 http://www.aosabook.org/en/nginx.html
主從模式
Nginx 啟動(dòng)后會(huì)創(chuàng)建多個(gè)進(jìn)程,一個(gè) Master 進(jìn)程和多個(gè) Worker 進(jìn)程,Master 進(jìn)程主要負(fù)責(zé)讀取配置文件,管理維護(hù)多個(gè) Worker 進(jìn)程,像是一個(gè)大內(nèi)總管,Master 自身不處理用戶(hù)請(qǐng)求,用戶(hù)訪(fǎng)問(wèn)的 web service 都是通過(guò)多個(gè) Worker 進(jìn)程處理,Worker 才是真正干活的,這種 Master Worker的主從設(shè)計(jì)理念在 。Worker 的數(shù)量可以通過(guò)配置文件隨時(shí)調(diào)整,非常靈活。
Master 主要職責(zé):
讀取 Nginx 配置文件,配置實(shí)時(shí)生效。
監(jiān)控 worker 進(jìn)程運(yùn)行狀態(tài),管理 worker 的創(chuàng)建與啟動(dòng),當(dāng) worker 進(jìn)程出現(xiàn)異常情況,Master 會(huì)自動(dòng)重新啟動(dòng) worker 進(jìn)程。
接收用戶(hù)請(qǐng)求,將請(qǐng)求分發(fā)給 worker 處理。
而 worker 進(jìn)程是從 Master 進(jìn)程 fork 過(guò)來(lái)的,worker 進(jìn)程只負(fù)責(zé)處理請(qǐng)求,從讀取請(qǐng)求,解析請(qǐng)求,處理請(qǐng)求,讀取到服務(wù)器返回的 response 數(shù)據(jù)后,再將數(shù)據(jù)轉(zhuǎn)發(fā)給客戶(hù)端。每個(gè)請(qǐng)求只會(huì)被一個(gè) worker 進(jìn)程處理。
異步非阻塞 I/O
I/O 分兩種,網(wǎng)絡(luò) I/O,讀取 socket,另一種是磁盤(pán) ?I/O,讀取磁盤(pán)數(shù)據(jù)。我們知道計(jì)算機(jī)的 CPU 執(zhí)行代碼的速度極快,然而一旦遇到IO 操作,如讀寫(xiě)文件、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時(shí),就需要等待IO操作完成。這樣做CPU大部分都是在等待,等待蝸牛般速度的磁盤(pán) IO 操作,這極大的浪費(fèi)了 CPU 的性能,很顯然,這種設(shè)計(jì)是不合理的,如果一個(gè)進(jìn)程想要執(zhí)行一個(gè) read() 或 write() 同步調(diào)用,那么進(jìn)程必須等到硬件完成 I/O 操作后才能進(jìn)行下一步操作,這叫做同步調(diào)用。
Nginx 為了提供并發(fā)能力,避開(kāi)了這種同步阻塞的設(shè)計(jì),采用異步,非阻塞,使用 epoll 多路復(fù)用模型,這是 Nginx 支持高并發(fā)的靈魂所在,如果讀者對(duì) 同步/異步 I/O 為什么會(huì)提高程序的響應(yīng)速度不是很理解,推薦看 IBM 這篇文章:https://www.ibm.com/developerworks/cn/linux/l-async/ ,IO屬于基礎(chǔ)篇,在 Nginx 篇不做過(guò)多闡述了。
模塊化設(shè)計(jì)
關(guān)于模塊化設(shè)計(jì)可以簡(jiǎn)單的理解一個(gè)功能就是一個(gè)模塊,類(lèi)似于設(shè)計(jì)模式里六大原則之一“單一職責(zé)原則”,這種設(shè)計(jì)的好處就是“高內(nèi)聚,低耦合”,Nginx 采用模塊化設(shè)計(jì)繼承了這個(gè)特點(diǎn),且用戶(hù)可以根據(jù)自己的需要選擇性安裝,具有高度的靈活性。
Nginx 共有五大類(lèi)型的模塊:
核心模塊:提供最基本的核心服務(wù),如進(jìn)程管理,權(quán)限控制等。
事件模塊:Nginx 支持事件驅(qū)動(dòng)的核心模塊。
標(biāo)準(zhǔn) HTTP 模塊:提供 http 相關(guān)功能,如代理,轉(zhuǎn)發(fā),壓縮,加密,負(fù)載均衡。
Mail 服務(wù)模塊:提供基本的郵件發(fā)送服務(wù),郵件服務(wù)模塊是 Nginx 的特色。
第三方模塊:支持豐富的第三方自定義模塊,
關(guān)于上述模塊如何配置使用不必全部記下來(lái),工作中現(xiàn)學(xué)現(xiàn)賣(mài)就可以,活學(xué)活用,記住這些模塊的功能,用的時(shí)候再去查找文檔。
如知道了 Nginx 提供了郵件服務(wù),百度 Google 一下“Nginx 如何配置郵件服務(wù)” 就會(huì)得到下面的配置:
mail {server_name mail.myweb.name;auth_http mail.postfix.cn:80/auth.php; #配置了HTTP認(rèn)證地址imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;pop3_auth plain apop cram-md5;pop3_capabilities LAST TOP USER PIPELINING UIDL;smtp_auth login plain cram-md5;smtp_capabilities "SIZE 10485760" ENHANCESTATUSCODES 8BITMIME DSN;xclient off;server{listen 25;protocol smtp;}server{listen 110;protocol pop3;proxy_pass_error_message on;}server {listen 143;protocol imap;} }3.總結(jié)
本節(jié)主要介紹了 Nginx 的特性和架構(gòu)模型,在大公司,如果你是一名開(kāi)發(fā)人員,你可能不會(huì)直接接觸 Nginx 配置,會(huì)有專(zhuān)門(mén)的運(yùn)維人員去做這件事,但是這不代表你可以不會(huì),Nginx 的很多設(shè)計(jì)思想值得每個(gè)優(yōu)秀的開(kāi)發(fā)者學(xué)習(xí),使用太廣泛,如果做二次開(kāi)發(fā),Nginx 可以說(shuō)架構(gòu)師必須掌握的基礎(chǔ)知識(shí),面試經(jīng)常會(huì)問(wèn) Nginx 如何實(shí)現(xiàn)高并發(fā)?你需要知道異步,非阻塞,epoll,需要知道 Master Worker 模型,Nginx常見(jiàn)的優(yōu)化配置?為什么 Nginx 不使用多線(xiàn)程?
參考資料
http://www.aosabook.org/en/nginx.html
《Nginx高性能web服務(wù)器詳解》
最后,再附上我歷時(shí)三個(gè)月總結(jié)的?Java 面試 + Java 后端技術(shù)學(xué)習(xí)指南,這是本人這幾年及春招的總結(jié),目前,已經(jīng)拿到了大廠offer,拿去不謝!
下載方式
1.?首先掃描下方二維碼
2.?后臺(tái)回復(fù)「Java面試」即可獲取
總結(jié)
以上是生活随笔為你收集整理的面试官:关于负载均衡你了解多少的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 日常工作必备之 linux 常用命令分类
- 下一篇: 【Maven】maven 插件开发实战