สถาปัตยกรรม OpenResty
ทำความเข้าใจว่า ngx_lua ฝัง LuaJIT ในระยะต่าง ๆ ของคำขอ Nginx อย่างไร
สถาปัตยกรรม OpenResty เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
OpenResty คืออะไร
OpenResty คือแพลตฟอร์มเว็บที่ฝัง LuaJIT ไว้ในเอ็นจินเอ็กซ์ ทำให้เอ็นจินเอ็กซ์กลายเป็นเซิร์ฟเวอร์แอปพลิเคชันเว็บที่มีความสามารถครบถ้วน โดยโค้ดลัวเป็นผู้จัดการคำขอ
โมดูลลัวสำหรับเอ็นจินเอ็กซ์
โมดูล ngx_lua ผสาน LuaJIT เข้ากับเอ็นจินเอ็กซ์ โดยจัดเตรียมเอพีไอ ngx.* สำหรับเข้าถึงข้อมูลคำขอและการตอบกลับ ตัวจับเวลา หน่วยความจำที่ใช้ร่วมกัน และซ็อกเก็ตแบบร่วมกระบวนการ
ระยะการประมวลผลคำขอของเอ็นจินเอ็กซ์
OpenResty เปิดเผยระยะการประมวลผลคำขอของเอ็นจินเอ็กซ์เป็นฮุกลัว ได้แก่ init_by_lua, access_by_lua, content_by_lua, header_filter_by_lua, log_by_lua
พื้นฐาน nginx.conf
กำหนดค่าตัวจัดการลัวใน nginx.conf โดยใช้คำสั่งกำกับระยะที่เหมาะสม
# nginx.conf snippet
server {
listen 80;
location /hello {
content_by_lua_block {
ngx.header["Content-Type"] = "text/plain"
ngx.say("Hello from Lua!")
}
}
}รูปแบบหนึ่งโครูทีนต่อหนึ่งคำขอ
คำขอขาเข้าแต่ละรายการจะได้รับโครูทีนลัวของตนเอง เมื่อโครูทีนหยุดชั่วคราว (เช่น กำลังรอฐานข้อมูล) เอ็นจินเอ็กซ์จะให้บริการคำขออื่นต่อ รูปแบบนี้ช่วยให้รองรับการทำงานพร้อมกันจำนวนมากโดยไม่บล็อกการทำงาน
API ของ ngx
ฟังก์ชันหลักของ ngx: ngx.say(), ngx.print(), ngx.header, ngx.var, ngx.req.*, ngx.status และ ngx.exit()
สถานะหน่วยความจำที่ใช้ร่วมกัน
กระบวนการทำงานใช้ข้อมูลร่วมกันผ่าน ngx.shared.DICT ซึ่งเป็นพจนานุกรมที่ใช้หน่วยความจำร่วมกันและประกาศไว้ใน nginx.conf โดยมีขนาดหน่วยความจำตายตัว
# nginx.conf
lua_shared_dict my_cache 10m;
-- In Lua:
ngx.shared.my_cache:set("key", "value", 60)โคซ็อกเก็ต
โคซ็อกเก็ตของ OpenResty รองรับ TCP/UDP และ HTTP แบบไม่บล็อก โดยทำงานร่วมกับลูปเหตุการณ์ของ Nginx ทำให้ Lua ทำอินพุต/เอาต์พุตแบบอะซิงโครนัสได้โดยไม่บล็อกกระบวนการทำงาน
API ตัวจับเวลา
ngx.timer.at(delay, fn) กำหนดเวลาให้ฟังก์ชัน Lua ทำงานหลังจากหน่วงเวลาตามที่ระบุ ส่วน ngx.timer.every(interval, fn) จะทำงานเป็นระยะ
ภาพรวมประสิทธิภาพ
OpenResty รองรับการเชื่อมต่อพร้อมกันหลายหมื่นรายการต่อกระบวนการทำงานหนึ่งกระบวนการ เมื่อทำงานร่วมกับความเร็วของ LuaJIT และการมัลติเพล็กซ์อินพุต/เอาต์พุตที่ผ่านการพิสูจน์แล้วของ Nginx จึงมีประสิทธิภาพแข่งขันกับ Go และ Node.js สำหรับงานที่ประสิทธิภาพถูกจำกัดด้วยอินพุต/เอาต์พุตได้
กรณีการใช้งานทั่วไป
- เกตเวย์ API และการจำกัดอัตรา
- มิดเดิลแวร์สำหรับการยืนยันตัวตนและการอนุญาต
- การกำหนดเส้นทางคำขอแบบไดนามิก
- ชั้นแคชของเรดิสและเมมแคช
คำถามเกี่ยวกับ OpenResty
OpenResty รองรับการทำงานพร้อมกันจำนวนมากได้อย่างไร
ทบทวน: สถาปัตยกรรมของ OpenResty
OpenResty ฝัง LuaJIT ไว้ใน Nginx คำขอแต่ละรายการทำงานเป็นโครูทีน ส่วน API ngx.* ให้เข้าถึงข้อมูลคำขอ/การตอบกลับ หน่วยความจำที่ใช้ร่วมกัน ตัวจับเวลา และโคซ็อกเก็ตแบบไม่บล็อก
คำถามที่พบบ่อย
บทเรียน “สถาปัตยกรรม OpenResty” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สถาปัตยกรรม OpenResty” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สถาปัตยกรรม OpenResty”
ทำความเข้าใจว่า ngx_lua ฝัง LuaJIT ในระยะต่าง ๆ ของคำขอ Nginx อย่างไร คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “สถาปัตยกรรม OpenResty” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม OpenResty
- การจัดการคำขอ HTTP ใน Lua
- Cosocket และ TCP แบบไม่บล็อก
- พจนานุกรมหน่วยความจำใช้ร่วมกัน