0Pricing
Lua Academy · บทเรียน

สถาปัตยกรรม 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สถาปัตยกรรม OpenResty
  2. การจัดการคำขอ HTTP ใน Lua
  3. Cosocket และ TCP แบบไม่บล็อก
  4. พจนานุกรมหน่วยความจำใช้ร่วมกัน
← กลับไปที่ Lua Academy