3讓你的更強(qiáng)大通過拓展nginx_第1頁
3讓你的更強(qiáng)大通過拓展nginx_第2頁
3讓你的更強(qiáng)大通過拓展nginx_第3頁
3讓你的更強(qiáng)大通過拓展nginx_第4頁
3讓你的更強(qiáng)大通過拓展nginx_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、講師介紹Hash從事Java軟件研發(fā)近十年。前新浪支付成員、咪咕視訊(中國移動(dòng))項(xiàng)目經(jīng)理、對(duì)分布式架構(gòu)、高性能編程有深入的研究。明天,你一定會(huì)感謝今天奮力拼搏的| JAVA架構(gòu)師課程讓你的Nginx更強(qiáng)大,通過Lua拓展Nginx分布式高并發(fā)負(fù)載均衡目錄課程安排| JAVA架構(gòu)師課程04功能實(shí)戰(zhàn)實(shí)現(xiàn)一個(gè)高性能的商品頁面03打造高性能后端接口強(qiáng)強(qiáng),如何玩轉(zhuǎn)Nginx+Lua+Redis?02Nginx增加Lua執(zhí)行模塊Nginx相關(guān)概念、安裝使用01Lua簡述像Lua一樣快目錄01Lua簡述| JAVA架構(gòu)師課程Lua語言Lua是一種功能強(qiáng)大,高效,輕量級(jí),可嵌入的到我們應(yīng)用程序中。語言,非常容

2、易嵌入Lua是動(dòng)態(tài)類型的,通過使用基于寄存器的虛擬機(jī)解釋字節(jié)碼來運(yùn)行,并具有增量收集的自動(dòng)內(nèi)存管理,使其成為配置,和快速原型設(shè)計(jì)的理想選擇。Lua旨在成為一種輕量級(jí)可嵌入到Web應(yīng)用程序和圖像處理。語言。它用于各種應(yīng)用程序,從應(yīng)用場景1.2.3.許多工業(yè)應(yīng)用 (例如, Adobe的Photoshop Lightroom)重點(diǎn)是Lua目前 是系統(tǒng)(例如, 巴西的數(shù)字電視的 Ginga中間件)中領(lǐng)先的語言,在(例如, 魔獸世界和憤怒的小鳥)中使用。官網(wǎng):| JAVA架構(gòu)師課程Lua特點(diǎn)快,Lua是解釋語言領(lǐng)域中最快的語言Lua是便攜式的,在具有標(biāo)準(zhǔn)C編譯器的所有平臺(tái)中構(gòu)建成開箱即用,可運(yùn)行各種Un

3、ix和Windows,移動(dòng)設(shè)備(運(yùn)行Android,iOS,BREW,Symbian,Windows Phone),Rabbit,適用于Lego MindStorms等應(yīng)用程序),IBM大型機(jī)等。微處理器(如ARM和可嵌入,Lua是一種快速語言引擎,占用空間小,可以輕松嵌入到應(yīng)用程序中。簡單而強(qiáng)大,提供實(shí)現(xiàn)功能的*元機(jī)制*,而不是直接在語言中提供大量功能。Lua不是純粹的面向?qū)ο笳Z言,提供了實(shí)現(xiàn)類和繼承的元機(jī)制。小,源包含大約24000行C,包含源代碼和文檔的Lua 5.3.5的tar包需要297K壓縮和1.2M未壓縮。,MIT證,可以用于任何目的,包括商業(yè)目的,完全。| JAVA架構(gòu)師課程開

4、始使用Lua安裝LuaHelloWorld| JAVA架構(gòu)師課程$ luaLua 5.1.4 Copyright (C) 1994-2008 L, PUC-Rio> print("hello, world") hello, worldcurl -R -Otar zxf lua-5.3.5.tar.gz cd lua-5.3.5make linux test一個(gè)小例子新建hello.lua文件,內(nèi)容如下運(yùn)行示例hello.lua文件語法比Java要簡略,縮進(jìn)對(duì)齊,無大括號(hào)分號(hào)Lua實(shí)現(xiàn)的階乘代碼示例| JAVA架構(gòu)師課程$ lua hello.lua ent

5、er a number:5120# 120=5*4*3*2*1- defines a factorial function function fact (n)if n = 0 then return 1elsereturn n * fact(n-1) endendprint("enter a number:")a = io.read("*number")- read a number print(fact(a)目錄02Nginx增加Lua執(zhí)行模塊| JAVA架構(gòu)師課程給插上翅膀Nginx嵌入Lua語言ngx_lua模塊不鼓勵(lì)用Nginx構(gòu)建這個(gè)模塊,構(gòu)建

6、需要注意,Nginx,LuaJIT和OpenSSL版具有各種限制和長期存在的錯(cuò)誤,這些錯(cuò)誤可能會(huì)導(dǎo)致某些模塊的功能被禁用,無法正常運(yùn)行或運(yùn)行速度變慢。如何編譯,參考Nginx嵌入Lua語言操作手冊(cè)。使用ngx_lua模塊相當(dāng)于使用Openresty,建議用版本OpenResty,它做了大量優(yōu)化、集成了常用的第插件。OpenRestyOpenResty內(nèi)部集成了大量精良的 Lua 庫、第模塊以及OpenResty是一款基于大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展NGINX 和 LuaJITWeb 平臺(tái)。的性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和關(guān)。OpenResty的安裝參考Ope

7、nResty安裝操作,比構(gòu)建ngx_lua模塊簡單很多ngx_lua模塊資料:|JAVA架構(gòu)師課程ngx_lua支持的指令認(rèn)識(shí)ngx_lua中的指令內(nèi)容處理可以由上游服務(wù)或者Lua語言來處理,用Lua就大有可為了。| JAVA架構(gòu)師課程指令分為配置指令、 指令。指令分為兩種方式:lua塊*_by_lua_block lua文件*_by_lua_fileLua 執(zhí)行順序,如右圖從上至下:初始化、重寫/ 、內(nèi)容處理、日志輸出四個(gè)階段。ngx_lua演示在OpenResty中演示ngx_lua的指令內(nèi)容,參考nginx_lua_directives.conf文件| JAVA架構(gòu)師課程目錄03打造高性

8、能后端接口| JAVA架構(gòu)師課程OpenRestyRedis模塊OpenResty中默認(rèn)嵌入了下列模塊,包含Redis,所以要使用Redis非常簡單。Lua中使用Redis代碼示例| JAVA架構(gòu)師課程- 引入Redis模塊local redis = require("resty.redis")-創(chuàng)建實(shí)例local red = redis:new()-建立連接local ok, err = red:connect(“”, 6379)-調(diào)用API進(jìn)行處理ok, err = red:set("msg", "hello world&

9、quot;) local resp, err = red:get("msg")Nginx非阻塞與Lua協(xié)程的絕配服務(wù)器有個(gè)設(shè)計(jì)原則:永遠(yuǎn)不能阻塞。nginx作為非常優(yōu)秀的服務(wù)器,這點(diǎn)發(fā)揮的非常極致。在nginx里有很多的體現(xiàn)異步的地方。Lua嵌入會(huì)阻塞嗎?通過nginx的異步機(jī)制和lua的協(xié)程,很容易實(shí)現(xiàn)這種同步寫法,異步實(shí)現(xiàn)的模型,但對(duì)開發(fā)人員而言,不用關(guān)心內(nèi)部做了什么。| JAVA架構(gòu)師課程- foo本身是個(gè)協(xié)程,由nginx調(diào)用function foo()- 此處由nginx發(fā)起db的連接請(qǐng)求,因?yàn)楫惒竭@里先暫停協(xié)程users = db.query('user

10、s', name: name);- 當(dāng)請(qǐng)求有響應(yīng)得到處理時(shí),繼續(xù)執(zhí)行協(xié)程,這些才運(yùn)行deal_with(users);endLua協(xié)程什么是協(xié)程?Lua協(xié)程,稱為協(xié)作式多線程。Lua中的協(xié)程代表一個(gè)的執(zhí)行線程,具有的堆棧、的局部變量、PC計(jì)數(shù)器和其自己的指令指針; 與java線程不同的是,協(xié)程只通過顯式調(diào)用yield函數(shù)來暫停其執(zhí)行。同一時(shí)間,多協(xié)程只運(yùn)行其中一個(gè),多線程則可以運(yùn)行多個(gè)。協(xié)程可以處于三種不同狀態(tài)之一:暫停,運(yùn)行和使用Lua協(xié)程coroutine.create(f)創(chuàng)建一個(gè)新的協(xié)同程序并返回一個(gè)類型為thread的對(duì)象,并不啟動(dòng)協(xié)程。coroutine.resume(co)開始或繼續(xù)執(zhí)行協(xié)同程序co coroutine.yield暫停執(zhí)行調(diào)用協(xié)程,讓出CPU coroutine.wrap(f)類似create方法,創(chuàng)建一個(gè)協(xié)程但它不是返回協(xié)程本身,而是返回一個(gè)函數(shù),當(dāng)被調(diào)用時(shí),它恢復(fù)協(xié)程| JAVA架構(gòu)師課程Lua協(xié)程示例同步的寫法,異步的實(shí)現(xiàn)| JAVA架構(gòu)師課程coroutine.resume(co) - 輸出 co 1 coroutine

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論