OpenResty從入門到實戰-溫銘-極客時間-返現優惠

wuwu發表於2019-05-23

極客時間出品的《OpenResty從入門到實戰》由溫銘所作,溫銘是OpenResty軟體基金會主席,《OpenResty 最佳實踐》作者,本門課系統掌握一款高效能開發利器。用我的邀請購買,還會額外返現12元給你噢。

OpenResty從入門到實戰 封面圖

專欄簡介

你好,我是溫銘,OpenResty 軟體基金會主席,曾任某開源商業公司合夥人,前 360 開源技術委員會委員,在網際網路安全公司工作了 10 年,負責開發過雲查殺、反釣魚和企業安全產品。接下來的幾個月,我會帶著你係統地學習一下 OpenResty。

OpenResty從入門到實戰 配圖

為什麼學習 OpenResty

為什麼學習 OpenResty,這是開篇的第一個問題。我們正身處技術日新月異的時代,經常聽到周圍的工程師開玩笑說,學不動了。人的精力有限,選擇學習某個技術都會有機會成本。最好的選擇,是從你工作中涉及到的部分出發,學以致用。

對於服務端工程師來說,如果你的工作中涉及到 NGINX、高效能、高併發、動態控制、效能測試和分析等,那麼不管開發語言和平臺是什麼,這門 OpenResty 課程都會讓你有所裨益。如果你之前沒有接觸過 OpenResty,我確信它會給你開啟另外一個服務端世界的大門。

OpenResty 是一個兼具開發效率和效能的服務端開發平臺,雖然它基於 NGINX 實現,但其適用範圍,早已遠遠超出反向代理和負載均衡它的核心是基於 NGINX 的一個 C 模組(lua-nginx-module),該模組將 LuaJIT 嵌入到 NGINX 伺服器中,並對外提供一套完整的 Lua API,透明地支援非阻塞 I/O,提供了輕量級執行緒、定時器等高階抽象。同時,圍繞這個模組,OpenResty 構建了一套完備的測試框架、除錯技術以及由 Lua 實現的周邊功能庫。

你可以用 Lua 語言來進行字串和數值運算、查詢資料庫、傳送 HTTP 請求、執行定時任務、呼叫外部命令等,還可以用 FFI 的方式呼叫外部 C 函式。這基本上可以滿足服務端開發需要的所有功能。

掌握好了 OpenResty,你就可以同時擁有指令碼語言的開發效率和迭代速度,以及 NGINX C 模組的高併發和高效能優勢。

我與 OpenResty 的淵源

說了這麼多 OpenResty 的特點,我又是怎樣與它結緣的呢?其實,我是在 2012 年開始接觸 OpenResty 的,那會兒我正在為一個新的系統做技術選型,作為一個 Python 的忠實粉絲,我不喜歡 NGINX C 模組的艱澀,卻希望得到它的高效能,魚與熊掌想兼得。該怎麼辦呢?

經過一番搜尋後,我發現了 Python 社群“大媽” ZQ 的一篇介紹 OpenResty 的文章,可以說是如獲至寶。不過,興奮只持續了很短的時間,因為之後的我,就像是無頭蒼蠅一樣,開始在黑暗中摸索著緩慢前行。踩了數不清的坑後,我才真正拿下了 OpenResty。

和很多工程師不同的是,我喜歡寫文章,在大學期間就一直維護著自己的技術部落格。有一天晚上加班時,我發現身邊一位工程師在用 GitHub 記錄 ELK 的使用心得,併發布到了 GitBook 上。原來 GitHub 還可以開源書籍,而不只是程式碼!

我一下子就被點燃了,當晚就列出了《OpenResty 最佳實踐》的目錄,並開始“鼓動”周圍的工程師加入。我們從未宣傳過這個開源專案,但它慢慢變成了 OpenResty 入門者的最佳夥伴。

不過,在加入 OpenResty Inc. 後,我才逐漸發現,能寫出正確的 OpenResty 程式碼並避免常見的坑,和寫出高效能、優質的 OpenResty 程式碼之間,還相差了十萬八千里。那如何才能體系化學習 OpenResty 呢?在 OpenResty 的技術交流群裡面,很多工程師都曾經有過這樣的困惑。

事實上,OpenResty 的學習資料還比較少,官方只有 API 文件,並沒有提供入門和進階的文件,而網上能找到的資料也不夠系統。可以說,絕大部分的 OpenResty 使用者都是在摸著石頭過河,過程很痛苦。

因此,我與極客時間合作了這個專欄,目的很明確,就是讓你輕鬆快速地入門,並給你描繪出 OpenResty 的全貌,幫你建立知識體系,帶你真正掌握 OpenResty 這款開發利器。

學習這個專欄需要什麼基礎?

OpenResty 是在 NGINX 和 LuaJIT 的基礎上搭建的,所以我們肯定需要 NGINX 和 LuaJIT 的基礎知識。

但你只需要很少的 NGINX 知識,就足夠開始 OpenResty 之旅了。少到什麼程度呢?涉及到的 NGINX 知識,我只用一節課就介紹完了。即使你完全沒有接觸過 NGINX,也可以跟著課程的節奏,逐步學習 OpenResty。

要知道,OpenResty 並不等同於 NGINX,OpenResty 這個專案的目的之一,就是讓你感知不到 NGINX 的存在。而從程式語言來看,Lua 是一種很容易理解的語言,你只要能夠看懂它的程式碼,就可以完成本專欄的學習,並不需要能夠獨立寫出複雜的 Lua 程式碼。

同樣的,我也會花少數幾節課的時間,帶你入門 Lua,達到 OpenResty 的使用水準。

從實戰中來,到實戰中去

實踐出真知,這句話用在網際網路技術的學習上很恰當。

和理論偏多的書籍不同,專欄的形式本身更偏重於實戰。專欄中出現的不少程式碼,都源自開源 OpenResty 的測試案例,以及實際的開源專案。引用這些實際案例,就是希望你在入門之初,就能接觸到最優秀的程式碼,瞭解到最真實的使用場景。

同時,我還會在專欄文章中,穿插多個視訊課程。視訊課的內容,都取自真實開源專案的功能點和 PR。通過視訊,你會親眼看到,剛剛學到的知識是如何在實際中使用的。

專欄最後的實戰部分,則是我們的真實“戰場”。我會帶你一起,用 OpenResty 從零搭建一個微服務 API 閘道器。根據我們在社群中的統計,接近一半的 OpenResty 使用者,都把 OpenResty 用在 API 閘道器的開發上,Kong 和 orange 則是 OpenResty 領域中最流行的兩個開源閘道器專案。你想自己從頭搭建一個更簡單、更高效能的 API 閘道器嗎?一起來吧。

從實際的開源專案中學習,再到實際的開源專案中去實戰,將實戰融入完整的知識體系,這便是我的教學理念,希望你喜歡這種方式。

萬尺高樓平地起,接下來,我會和你一起來逐步掌握 OpenResty,Enjoy!

OpenResty從入門到實戰專欄作者

溫銘,OpenResty 軟體基金會主席,《OpenResty 最佳實踐》開源書的發起人和作者,曾任某開源商業公司合夥人,前 360 開源技術委員會委員。他在網際網路安全公司工作了 10 年,負責開發過雲查殺、反釣魚和企業安全產品。

OpenResty從入門到實戰 作者溫銘

在這個專欄裡,溫銘將帶你輕鬆快速入門,並給你描繪 OpenResty 的全貌,建立完整的知識體系;同時,他會串聯整個專欄來實戰應用,帶你從零開始搭建一個 API 閘道器。為了讓你接觸更真實的使用場景,溫銘還在專欄裡特別增加了多節視訊課程,進行開源專案的原始碼分析和實戰演練,幫你真正掌握OpenResty這款開發利器。

《OpenResty從入門到實戰》專欄模組

專欄共50期,根據 OpenResty 使用者的現狀分析,內容分為5大模組。

模組一,入門篇。OpenResty 由 NGINX 和 LuaJIT 兩部分構成,這一模組會介紹它們的基礎知識,以及其中經常遇到的缺陷與陷阱;同時會帶你瀏覽下OpenResty 倉庫的近 70 個專案。雖然OpenResty 經常被叫做 ngx-lua,但 lua-nginx-module 僅僅是冰山一角,你需要清晰的全域性觀來學習 OpenResty 的“真面目”,不能“身在此山中”。

模組二,API篇。這是 OpenResty 對外暴露的 Lua 介面,也是你編寫 OpenResty 程式碼最常用到的部分。這一模組會把這些指令和 API 分門別類逐步介紹給你,並引導你思考一些易忽略的關鍵點,比如,這些 API 為什麼這麼設計?為什麼要增加一些看上去和 NGINX 無關的功能?希望能讓你知其然,更知其所以然。

模組三,測試篇。這可能是本專欄最“高冷”的部分,不少 OpenResty 的程式碼貢獻者都在編寫測試案例時遇到過困難。<code>test::nginx<\/code> 功能異常強大,但也有很高的學習門檻,就連詳細文件也不足以填平它。除此之外,這一部分還會帶你討論服務端效能測試,作為 OpenResty 中的最佳實踐,在你測試 Java、Go、Node.js 等其他語言開發的系統時,它一樣適用。

模組四,效能優化篇。OpenResty 的效能優化技巧,一直是開發者最關注的問題。這個模組會提供 OpenResty 的編碼指南,讓你從一開始寫程式碼時,就能規避效能問題;並且會手把手地教你,如何使用火焰圖這種科學、可量化的工具來定位效能問題,而不是依靠猜測。

模組五,實戰篇。OpenResty 社群中有一個很明顯的趨勢,就是越來越多的開發者把 OpenResty 用在 API 閘道器的開發中,這是一個非常明智和務實的選擇。這個模組會帶你把前面所學的知識串聯起來,搭建出一個 API 閘道器的雛形。你可以在此基礎上,直接新增自己的模組來實現業務需求,不用再重新造輪子。

《OpenResty從入門到實戰》專欄詳細目錄

入門篇

  1. 初探OpenResty的三大特性
  2. 如何寫出你的“hello world”?
  3. 揪出隱藏在背後的那些子專案
  4. 如何管理第三方包?從包管理工具luarocks和opm說起
  5. 【視訊】opm專案導讀
  6.  OpenResty中用到的NGINX知識
  7. 帯你快速上手Lua
  8. LuaJIT分支和標準Lua有什麼不同?
  9. 為什麼lua-resty-core效能更高些?
  10. JIT編譯器的死穴:為什麼要避免使用NYI?
  11. 剖析Lua睢一的資料結構table和metatable特性
  12. 高手祕訣:識別Lua的獨有概念和坑
  13. 【視訊】實戰:基於FFI實現的lua-resty-lrucache
  14. 答疑解惑(一)

API篇

  1. OpenResty和別的開發平臺有什麼不同?
  2. 秒殺大多數開發問題的兩個利器:文件和測試案例
  3. 為什麼能成為更好的Web伺服器?動態處理請求和響應是關鍵
  4.  worker「間的通訊法寶:最重要的資料結構之shared diet
  5. 離開cosocket,你還想訪問MySQL ?
  6. 為什麼能超越Web伺服器?特權程式和定時器是關鍵
  7. 帶你玩轉時間、正規表示式等常用API
  8. 【視訊】從一個安全漏洞說起,探尋API效能和安全的平衡
  9. 【視訊】導讀lua-resty-requests:優秀的lua-resty-*是如何編寫的?
  10. 實戰:處理四層流量,實現Memcached Server
  11. 答疑解惑(二)

測試篇

  1. 程式碼貢獻者的攔路虎:OpenResty內建測試框架test::nginx
  2. test::nginx包羅永珍的測試模式
  3.  test::xnginx還可以這樣用?
  4. 最容易失準的效能測試?你需要壓測工具界的“悍馬” wrk
  5. 答疑解惑(三)

效能優化篇

  1. 效能下降10倍的真凶:阻塞函式
  2. 讓人又恨又愛的字串操作
  3. 效能提升10倍的祕訣:必須用好table
  4. 首次公開的OpenResty編碼指南
  5. 【視訊】實際專案中的效能優化:ingress-nginx中的幾個PR解讀
  6. 動態除錯的利器:如何用SystemTap生成火焰圖?
  7. systemtap-toolkit和stapxx:如何用資料搞定“疑難雜症”?
  8. 【視訊】巧用wrk和火焰圖,科學定位效能瓶頸
  9. 揭祕高效能的關鍵:shared dict快取和lru快取
  10. 快取與風暴並存,誰說快取風暴不可避免?
  11. lua-resty-*封裝,讓你遠離多級快取之痛
  12. 如何應對突發流量?從漏桶和令牌桶說起
  13. 靈活實現動態限流限速,其實沒有那麼難
  14.  OpenResty優於NGINX的殺手鐗:動態載入和動態上游
  15. 不得不提的能力外延:OpenResty常用第三方庫
  16. 答疑解惑(四)

實戰篇

  1. 微服務API閘道器搭建三步曲之一
  2. 微服務API閘道器搭建三步曲之二
  3. 微服務API閘道器搭建三步曲之三
  4. 答疑解惑(五)

 

訂閱形式

該專欄以音訊和文字形式進行, 共50講 。可在極客時間APP/小程式/網站上觀看。

已有1713 人購買

限時 ¥68原價 ¥129

通過我下圖分享的二維碼購買後,我返現12元給你

購買的朋友請加我微訊號 dismissmewp ,備註:返現。我立即返你12元現金。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章