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