面试官:关于负载均衡你了解多少
面試官:關于負載均衡你了解多少,知道哪些常用框架
問題分析:
工作中小編也會經常接觸到 Nginx,比如美團的 Oceanus 框架,是一款 HTTP 服務治理框架,這個框架就是基于 Nginx和 ngx_lua 擴展的,主要提供服務注冊與發(fā)現、動態(tài)負載均衡功能,日常的開發(fā)學習中,如果你想弄懂公司的 Oceanus ,Nginx 知識肯定是必不可少的,我想這也是我在面試中被問及 Nginx 相關知識的原因。
Nginx,使用最多最常見的,很多公司自己的負載均衡框架都是基于 Nginx 開發(fā)的。
LVS
HAProxy
F5,硬件負載均衡,價格昂貴。
無論使用哪種方案,目的都是要解決同樣的問題,掌握其中一個框架的原理后,再看其它幾個一定不會覺得吃力,接下來就通過 Nginx 實例來學習。
NGINX-logo-rgb-large1.Nginx 簡介
Nginx(發(fā)音同engine x)是異步框架的網頁服器,也可以用作反向代理、負載平衡器和HTTP緩存。該軟件由伊戈爾·賽索耶夫創(chuàng)建并于2004年首次公開發(fā)布。[6] 2011年成立同名公司以提供支持。[7]2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購[8]。
Nginx 官網:http://nginx.org/
下載列表:http://nginx.org/en/download.html
————維基百科
注意,http://nginx.org/ 區(qū)別于 http://nginx.com 前者是開源免費的,后者是企業(yè)版收費的
選擇 Nginx 的理由
軟件成熟,2002年誕生到2019年,經過多年的沉淀和各大互聯網公司的實踐改進,Nginx 已經非常成熟,網上教程豐富,易于開發(fā)者維護。
高性能Web服務器,單機能夠支持高達 50,000 個并發(fā)連接數的響應。
異步的、非阻塞,使用了epoll和kqueue模型,壓縮請求和相應數據大小,節(jié)省寬帶。
優(yōu)秀的反向代理服務器,隱藏 Server 地址,提高安全性。
支持 Http 緩存
只需要安裝 Nginx 配置好配置文件,就可以是實現 Https 訪問。
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 整體架構設計
nginx架構圖Nginx架構圖 ?圖片來自 http://www.aosabook.org/en/nginx.html
主從模式
Nginx 啟動后會創(chuàng)建多個進程,一個 Master 進程和多個 Worker 進程,Master 進程主要負責讀取配置文件,管理維護多個 Worker 進程,像是一個大內總管,Master 自身不處理用戶請求,用戶訪問的 web service 都是通過多個 Worker 進程處理,Worker 才是真正干活的,這種 Master Worker的主從設計理念在 。Worker 的數量可以通過配置文件隨時調整,非常靈活。
Master 主要職責:
讀取 Nginx 配置文件,配置實時生效。
監(jiān)控 worker 進程運行狀態(tài),管理 worker 的創(chuàng)建與啟動,當 worker 進程出現異常情況,Master 會自動重新啟動 worker 進程。
接收用戶請求,將請求分發(fā)給 worker 處理。
而 worker 進程是從 Master 進程 fork 過來的,worker 進程只負責處理請求,從讀取請求,解析請求,處理請求,讀取到服務器返回的 response 數據后,再將數據轉發(fā)給客戶端。每個請求只會被一個 worker 進程處理。
異步非阻塞 I/O
I/O 分兩種,網絡 I/O,讀取 socket,另一種是磁盤 ?I/O,讀取磁盤數據。我們知道計算機的 CPU 執(zhí)行代碼的速度極快,然而一旦遇到IO 操作,如讀寫文件、發(fā)送網絡數據時,就需要等待IO操作完成。這樣做CPU大部分都是在等待,等待蝸牛般速度的磁盤 IO 操作,這極大的浪費了 CPU 的性能,很顯然,這種設計是不合理的,如果一個進程想要執(zhí)行一個 read() 或 write() 同步調用,那么進程必須等到硬件完成 I/O 操作后才能進行下一步操作,這叫做同步調用。
Nginx 為了提供并發(fā)能力,避開了這種同步阻塞的設計,采用異步,非阻塞,使用 epoll 多路復用模型,這是 Nginx 支持高并發(fā)的靈魂所在,如果讀者對 同步/異步 I/O 為什么會提高程序的響應速度不是很理解,推薦看 IBM 這篇文章:https://www.ibm.com/developerworks/cn/linux/l-async/ ,IO屬于基礎篇,在 Nginx 篇不做過多闡述了。
模塊化設計
關于模塊化設計可以簡單的理解一個功能就是一個模塊,類似于設計模式里六大原則之一“單一職責原則”,這種設計的好處就是“高內聚,低耦合”,Nginx 采用模塊化設計繼承了這個特點,且用戶可以根據自己的需要選擇性安裝,具有高度的靈活性。
Nginx 共有五大類型的模塊:
核心模塊:提供最基本的核心服務,如進程管理,權限控制等。
事件模塊:Nginx 支持事件驅動的核心模塊。
標準 HTTP 模塊:提供 http 相關功能,如代理,轉發(fā),壓縮,加密,負載均衡。
Mail 服務模塊:提供基本的郵件發(fā)送服務,郵件服務模塊是 Nginx 的特色。
第三方模塊:支持豐富的第三方自定義模塊,
關于上述模塊如何配置使用不必全部記下來,工作中現學現賣就可以,活學活用,記住這些模塊的功能,用的時候再去查找文檔。
如知道了 Nginx 提供了郵件服務,百度 Google 一下“Nginx 如何配置郵件服務” 就會得到下面的配置:
mail {server_name mail.myweb.name;auth_http mail.postfix.cn:80/auth.php; #配置了HTTP認證地址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é)主要介紹了 Nginx 的特性和架構模型,在大公司,如果你是一名開發(fā)人員,你可能不會直接接觸 Nginx 配置,會有專門的運維人員去做這件事,但是這不代表你可以不會,Nginx 的很多設計思想值得每個優(yōu)秀的開發(fā)者學習,使用太廣泛,如果做二次開發(fā),Nginx 可以說架構師必須掌握的基礎知識,面試經常會問 Nginx 如何實現高并發(fā)?你需要知道異步,非阻塞,epoll,需要知道 Master Worker 模型,Nginx常見的優(yōu)化配置?為什么 Nginx 不使用多線程?
參考資料
http://www.aosabook.org/en/nginx.html
《Nginx高性能web服務器詳解》
最后,再附上我歷時三個月總結的?Java 面試 + Java 后端技術學習指南,這是本人這幾年及春招的總結,目前,已經拿到了大廠offer,拿去不謝!
下載方式
1.?首先掃描下方二維碼
2.?后臺回復「Java面試」即可獲取
總結
以上是生活随笔為你收集整理的面试官:关于负载均衡你了解多少的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日常工作必备之 linux 常用命令分类
- 下一篇: 绝了!这款工具让 SpringBoot