Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สวัสดีนะ NGINX Unit (beta version) แบบคร่าว ๆ

$
0
0

ช่วงสัปดาห์ที่ผ่านมามีการพูดถึง NGINX Unit เยอะพอควร ดังนั้นเลยลองศึกษาแบบผิว ๆ หน่อยสิว่า มันคืออะไร ทำงานอย่างไร ใช้งานอย่างไร น่าจะมีประโยชน์ต่อการพัฒนาและ deploy ระบบงานต่อไป
ปล. จะเรียก NGINX Unit ว่า Unit

NGINX Unit คืออะไร ?

จากเอกสารอธิบายว่า
  • Lightweight application server
  • Dynamic web application server
  • ออกแบบมาเพื่อให้ง่ายต่อการ run หลาย ๆ ภาษาโปรแกรมได้ หลาย ๆ version ได้บนเครื่อง หรือ server เดียวกัน
  • ตอนนี้สนับสนุน PHP, Python และ Go ก่อน ส่วน Java, JavaScript และ Ruby ก็รอนิดนึง
โดยแต่ละ Unit ทำการออกแบบได้ดังรูป นั่นคือแต่ละ Unit จะ run อะไรก็ได้ตามที่สนับสนุน แต่ว่าการ run ภาษาเดียวแต่หลาย version ยังไม่ได้ลอง ซึ่งมองแล้วมันมีประโยชน์มาก ๆ ไว้ต้องทดลองดูบ้าง !!

สิ่งที่น่าสนใจมาก ๆ คือ สามารถทำการ configuration หรือ ปรับแต่งค่าต่าง ๆ ของระบบ

ผ่าน REST API (JSON) ที่กำหนดไว้ ดังนั้นจึงง่ายต่อทีมพัฒนาและ operation ไม่ต้องมานั่ง config บน server เอง อยากเปลี่ยนก็ทำผ่าน REST API ไปเลยเช่น
  • จำนวน worker ของ NGINX
  • Path ของระบบหรือ service ต่าง ๆ
  • Port หรือ Listener ของแต่ละ server ว่าจะเปิดให้เข้าถึงผ่าน port อะไร

อ่านไปก็งง มาลองใช้งานกันดูดีกว่า

จากเอกสารการติดตั้งดูแล้วเหนื่อย ดังนั้นเพื่อความง่ายเลยใช้ Docker ดีกว่า หลังจากนั้นค่อยมาสร้าง Image ไว้ใช้งานกัน !! มาเริ่มกันเลย สร้าง container ด้วย Ubuntu image มีคำสั่งดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="install.txt"] คำอธิบาย ติดตั้ง curl กับ vim ไว้ทดสอบกับแก้ไข config ทำการติดตั้ง NGINX Unit ตามเอกสารเลย เมื่อการติดตั้งเรียบร้อย ทำการตรวจสอบ service นิดหน่อยด้วยคำสั่ง [code] $service unitd status * unitd is running [/code]

โดยค่า default แล้วนั้น Unit API จะอยู่ในไฟล์ control.unit.sock

สามารถเรียกใช้งานและส่ง configuration ในรูปแบบ JSON เข้าไปได้ ซึ่งจะประกอบไปด้วย
  • Applications ทำการกำหนดแต่ละ application ใน Unit ว่าเป็นอย่างเช่น ภาษาโปรแกรม จำนวน worker process ที่ทำงาน Path หรือ directory ของ application และ ไฟล์ index และอื่น ๆ ตามภาษาโปรแกรม
  • Listeners สำหรับ application ที่ให้เข้าถึงผ่าน HTTP (ส่วน HTTPS ยังไม่สนับสนุนนะ) จะต้องกำหนด listenter ให้เสมอ หรือเปิด port นั่นเอง เพื่อให้ผู้ใช้งานเรียกใช้งานได้

เพื่อความเข้าใจมาลองใช้งานกันดีกว่า

เริ่มจากการดูว่าตอนนี้มี applicaition และ listener มีอะไรบ้าง ? แน่นอนว่าต้องไม่มีอะไรเลยดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="check.txt"]

ดังนั้นเรามาสร้าง application แรกดีกว่า (Hello World)

ซึ่งความต้องการเป็นดังนี้
  • พัฒนาด้วยภาษา PHP
  • ทำการ run ด้วย port 8100
  • Path ของระบบอยู่ที่ /www/hello
  • ไฟล์ index ชื่อว่า index.php
สามารถทำการเขียนไฟล์ configuration ได้ดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="php_config.json"] ทำการ configuration หรือ re-configuration ผ่าน REST API ด้วยคำสั่งดังนี้ ง่ายสุด ๆ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="php.txt"] ตรวจสอบการ configuration ด้วยคำสั่งเดิม แต่ผลที่ได้ต่างออกไปดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="check2.txt"] แน่นอนว่าก็ต้องเตรียม code ของระบบงานไว้ให้พร้อมด้วยนะ จากนั้นทดสอบผลการทำงาน ได้ดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="index.txt"] เพียงเท่านี้ก็สามารถ run php แบบง่าย ๆ บน NGINX Unit ได้แล้ว แต่งานจริง ๆ ก็เตรียมเยอะกว่านี้นะ !! คำถามต่อมา สร้างได้ก็ต้องลบได้สิ เท่าที่ดูสามารถลบ Listener ได้ดังนี้ ส่วนลบ application ยังหาไม่เจอ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="delete.txt"]

เมื่อ PHP ผ่านไป ก็มาถึง Python และ Go กันบ้างสิ

มาดูว่า NGINX Unit มันสนับสนุนจริงไหม ? มาดูกันนิดหน่อย สามารถแก้ไข configuration นิดหน่อยดังนี้
  • Python จะมี path และ module ที่จะใช้ run ซึ่งใช้ wsgi
  • Go จะมี executable สำหรับ binary ของระบบ โดยต้องติดตั้ง go ด้วยนะ เพราะว่าในการพัฒนาต้องใช้ library ข อง Unit ด้วย
ตัวอย่างให้มี PHP และ Python ในเครื่องเดียวกัน หรือ Unit เดียวกัน [gist id="1cc7d811329f86cb642ca4f5311c3486" file="config.json"] โดยสำหรับ python จะสร้างไฟล์หลักชื่อว่า wsgi.py ใน path ที่กำหนดดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="wsgi.py"] จากนั้นสามารถเข้าถึงผ่าน port 8200 ได้เลยดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="python.txt"]
ปล. ทั้ง PHP และ Python นั้นผมยังไม่ได้ติดตั้งอะไรนอกจาก NGINX Unit นะ

มาถึงตรงนี้น่าจะพอเห็นภาพคร่าว ๆ ของ NGINX Unit กันบ้างนะครับ

น่าจะมีประโยชน์ต่อการพัฒนาระบบงานกันบ้าง แต่ทำไปทำมานี่มันแนวคิด container เลยนะ แถมยังทำให้การพัฒนาและการ deploy ระบบในลักษณะ Microservice ง่ายขึ้นไปอีก และสุดท้ายก็เอาไป integrate หรือทำงานร่วมกับ NGINX ต่อไปได้เลย มองไปมองมา มันคือการ lock technology หรือเปล่านะ ? ส่วนเรื่องของ performance นั้นยังคงต่ำกว่าวิธีการอื่น ๆ นะ แต่มันยังคง beta version เท่านั้น ดังนั้นต้องติดตามอย่างใกล้ชิดนะ ขอให้สนุกกับเขียน code ครับ Reference Websites https://www.nginx.com/blog/introducing-nginx-application-platform/ http://unit.nginx.org/docs-nginx-unit.html

Viewing all articles
Browse latest Browse all 1997

Trending Articles