使用nginx负载均衡的webservice wsdl访问不到_面试官:关于负载均衡你了解多少
面試官:關(guān)于負載均衡你了解多少,知道哪些常用框架?
問題分析:
工作中小編也會經(jīng)常接觸到 Nginx,比如美團的 Oceanus 框架,是一款 HTTP 服務(wù)治理框架,這個框架就是基于 Nginx和 ngx_lua 擴展的,主要提供服務(wù)注冊與發(fā)現(xiàn)、動態(tài)負載均衡功能,日常的開發(fā)學(xué)習(xí)中,如果你想弄懂公司的 Oceanus ,Nginx 知識肯定是必不可少的,我想這也是我在面試中被問及 Nginx 相關(guān)知識的原因。
無論使用哪種方案,目的都是要解決同樣的問題,掌握其中一個框架的原理后,再看其它幾個一定不會覺得吃力,接下來就通過 Nginx 實例來學(xué)習(xí)。
1.Nginx 簡介
Nginx(發(fā)音同engine x)是異步框架的網(wǎng)頁服器,也可以用作反向代理、負載平衡器和HTTP緩存。該軟件由伊戈爾·賽索耶夫創(chuàng)建并于2004年首次公開發(fā)布。[6] 2011年成立同名公司以提供支持。[7]2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購[8]。Nginx 官網(wǎng):http://nginx.org/
下載列表:http://nginx.org/en/download.html
————維基百科
注意,http://nginx.org/ 區(qū)別于 http://nginx.com 前者是開源免費的,后者是企業(yè)版收費的,商業(yè)版支持帶外健康檢查。
選擇 Nginx 的理由
只需要安裝 Nginx 配置好配置文件,就可以是實現(xiàn) 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 整體架構(gòu)設(shè)計
Nginx架構(gòu)圖 圖片來自 http://www.aosabook.org/en/nginx.html
主從模式
Nginx 啟動后會創(chuàng)建多個進程,一個 Master 進程和多個 Worker 進程,Master 進程主要負責(zé)讀取配置文件,管理維護多個 Worker 進程,像是一個大內(nèi)總管,Master 自身不處理用戶請求,用戶訪問的 web service 都是通過多個 Worker 進程處理,Worker 才是真正干活的,這種 Master Worker的主從設(shè)計理念在 。Worker 的數(shù)量可以通過配置文件隨時調(diào)整,非常靈活。
Master 主要職責(zé):
而 worker 進程事從 Master 進程 fork 過來的,worker 進程只負責(zé)處理請求,從讀取請求,解析請求,處理請求,讀取到服務(wù)器返回的 response 數(shù)據(jù)后,再將數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端。每個請求只會被一個 worker 進程處理。
異步非阻塞 I/O
I/O 分兩種,網(wǎng)絡(luò) I/O,讀取 socket,另一種是磁盤 I/O,讀取磁盤數(shù)據(jù)。我們知道計算機的 CPU 執(zhí)行代碼的速度極快,然而一旦遇到IO 操作,如讀寫文件、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時,就需要等待IO操作完成。這樣做CPU大部分都是在等待,等待蝸牛般速度的磁盤 IO 操作,這極大的浪費了 CPU 的性能,很顯然,這種設(shè)計是不合理的,如果一個進程想要執(zhí)行一個 read() 或 write() 同步調(diào)用,那么進程必須等到硬件完成 I/O 操作后才能進行下一步操作,這叫做同步調(diào)用。
Nginx 為了提供并發(fā)能力,避開了這種同步阻塞的設(shè)計,采用異步,非阻塞,使用 epoll 多路復(fù)用模型,這是 Nginx 支持高并發(fā)的靈魂所在,如果讀者對 同步/異步 I/O 為什么會提高程序的響應(yīng)速度不是很理解,推薦看 IBM 這篇文章:https://www.ibm.com/developerworks/cn/linux/l-async/ ,IO屬于基礎(chǔ)篇,在 Nginx 篇不做過多闡述了。
模塊化設(shè)計
關(guān)于模塊化設(shè)計可以簡單的理解一個功能就是一個模塊,類似于設(shè)計模式里六大原則之一“單一職責(zé)原則”,這種設(shè)計的好處就是“高內(nèi)聚,低耦合”,Nginx 采用模塊化設(shè)計繼承了這個特點,且用戶可以根據(jù)自己的需要選擇性安裝,具有高度的靈活性。
Nginx 共有五大類型的模塊:
關(guān)于上述模塊如何配置使用不必全部記下來,工作中現(xiàn)學(xué)現(xiàn)賣就可以,活學(xué)活用,記住這些模塊的功能,用的時候再去查找文檔。
如知道了 Nginx 提供了郵件服務(wù),百度 Google 一下“Nginx 如何配置郵件服務(wù)” 就會得到下面的配置:
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é)
本節(jié)主要介紹了 Nginx 的特性和架構(gòu)模型,在大公司,如果你是一名開發(fā)人員,你可能不會直接接觸 Nginx 配置,會有專門的運維人員去做這件事,但是這不代表你可以不會,Nginx 的很多設(shè)計思想值得每個優(yōu)秀的開發(fā)者學(xué)習(xí),使用太廣泛,如果做二次開發(fā),Nginx 可以說架構(gòu)師必須掌握的基礎(chǔ)知識,面試經(jīng)常會問 Nginx 如何實現(xiàn)高并發(fā)?你需要知道異步,非阻塞,epoll,需要知道 Master Worker 模型,Nginx常見的優(yōu)化配置?為什么 Nginx 不使用多線程?
參考資料
聯(lián)系我
VX搜索【轉(zhuǎn)行程序員】回復(fù)”加群“,我會拉你進技術(shù)群。講真的,在這個群,哪怕您不說話,光看聊天記錄也是一種成長。阿里/騰訊/百度資深工程師、Google技術(shù)大神、IBM工程師、還有我王炸、各路大牛都在,有任何不明白的都進群提問。
最后,覺得王炸到文章不錯就來個三連吧:關(guān)注 轉(zhuǎn)發(fā) 點贊
總結(jié)
以上是生活随笔為你收集整理的使用nginx负载均衡的webservice wsdl访问不到_面试官:关于负载均衡你了解多少的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: brew更新的时候不更新某个应用_这样用
- 下一篇: python是一种动态语言、这意味着_【