來源:北大青鳥總部 2023年06月19日 15:00
如果說有一款工具是互聯(lián)網(wǎng)公司必備的,那一定是Nginx,作為一款優(yōu)秀的開源web服務器軟件,因為性能穩(wěn)定、適合多個場景、使用簡單等優(yōu)點,在各互聯(lián)網(wǎng)公司,大到上萬人的阿里京東騰訊頭條滴滴美團,小到幾十百人的創(chuàng)業(yè)團隊,從研發(fā)都運維,它都是最炙手可熱的。在web服務應用中,它可以實現(xiàn)靜態(tài)資源、PHP等網(wǎng)站的搭建;在后端代理服務中,它支持tcp/udp、http、grpc、fastcgi(PHP語言使用的協(xié)議)等協(xié)議的轉(zhuǎn)發(fā)處理;在緩存場景中,它自身可以緩存歷史數(shù)據(jù);在API網(wǎng)關應用中,它提供了身份認證、鑒權(quán)等操作。在云計算、大數(shù)據(jù)的海量高并發(fā)場景下,更是需要Nginx來協(xié)同工作。
簡單的介紹了Nginx的功能后,我們來看看Nginx背后的架構(gòu)是怎么樣的?它是如何進行設計的?在Nginx的架構(gòu)中包含master節(jié)點、worker節(jié)點、緩存、第三方(web服務器、應用服務器)。Nginx啟動之后,前端每傳來一個用戶請求,master主進程都會生成一個子進程worker去進行處理,worker負責監(jiān)聽事件,處理任務,比如將請求基于http等通信協(xié)議轉(zhuǎn)發(fā)給webserver。在nginx啟動的同時,會開啟緩存功能,創(chuàng)建cacheloader進程,cacheloader進程將磁盤緩存的對象加載在內(nèi)存當中,供nginx使用。此外Nginx采用異步非阻塞通信模式,即進程接收到請求之后,客戶端不用等待響應,可以去處理其它任務,等待操作完成之后再將數(shù)據(jù)返回給到客戶端。
此外,Nginx的邏輯架構(gòu)設計還采用了當下最流行的設計思想,即基于事件驅(qū)動。在Nginx的整個邏輯架構(gòu)中,包含核心模塊、http模塊、配置模塊、第三方模塊等,核心模塊處理Nginx的核心任務,如進程管理、權(quán)限控制,http模塊處理http任務,如與第三方進行通信,第三方模塊提供Nginx的擴展功能,開發(fā)者可以根據(jù)自己需求進行二次開發(fā)。
介紹完了Nginx的架構(gòu)之后,我們來看看Nginx的使用用途。因為Nginx非常的強大,它的用途自然也非常的廣,而當下最熱門的技術(shù)理念莫過于DevOps,最熱的事件莫過于雙十一大促春節(jié)搶票了,那我們就從這兩個場景來進行講解吧。
DevOps理念倡導的是微服務模式,快速開發(fā),快速迭代,持續(xù)集成,持續(xù)交付。也就是說會隨著業(yè)務的不斷擴展,衍生出很多的新業(yè)務,并且會拆分的非常原子化,由不同團隊負責不同模塊的開發(fā)與上線。對于大公司來說,如果技術(shù)體系成熟,順其自然的拆分微服務架構(gòu)即可,但對于技術(shù)體系不成熟或歷史包袱比較重的公司,基于Nginx也可以很好的實現(xiàn)DevOps。如下圖所示,業(yè)務拆分成了電影、酒店、商超、旅游部分,通過Redis將不同業(yè)務的key存儲起來,用戶請求來了之后,經(jīng)過Nginx負載均衡去請求不同業(yè)務的ID,再把請求做轉(zhuǎn)發(fā),如果再有新的業(yè)務擴展,在redis中增加一條記錄即可。
雙十一大促和春運都面臨的一個問題是海量請求高并發(fā),雙十一是很多人搶東西,春運是很多人搶票,當請求突然爆發(fā)性的增長時,如果沒有應急措施,很有可能會造成服務癱瘓,業(yè)務不可用。作為技術(shù)部門的研發(fā)運維都必須要保證服務的高可用,借助Nginx,當業(yè)務請求量正常時,訪問正常業(yè)務集群,同時也把數(shù)據(jù)備份到降級集群中,當業(yè)務訪問量異常發(fā)生故障時,通過Nginx將業(yè)務切到降級集群,恢復之后再把用戶切回,簡簡單單的保證了業(yè)務的高可用。
除了上述兩個最應景的場景之外,其實Nginx還可以用來做運營運維數(shù)據(jù)的統(tǒng)計分析。你想想看啊,所有的請求都是通過Nginx的入口轉(zhuǎn)發(fā)的,那自然可以統(tǒng)計到用戶最長訪問的URL、接口,進而可以獲取到用戶最長訪問的服務、業(yè)務、模塊,根據(jù)訪問量、請求量來做對應模塊的性能優(yōu)化與業(yè)務運維了。所以你也可以看到,不只是前端可以獲取用戶訪問數(shù)據(jù),后端也是可以獲取的喲。
通過本文,相信大家對Nginx已經(jīng)有了比較清楚的了解了,高并發(fā)、性能好、用途廣,難怪滴滴美團阿里頭條內(nèi)部各業(yè)務線各技術(shù)部門都紛紛使用,青睞有加呢,在中小型創(chuàng)業(yè)公司它的使用也不賴噢。此外。如果你的業(yè)務正在遭遇高并發(fā)崩潰問題,抑或是正面臨技術(shù)架構(gòu)轉(zhuǎn)型,微服務落地,devops實踐等問題,那么你不妨考慮使用Nginx。它真的很簡單,也真的很好用。對于加入互聯(lián)網(wǎng)公司的研發(fā)運維人員,熟練掌握Nginx也是一門技巧噢。