溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx_lua的優(yōu)勢和劣勢有哪些

發(fā)布時間:2021-11-18 11:51:11 來源:億速云 閱讀:421 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“Nginx_lua的優(yōu)勢和劣勢有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Nginx_lua的優(yōu)勢和劣勢有哪些”吧!

首先讓我們來了解一下Nginx_lua的設(shè)計指導(dǎo)思想:

1、基于Nginx 快速開發(fā)高性能、大并發(fā)的網(wǎng)絡(luò)服務(wù)。

2、提供“同步非阻塞” 的I/O 訪問接口簡化I/O 多路復(fù)用體系中的業(yè)務(wù)邏輯開發(fā):

■“同步”的主體是用戶代碼與其發(fā)起的I/O 請求處理流程之間的時序關(guān)系,意即I/O 請求處理完成前用戶代碼將一直掛起。

■“非阻塞”的主體是服務(wù)進(jìn)程,意即I/O 請求的處理不會導(dǎo)致服務(wù)進(jìn)程阻塞等待,而是可以繼續(xù)處理其他請求的用戶邏輯。

Nginx的特點是占有內(nèi)存少,并發(fā)能力強(qiáng),事實上nginx的并發(fā)能力確實在同類型的網(wǎng)頁伺服器中表現(xiàn)較好。目前中國大陸使用nginx網(wǎng)站用戶有:新浪、網(wǎng)易、 騰訊,另外知名的微網(wǎng)志Plurk也使用Nginx。

Nginx服務(wù)器及Lua版本的選擇

1)Nginx高性能開源WEB服務(wù)器的選擇

清無是在08年開始接觸Nginx服務(wù)器的,當(dāng)時高性能的開源WEB服務(wù)器還有l(wèi)ighttpd,那么一淘網(wǎng)技術(shù)專家清無為什么會選擇Nginx呢?Nginx哪方面比較有它的優(yōu)勢?清無介紹說,lighttpd和Nginx的比較中,有一個很明顯的缺點就是lighttpd的模塊機(jī)制設(shè)計的很不好,lighttpd的模塊機(jī)制過多的把模塊本身的請求處理邏輯和底層的網(wǎng)絡(luò)事件的處理組合在一起,所以不像Nginx的模塊結(jié)構(gòu)這么清晰,當(dāng)然Nginx的模塊設(shè)計很大程度上也借鑒了Apache的這種模塊設(shè)計,所以這塊有一個先天的優(yōu)勢。當(dāng)時其實他最早接觸lighttpd,然后Nginx出來以后,就對比它們模塊結(jié)構(gòu)上的差異后,覺得Nginx似乎更有優(yōu)勢一些。實測對于我們這種網(wǎng)絡(luò)I/O密集型的應(yīng)用來說,只要不是你實現(xiàn)的這個邏輯有多大缺陷,其實在放lighttpd或者Nginx差別不是特別大。

在比較選擇的過程中,首先從架構(gòu)出發(fā),如果有問題的話無論你實現(xiàn)如何它都是有問題的,所以我的比較首先在架構(gòu)搭建上,每連接或者每請求單線程單進(jìn)程這種服務(wù)模型,直接就被刷掉,肯定不可能做到很高的服務(wù)能力。余下來清一色的都是基于RO多路的這種結(jié)構(gòu)體系,那么在這個體系上我們才去檢驗,實際上拿一個IPP的請求來壓測看它實現(xiàn)的質(zhì)量如何,通常來說這部分一旦架構(gòu)體系決定以后,實測這個性能差異不是特別的大,除非說是某個特性一個實現(xiàn)另一個沒實現(xiàn)這種情況,我們測出來的差異通常是在10%-20%上下波動而已。

2)Lua版本的選擇

在小編與清無的交流中了解到目前一淘網(wǎng)所使用lua的版本是5.1.2,當(dāng)小編提出是否版本越高性能越強(qiáng)時,清無則認(rèn)為不太對。對于lua來說每一個版本的變化意味著它將加入新的語法元素或者變更了內(nèi)部的一些實現(xiàn)的方式。嚴(yán)格意義上并不說明它的性能就好,比如對5.2和5.1來說,不管對于環(huán)境表或者其它的一些機(jī)制的修改上面,嚴(yán)格的來說他都是一種新的語言了。所以目前來說遷移到5.2***的障礙其實還是5.2里面對于底層接口的這種概念的變化。因為5.1里面對于一些方面下了很多工夫,然后使用它的全局表加環(huán)境表這種機(jī)制。但是5.2里面徹底取消了全局表的概念,也取消了CU級別上一系列對環(huán)境表操作的接口,對我們來說肯定是不能平滑的遷移到5.2,如果有這個需求的話,我們可以做,但目前還沒有看到這個需求。另外一個阻礙我們升級版本號的問題是Lua JIT,lua JIT的性能比標(biāo)準(zhǔn)的lua要高很多,所以深層里面我們通常用JIT,但是luaJIT目前對lua5.2的支持并不是那么緊,它目前還是以5.1為主,所以這塊我沒可能較長的時間跟著lua JIT的腳步來。

在一淘網(wǎng)的應(yīng)用中,清無介紹說,Nginx_lua主要應(yīng)用在兩塊地方,一塊是傳統(tǒng)的一淘數(shù)據(jù)庫量子統(tǒng)計店鋪經(jīng),數(shù)據(jù)接口部分完全是用Nginx_lua來做。另一塊是一淘的廣告部門有一部分?jǐn)?shù)據(jù)接口也使用著Nginx_lua。

Nginx_lua的性能測試比較

其實也有很多人一直還在使用Nginx_php這種組合搭配,對于Nginx_lua組合的優(yōu)勢在哪里呢?清無介紹說,Nginx+php之間是要有進(jìn)程之間通信的,這樣以來基礎(chǔ)的性能開銷就很大。lua是嵌在Nginx進(jìn)程內(nèi)部的,它不需要有兩套進(jìn)程在那里獨立工作。所以這塊從結(jié)構(gòu)上來說就有決定性的優(yōu)勢在里面。再加上線程之間通訊的時候需要大量的反序列化和序列化的工作,然后兩套進(jìn)程帶來額外情況是更多的進(jìn)程更多的切換開銷,所以單機(jī)上面Nginx_php要比Nginx_lua要低很多。但是相對來說仍然要回到我們做什么事情上面,因為Nginx_lua目前***的劣勢就是周邊的模塊相當(dāng)?shù)牟唤∪?,我們需要大量的時間來積累這些模塊。php積累了十幾年的時間了,如果說你對性能的要求并不是那么高,我的并發(fā)數(shù)就是幾十,那么你用php就是最合適的。但是如果像一淘數(shù)據(jù)的數(shù)據(jù)接口,機(jī)器數(shù)就那么一點,因為我的大量成本在MySQL集群上面,它是這塊的主力,那么對外的數(shù)據(jù)接口我希望盡可能降成本,并發(fā)數(shù)又非常大,php肯定是不行,那么我們就要選擇Nginx_lua。但這塊的話對模塊的劣勢看起來不是那么大,因為它的邏輯相對來說較為固定,我們可以忍受這樣的成本,我們?nèi)檫@個邏輯來定制一些模塊。

Nginx_lua的優(yōu)勢和劣勢有哪些

Nginx_lua的優(yōu)勢和劣勢有哪些

從上面的兩張性能測試圖中我們總結(jié)Nginx_lua的適用場景:

  1. 網(wǎng)絡(luò)I/O 阻塞時間遠(yuǎn)高于CPU 計算占用時間、同時上游資源非瓶頸(可伸縮)的網(wǎng)絡(luò)應(yīng)用,如高性能網(wǎng)絡(luò)中間層、HTTP REST 接口服務(wù)等;

  2. 期望簡化系統(tǒng)架構(gòu),讓服務(wù)向Nginx 同質(zhì)化的Web 站點;

Nginx_lua的優(yōu)勢和劣勢

對于Nginx_lua的劣勢在剛剛和Nginx_php的對比的時候清無也介紹了一個是周邊模塊不完善,不健全的問題。如果你用到的這個東西比較復(fù)雜的時候可能生產(chǎn)力上不去,目前Nginx_lua最適合的人員是數(shù)據(jù)接口層,以及所有的網(wǎng)絡(luò)中間層,你需要最求并發(fā),高性能的網(wǎng)絡(luò)中間層。因為它本身的邏輯相對來說比較簡單,或者完全用lua本身就可以變現(xiàn)出來,這個用起來收效比例是***的。那么如果你目前要做一個復(fù)雜的WEB訪問站,有大量模板要套,有大量的復(fù)雜邏輯嵌在里面,然后要訪問mail要訪問其他服務(wù)的話,目前來說我覺得還是php或者其他比較成熟的語言。就我們目前應(yīng)用來說也是這樣,中間層會大量的使用lua,但是前端展現(xiàn)層的話要么全部移到瀏覽器上面用JS+模板的形式來實現(xiàn),要么就是用PHP這樣來做。

另外的劣勢就是調(diào)試的輔助工具不太多,因為高級點的php程序員會往往會使用XDebug或者其它的調(diào)試工具,可以單步調(diào)試,在線調(diào)試。跟php相比目前還欠缺這樣的一個機(jī)制。到時候我們會仿照XDebug 去實現(xiàn)DPT V2協(xié)議,我們實現(xiàn)兼容DPT V2這樣的一種機(jī)制內(nèi)連到Nginx_lua里面,那樣Nginx_lua也可以單步調(diào)試。到時候我們也會分享給大家。

***我們來歸納一下清無介紹的幾點優(yōu)勢和劣勢:

優(yōu)勢:

  • 同步非阻塞I/O 形式直觀易懂,并發(fā)服務(wù)能力強(qiáng)

  • CPU、內(nèi)存運行開銷低

  • 同Nginx 結(jié)合度高,可方便粘合現(xiàn)有Nginx 模塊功能

劣勢:

  • 屬于新技術(shù)方案,Lua 相比于PHP、Ruby 等廣泛使用的開發(fā)

  • 語言,周邊附屬設(shè)施尚不夠健全,需要時間積累

Nginx_lua的需求以及性能的追求

在需求方面,清無認(rèn)為在一淘網(wǎng)的數(shù)據(jù)接口的這部分是完全可以滿足的,至于其他的需求我們還要具體發(fā)現(xiàn),尋找***決解方案。因為在計算機(jī)行業(yè)沒有一招吃遍天這種事。

那么作為一名技術(shù)人員,在性能的追求是適合而止還是無止境的追求呢?清無表示,這個要看我們是在做生意還是在個人事情,如果是在公司,比如在具體的事情上面,然后是一個團(tuán)隊協(xié)作的情況下,那么盲目的追求性能的極限是一個不合適的行為,因為你的追求是要付出相應(yīng)的成本和開銷的,而往往在一個企業(yè)的環(huán)境里面這個是不可容忍的。最合適的架構(gòu)往往是針對你去解決問題的那個架構(gòu),而不是去追求效率***的架構(gòu)。所以我們具體在企業(yè)里面做項目的時候,顯然適可而止是***的。蓋過了你這個用戶的***需求你就沒必要去付出更多的精力來做,因為其他的問題有很多,你沒必要停留在性能這個問題上,性能只是其中的一個問題,在一個問題上沒必要投入太大的精力。但是,從開發(fā)人員個人的角度來說,追求性能的極限是一個很好的想法和行為,因為開發(fā)者自己對性能極限的追求體現(xiàn)出對***的追求,對于***的追求意味著它可以從上層到底層的專研,而專研是提升個人素質(zhì)最有效的動力。所以是分開來看這個問題。

感謝各位的閱讀,以上就是“Nginx_lua的優(yōu)勢和劣勢有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Nginx_lua的優(yōu)勢和劣勢有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI