api-gateway-00
ในโลกของการสร้างระบบแบบ API-centric
หรือแยก service ต่าง ๆ ออกมาในรูปแบบของ Microservice นั้น
สิ่งที่มักจะถูกพูดถึงก็คือ API Gateway

ดังนั้นเรามาดูกันว่า

  • API Gateway มันคืออะไร ?
  • API Gateway มีข้อดีและข้อเสียอย่างไรบ้าง ?

มาเริ่มกันเลย

API Gateway คืออะไร ?

เป็นจุดศูนย์รวมของการเข้าถึง API ต่าง ๆ ในระบบ
ทั้งการเข้าถึงแบบ 1:1 และ 1:N
ทำให้การเข้าถึง API ง่ายขึ้น
ทำให้สามารถกำหนดรูปแบบการใช้งานได้ง่ายขึ้น
ตัวอย่างเช่น limit การใช้งาน เป็นต้น
ทำให้สามารถกำหนดเรื่อง authentication และ authorization ได้ง่ายขึ้น
ทำให้สามารถวิเคราะห์การใช้งานได้ง่ายขึ้น

โดยรวมแล้วเป็นอีกหนึ่ง layer
ที่เพิ่มขึ้นมาเพื่อจัดการ API ที่มีจำนวนมากมายนั่นเอง

ลองคิดดูสิว่า
ถ้าระบบที่มีสถาปัตยกรรมแบบ Microservice จริง ๆ
จะมีจำนวน service มากมายเพียงใด ตั้งแต่หลัก 10 ไปจนถึงหลักพัน หลักหมื่น
แน่นอนว่า การเข้าถึงแต่ละ service มันน่าจะยากนะ
นั่งจำ endpoint ของ service กันเยอะเลย !!
ดังนั้น API Gateway น่าจะเป็นอีกหนึ่งตัวช่วยที่น่าสนใจ
แต่ถ้าออกแบบไม่ดีก็บรรลัยได้ง่าย ๆ เช่นกัน !!

แสดงโครงสร้างดังรูป

api-gateway

มาดูข้อดีของ API Gateway กันบ้าง ?

1. แยกส่วนการใช้งาน API จากผู้ใช้งาน
ผู้ใช้งานจะเห็นเพียง API จาก gateway เท่านั้น
ว่าต้องส่ง request ไปที่ไหน ?
มี input อย่างไร ?
ได้ output อย่างไร ?
โดยไม่รู้เลยว่าข้างในทำงานอย่างไร

วิธีการนี้จะส่งผลดีต่อการแก้ไขปรับปรุง API ที่อยู่ด้านในระบบ
โดยไม่กระทบต่อผู้ใช้งานโดยตรง
รวมทั้งซ่อนการจัดการเรื่อง versioning และ service discovery ไว้อีกด้วย

2. ใช้สำหรับป้องกันการโจมตีจากผู้บุกรุก
ทั้ง SQL Injection, XML exploit และ Denial-of-Service (DoS)
เนื่องจากเป็น layer ที่ผู้ใช้งานจากภายนอกจะเข้าถึง API ได้

3. ทำให้ service ภายในใช้งาน protocol ที่หลากหลายได้
ผู้ใช้งานสามารถใช้งานผ่าน HTTP/REST ได้ปกติ
แต่ service ภายในสามารถใช้ protocol ที่หลายหลาย
ในการติดต่อสื่อสารกันได้
เนื่องจากแต่ละ protocol ก็มีข้อดีและข้อเสียแตกต่างกันไป
รวมทั้งทำให้ง่ายต่อการ integrate เข้ากับ Legacy system อีกด้วย
เช่น ProtoBuf, SOAP, RPC, WebService เป็นต้น

4. ช่วยลดความซับซ้อนของ service ต่าง ๆ ลงไป
ความสามารถพื้นฐานต่าง ๆ ของแต่ละ service นั้น
เราสามารถนำมา implement ไว้ใน API Gateway ได้เลย
ทำให้ผู้พัฒนาสนใจเฉพาะ service นั้น ๆ ไปเลย
ไม่จำเป็นต้องไป implement ไว้ในแต่ละ service
เนื่องจากเป็นการเพิ่มความซับซ้อนเข้าไปโดยใช่เหตุ เช่น

  • การ authentication
  • การ authrorization
  • กำหนด usage limit

5. ทำให้ทดสอบระบบได้ง่ายขึ้น
ในการทดสอบแบบ integration นั้น
เราสามารถจำลองหรือ mock service ขึ้นมาได้ง่าย ๆ
เนื่องจากบางครั้ง API ด้านหลังอาจจะพัฒนาไม่เสร็จหรือยังไม่พร้อม

มีข้อดีก็ต้องมีข้อเสียกันบ้างสิ ?

ปัญหาใหญ่ก็คือ Single Point of Failure (SPoF)
ดังนั้นในการออกแบบต้องให้ความสำคัญอย่างมาก
ลองคิดดูสิว่า ถ้า API Gateway พังไป
มันส่งผลกระทบต่อทั้งระบบเลยนะ
และจะ scaling ระบบกันอย่างไร ?

ต่อมาเรื่องของการ configuration routing ของ service ต่าง ๆ
ซึ่งมันเยอะมาก ๆ
ดังนั้นควรต้องมีเครื่องมือและระบบที่สนับสนุนเรื่องเหล่านี้ด้วย
มิเช่นนั้นจะกลายเป็นปัญหาใหญ่ในการจัดการ

สิ่งที่สำคัญมาก ๆ คือ การ deploy ระบบงาน
จำเป็นอย่างยิ่งต้องทำงานแบบอัตโนมัติ
ทั้งการเพิ่ม แก้ไข และ ลบ service
จำเป็นต้องใช้คนที่มีความสามารถ
จำเป็นต้องใช้เครื่องมือที่เหมาะสมกับงาน

Reference Websites
https://dzone.com/articles/why-do-microservices-need-an-api-gateway