當前位置:
首頁 > 科技 > OpenResty 完全開發指南:構建百萬級別並發的 Web 應用

OpenResty 完全開發指南:構建百萬級別並發的 Web 應用

對服務端工程師來說,如果你的工作中涉及到 Nginx、高性能、高並發、動態控制、性能測試、分析等,那麼,不論你使用什麼開發語言和平台,OpenResty 都是不可多得的高性能開發利器

如果你之前沒接觸過 OpenResty,我確信它會為你打開服務端的「新世界大門」。

作為一個兼具開發效率和性能的服務端開發平台,OpenResty 並不像其他開發語言一樣從零開始搭建,而是基於成熟的開源組件 —— Nginx 和 LuaJIT。

其核心是基於 Nginx 的一個 C 模塊(lua-nginx-module),這個模塊將 LuaJIT 嵌入到 Nginx 伺服器中,並對外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了輕量級線程、定時器等高級抽象。

圍繞這個模塊,OpenResty 構建了一套完備的測試框架、調試技術和由 Lua 實現的周邊功能庫。

你可以用 Lua 語言進行字元串和數值運算、查詢資料庫、發送 HTTP 請求、執行定時任務、調用外部命令等,還可以用 FFI 的方式調用外部 C 函數。

這基本上滿足了服務端開發所需要的全部功能。所以,OpenResty 的適用範圍早已超出了反向代理和負載均衡

這就意味著,掌握了 OpenResty,就能同時擁有腳本語言的開發效率和迭代速度,以及Nginx C 模塊的高並發和高性能優勢

通過豐富的 lua-resty 庫,OpenResty 已逐漸擺脫 Nginx 的影子,形成了自己的生態體系,在 API 網關、軟 WAF 等領域被廣泛使用。

目前,OpenResty 是全球排名第五的 Web 伺服器,我們常用的12306 的余票查詢功能京東的商品詳情頁,這些高流量的背後,都是 OpenResty 在默默地提供服務。

1

我與 OpenResty

說了這麼多 OpenResty 的特點,我是誰?又是怎樣跟它結緣的呢?

我是溫銘,OpenResty 軟體基金會主席,《OpenResty 最佳實踐》作者,前 360 開源技術委員會委員。

我在互聯網安全公司有 10 多年的工作經驗,一直從事高性能服務端的開發和架構,負責開發過雲查殺、反釣魚和企業安全產品。

初識 OpenResty 是 2012 年,那會兒我正為一個新的系統做技術選型,作為一個 Pythoner,我不喜歡 Nginx C 模塊的艱澀,但還想享受它的高性能——魚與熊掌都想兼得,怎麼辦呢?

經過一番搜尋,我讀到一篇介紹 OpenResty 的文章,那感覺真是如獲至寶。然而,興奮只持續了很短的時間,我發現市面上並沒有太多資料可供參考,只能摸索前行,踩了數不清的坑,才感覺自己真正拿下了 OpenResty。

後來,一個偶然的機會,我發現 GitHub 不僅可以開源代碼,還有書籍!我一下子就被點燃了,當晚就列出了《OpenResty 最佳實踐》的目錄,並開始」鼓動「周圍的工程師加入。

我們從未宣傳過這個開源項目,但它逐漸成為了 OpenResty 入門者的最佳夥伴。

然而,在加入 OpenResty Inc. 後,我才意識到,寫出正確的 OpenResty 代碼和寫出高性能的優質 OpenResty 代碼之間,還差了十萬八千里。

而跨越這個巨大鴻溝的零件,就散落在 OpenResty 開源項目的源碼、文檔、issue、PR、幻燈片、郵件列表中,需要你把它們串聯起來,形成一個完整的學習路徑和知識圖譜。

但是,目前市面上的 OpenResty 學習資料非常少,官方只提供了 API 文檔,並沒有入門和進階的文檔,網上能找到的資料也不夠系統。

可以說,大部分的 OpenResty 使用者都是摸著石頭過河,過程相當痛苦,我自己就是其中之一。

所以,我與極客時間合作了這個專欄,目的很明確,就是讓你輕鬆快速地入門 OpenResty ,建立起完整的知識體系,進而真正掌握這款開發利器。

我總結的 OpenResty 學習路徑圖

2

我是如何講解 OpenResty 的?

實踐出真知,這句話用在互聯網技術的學習上很恰當。在專欄中,我將秉承「從實戰中來,到實戰中去」的原則講解。

專欄中的不少代碼,都取自開源OpenResty的測試案例和實際的開源項目。目的是讓你在入門之初,就接觸最優秀的代碼,了解真實的使用場景。

同時,我還會在專欄文章中穿插多個視頻課程,內容取自真實開源項目的功能點和 PR。通過視頻,你會更加直觀地看到,剛學到的知識點是如何在實際中應用的。

專欄最後的實戰部分,是我們的真實「戰場」:我會帶你一起,用OpenResty 從零搭建一個微服務 API 網關。

根據我們在社區中的統計,接近一半的 OpenResty 使用者,都把 OpenResty 用在 API 網關的開發上,Kong 和 orange 是 OpenResty 領域中最流行的兩個開源網關項目。如果你想獨立搭建一個更簡單、更高性能的 API 網關,這部分內容不容錯過。

從實際的開源項目中學習,再到實際的開源項目中去實戰,將實戰融入完整的知識體系,這就是我的教學理念,相信你一定會有所收穫。

3

學習的重點在哪裡?

學習要會抓重點,才能構建出脈絡清晰的知識體系。根據我的實戰經驗,想要學好 OpenResty,你需要理解下面幾個重點,在專欄中我也會著重講解:

同步非阻塞的編程模式

不同階段的作用LuaJIT 和 Lua 的不同之處

OpenResty API 和周邊庫

協程和 cosocket

單元測試框架和性能測試工具

火焰圖和周邊工具鏈

性能優化

4

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

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

但你只要了解很少的 Nginx 知識,就可以學習 OpenResty 了。少到什麼程度呢?涉及到的 Nginx 的知識,我只用一節課就介紹完了。所以,即使你從沒接觸過 Nginx 也沒關係。

要知道,OpenResty 並不等同於 Nginx,OpenResty 這個項目存在的目的之一,就是讓你感知不到 Nginx 的存在。

從編程語言的角度看,Lua 是一種很容易理解的語言,你只要能夠看懂它的代碼,並不需要獨立寫出複雜的 Lua 代碼,就可以完成專欄的學習了,我會用少數幾節課帶你入門 Lua,達到 OpenResty 的使用水準。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

TAG:InfoQ |