7 เทคนิคการ Optimize Kong API Gateway Performance ที่ Dev มืออาชีพต้องรู้

Kong API Gateway เป็นหนึ่งในเครื่องมือยอดนิยมที่นักพัฒนามืออาชีพใช้กันอย่างแพร่หลาย มีทั้ง Kong Enterprise & Kong Open-Source ซึ่งเป็นเครื่องมือที่ทรงพลังสำหรับการจัดการ API แต่การใช้งานอย่างมีประสิทธิภาพสูงสุดนั้นต้องอาศัยเทคนิคการ Optimize ที่เหมาะสม โดยบทความนี้จะเปิด 7 เทคนิคในการ Optimize Kong API Gateway Performance ที่ Developer มืออาชีพทุกคนควรรู้ เป็นไอเดียวเอาไปใช้งานจริงได้

Kong ใช้ NGINX เป็น Core และถ่ายทอดด้วย Multi-processing ด้วยการตั้งค่าจำนวน Worker Processes ให้เหมาะสมจะช่วยให้ Kong ใช้ประโยชน์จาก Multi-core CPUs ได้อย่างเต็มที่

วิธีการปรับแต่ง  

  1. ตรวจสอบจำนวน CPU cores โดยใช้คำสั่ง `nproc` หรือ `lscpu` บน Linux เพื่อดูจำนวน CPU cores ที่มี
  1. ตั้งค่า worker_processes: ปรับแต่งในไฟล์ `kong.conf` โดยตั้งค่า `nginx_worker_processes` ให้เท่ากับจำนวน CPU cores หรือน้อยกว่าเล็กน้อยเช่น

   หรือระบุจำนวนที่แน่นอน เช่น

  • สำหรับระบบที่มี CPU Cores จำนวนมาก อาจไม่จำเป็นต้องใช้ทุก Core โดยให้ลองทดสอบประสิทธิภาพโดยใช้จำนวน Worker Processes ที่น้อยกว่าจำนวน Cores เล็กน้อย
  • การตั้งค่า Worker Processes มากเกินไปอาจทำให้เกิดการแย่งชิงทรัพยากรและลดประสิทธิภาพโดยรวม ให้ระวังการใช้ `auto` ในบางกรณี เพราะอาจไม่ได้ค่าที่เหมาะสมที่สุดเสมอไป

การเพิ่มประสิทธิภาพการ Caching โดยเฉพาะการเพิ่ม memory สำหรับ database caching เป็นวิธีที่มีประสิทธิภาพในการลด latency สำหรับ Kong API Gateway โดยเฉพาะอย่างยิ่งสำหรับ workload ที่ต้องการ latency ต่ำ เพราะ Kong ใช้ in-memory cache เพื่อลดการเรียกใช้ฐานข้อมูลซ้ำๆ ซึ่งช่วยลด latency ในการประมวลผล Request

การปรับแต่ง Database Caching

1. เพิ่มขนาด mem_cache_size

  •  ปรับแต่งค่า `mem_cache_size` ในไฟล์ `kong.conf` ให้มีขนาดใหญ่ที่สุดเท่าที่เป็นไปได้ โดยยังคงเหลือทรัพยากรเพียงพอสำหรับระบบปฏิบัติการและกระบวนการอื่นๆ

2. คำนวณหน่วยความจำสำหรับ Worker Processes

  • แต่ละ worker process ใช้หน่วยความจำประมาณ 500MB ดังนั้นควรคำนวณให้เพียงพอตามจำนวน CPU cores ที่ใช้งาน

3. ตัวอย่างการคำนวณ

  • สำหรับเครื่องที่มี 4 CPU cores และ RAM 8GB ควรจัดสรรประมาณ 4-6GB สำหรับ cache ผ่านการตั้งค่า `mem_cache_size`

4. ปรับแต่งตามประเภทของ Workload

  • สำหรับ Latency-sensitive workload ให้เพิ่ม Memory สำหรับ Database caching จะให้ประโยชน์มากกว่าการเพิ่ม Compute power
  • สำหรับ Throughput-sensitive workload ที่ต้องการทั้ง Memory และ CPU resources แต่การเพิ่ม Compute power จะให้ผลดีกว่า

5. ข้อแนะนำ

  • จำนวน Consumers และ Credentials ให้เพิ่มจำนวนเหล่านี้จะต้องการหน่วยความจำมากขึ้นสำหรับการ Cache ข้อมูล
  • ควรทำการ Benchmark เพื่อหาค่าที่เหมาะสมที่สุดสำหรับระบบของคุณ

เมื่อเปิดใช้งาน Dedicated Configuration Processing ระบบของ Kong จะแยกกระบวนการ CPU-intensive บางส่วนของการ Reconfigure Data Plane ไปยัง Worker Process ที่แยกต่างหาก จึงสามารถลด Proxy latency ระหว่างการ Reconfigure เพิ่มประสิทธิภาพการทำงานโดยรวมของ Kong Gateway ได้ เหมาะสำหรับระบบที่มี Configuration Entities มากกว่า 1,000 รายการ มีประโยชน์มากเมื่อ Kong Gateway ทำงานในโหมด Hybrid Mode วิธีการเปิดใช้งานคือ เปิดไฟล์ `kong.conf` และค้นหาหรือเพิ่มบรรทัดต่อไปนี้ การเปิดใช้งานจะเพิ่มการใช้หน่วยความจำเล็กน้อย แลกกับการลด Latency ควรทดสอบประสิทธิภาพก่อนและหลังเปิดใช้งานเพื่อยืนยันผลลัพธ์ที่ดีขึ้น

ulimit กำหนดจำนวนไฟล์ที่ระบบปฏิบัติการอนุญาตให้โปรเซสหนึ่งๆ เปิดได้ ซึ่งส่งผลโดยตรงต่อจำนวนการเชื่อมต่อที่ Kong สามารถจัดการได้ โดยแนะนำให้ตั้งค่า ulimit ควรตั้งไว้ที่อย่างน้อย 4096 ส่วนสำหรับระบบที่มีการใช้งานสูง แนะนำให้ตั้งค่าที่ 16384 หรือสูงกว่า แต่การตั้งค่า ulimit สูงเกินไปอาจส่งผลต่อประสิทธิภาพของระบบโดยรวม ซึ่งควรตรวจสอบให้แน่ใจว่าระบบปฏิบัติการและฮาร์ดแวร์สามารถรองรับค่า ulimit ที่ตั้งไว้ได้

วิธีการปรับแต่ง   

  1.  ตรวจสอบค่าปัจจุบัน ใช้คำสั่ง `ulimit -n` เพื่อดูค่า ulimit ปัจจุบัน
  1. การปรับค่าแบบชั่วคราว
  1. การปรับค่าถาวร ทำได้โดยแก้ไขไฟล์ `/etc/security/limits.conf` โดยเพิ่มบรรทัด
  1. สำหรับ systemd ให้แก้ไขไฟล์ service ของ Kong (`/etc/systemd/system/kong.service`) โดยเพิ่ม
  1. ตรวจสอบหลังการปรับแต่ง โดยการรีสตาร์ท Kong และตรวจสอบค่า ulimit ของโปรเซส Kong ด้วยคำสั่ง

การเพิ่ม Connection Reuse ผ่าน Keepalive connections เป็นวิธีที่มีประสิทธิภาพในการ Optimize Kong API Gateway โดยเฉพาะในสภาพแวดล้อมที่มี Traffic สูง โดย Keepalive connections ช่วยลดการสร้าง TCP connection ใหม่ในแต่ละ Request ซึ่งช่วยลด Latency และเพิ่ม Throughput ค่าที่เหมาะสมขึ้นอยู่กับ Workload และทรัพยากรของระบบ แต่การตั้งค่าสูงเกินไปอาจทำให้ใช้ทรัพยากรมากเกินความจำเป็น

วิธีการปรับแต่ง

  1.  เปิดใช้งาน keepalive  ในไฟล์ `kong.conf` และตั้งค่า
  1.  เพิ่มจำนวน keepalive requests
  1. ปรับ keepalive timeout
  1. เพิ่ม keepalive connections สำหรับ Downstream

การตรวจสอบและทดสอบ Custom Plugins อย่างละเอียดจะช่วยให้คุณเข้าใจผลกระทบของแต่ละ plugin ต่อประสิทธิภาพของ Kong API Gateway และสามารถตัดสินใจได้ว่าควรใช้หรือปรับแต่ง Plugins อย่างไรเพื่อให้ได้ประสิทธิภาพสูงสุด บาง Plugins อาจจำเป็นสำหรับความปลอดภัยหรือฟังก์ชันการทำงานที่สำคัญ ต้องชั่งน้ำหนักระหว่างประสิทธิภาพและความจำเป็น ซึ่งการตรวจสอบ Custom Plugins สามารถทำได้โดยดังนี้

  1. ตรวจสอบ Plugins ที่ใช้งานอยู่ทั้งหมด
  1. บันทึกการตั้งค่า Plugins ปัจจุบัน บันทึกรายละเอียดการตั้งค่าของแต่ละ Plugins ใช้คำสั่ง `curl` เพื่อดูรายละเอียดของแต่ละ Plugins
  1. ปิดการใช้งาน Custom Plugins ทั้งหมดชั่วคราว
  1. ทำการทดสอบ Performance ใช้เครื่องมือ benchmark เช่น Apache Bench หรือ wrk ทดสอบ Latency, Throughput, และการใช้ทรัพยากรบันทึกผลการทดสอบอย่างละเอียด
  1. ให้เปิดใช้งาน Custom Plugins กลับมาทีละตัว ทำการทดสอบ Performance หลังจากเปิดใช้งานแต่ละ Plugins และเปรียบเทียบผลกับการทดสอบที่ไม่มี Plugins
  1. เปรียบเทียบผลการทดสอบระหว่างมีและไม่มี Plugins
  1. สำหรับ Plugins ที่มีผลกระทบสูง พิจารณาปรับแต่งการตั้งค่า ให้ทดลองใช้ Alternatives หรือ Optimized Versions ของ Plugins นั้นๆ

Kong ใช้ In-memory Buffers สำหรับ Request และ Response ที่มีขนาดเล็ก แต่จะใช้ Temporary files บนดิสก์สำหรับข้อมูลที่ใหญ่กว่า การเขียนและอ่านจากดิสก์จะทำให้เกิด latency สูงขึ้น โดยการรักษาขนาด Request body ให้ต่ำกว่า 8 KB และ Response body ต่ำกว่า 32 KB เพื่อหลีกเลี่ยงการ Buffer ข้อมูลลงดิสก์ ซึ่งจะช่วยเพิ่มประสิทธิภาพการทำงานโดยรวม ซึ่งวิธีการนี้จะไม่เหมาะสำหรับ สำหรับ APIs ที่จำเป็นต้องส่งข้อมูลขนาดใหญ่

วิธีการทำ

  1. ตั้งค่าขนาด Request  ในไฟล์ `kong.conf` โดยกำหนดค่า
  1. ตั้งค่าขีดจำกัดขนาด Response  ในไฟล์ `kong.conf` โดยให้กำหนดค่า
  1. ใช้ Request Size Limiting Plugin โดยเปิดใช้งาน Plugin นี้เพื่อจำกัดขนาด Request
  1. แนะนำให้ปรับแต่ง Upstream Services โดยส่ง Response ที่มีขนาดเล็ก ใช้เทคนิคเช่น Pagination หรือ Streaming สำหรับข้อมูลขนาดใหญ่
  1. ใช้ Response Transformer Plugin โดยใช้ plugin นี้เพื่อลดขนาด Response ถ้าจำเป็น
  1. เราสามารถใช้เครื่องมือมอนิเตอริ่งเพื่อตรวจสอบขนาด Request และ Response วิเคราะห์ Log Files เพื่อระบุ Endpoints ที่มักส่ง Request หรือ Response ขนาดใหญ่

เปลี่ยนผ่านสู่ระบบคลาวด์ที่ปลอดภัยและได้มาตรฐานกับ PROEN Cloud
ติดต่อทีมงานเพื่อรับคำปรึกษาและโซลูชันที่เหมาะกับองค์กรของคุณ

📞 โทร: 02-690-3888
📧 อีเมล: sales@proen.co.th

Recent Post

การจัดการความเสี่ยงคือสกิลที่ Developer ต้องมีติดตัว

ในโลกที่ระบบซอฟต์แวร์กลายเป็นโครงสร้างพื้นฐานของทุกองค์กร ความผิดพลาดเพียงเล็กน้อยในโค้ดหนึ่งบรรทัด อาจทำให้ระบบล่ม ธุรกิจหยุดชะงัก หรือข้อมูลสำคัญสูญหายได้ การจัดการความเสี่ยงจึงไม่ใช่แค่เรื่องของทีม IT Security หรือ SysAdmin แต่เป็นหน้าที่ของ Developer ทุกคนที่มีส่วนร่วมกับระบบนั้น ๆ

Read More »

Automation ระบบที่คิดเพื่ออนาคต ลงทุนเวลาเพื่อให้ได้ผลลัพธ์ที่มากกว่าในระยะยาว

ในสายตาคนนอกวงการ การที่ Developer หรือวิศวกรซอฟต์แวร์เขียน Script ให้งานให้สามารถทำงานได้อัตโนมัติ อาจดูเหมือนเป็นการ “หลีกเลี่ยง” งาน แต่ในโลกจริงของวงการพัฒนาเทคโนโลยี Automation มันคือการลงทุนทางเวลา เพื่อให้ได้ผลลัพธ์ที่มากกว่าเดิมในระยะยาว

Read More »

เป็น Dev ก็ Work from Anywhere ได้แม้ไม่มีคอม…รวมแอปเขียนโค้ดบนมือถือกับฟังก์ชั่นตัวเด็ด!

ในโลกที่ชีวิตของ Developer ไม่จำกัดอยู่แค่หลังโต๊ะทำงาน การเดินทาง นั่งคาเฟ่ หรือช่วงเวลาระหว่างรอรถ ก็สามารถกลายเป็น “เวลาแห่งการสร้างสรรค์” ได้ — เพราะตอนนี้มี แอปเขียนโค้ดบนมือถือ ให้เลือกใช้มากมายที่ช่วยให้ Dev ทำงานได้แม้ไม่มีโน้ตบุ๊กอยู่ใกล้ตัว

Read More »

AI อย่างเดียวคงไม่พอ…ต้องมี Platform ที่ใช่ เพื่อให้ Dev ทำงานง่ายยิ่งกว่าเดิม

ในยุคที่ AI ไม่ใช่เรื่องไกลตัวอีกต่อไป Developer หลายคนเริ่มหันมาใช้เครื่องมือปัญญาประดิษฐ์ เพื่อช่วยเพิ่มประสิทธิภาพในการเขียนโค้ด ตรวจสอบข้อผิดพลาด หรือแม้แต่สร้างโปรแกรมอัตโนมัติขั้นสูง แต่เบื้องหลังการใช้งาน AI ที่ได้ผลจริง สิ่งสำคัญที่ไม่ควรมองข้ามคือ “โครงสร้างพื้นฐาน” ที่ยืดหยุ่น ปลอดภัย และสามารถประมวลผลได้รวดเร็ว ซึ่งเป็นสิ่งที่ PROEN Cloud พร้อมจะมอบให้กับ Dev ทุกคนที่ต้องการก้าวไปอีกขั้น

Read More »