CDIC 2023

สรุป Red Hat Webinar: เพิ่มขีดความสามารถของ Microservices Application บน Kubernetes ด้วย Event-Driven Architecture

ในการออกแบบระบบด้วยสถาปัตยกรรม Microservices Architecture นั้นอาจมีความท้าทายในการเชื่อมผสานการทำงานร่วมกันระหว่าง Service จำนวนมหาศาลเบื้องหลังระบบอยู่มากมาย ซึ่งใน Red Hat Webinar หัวข้อ เพิ่มขีดความสามารถของ Microservices Application บน Kubernetes ด้วย Event-Driven Architecture นี้ ก็จะนำ Apache Kafka มาช่วยตอบโจทย์ดังกล่าว โดยในบทความนี้ทีมงาน TechTalkThai ได้ทำการสรุปเนื้อหาของ Webinar เอาไว้ดังนี้แล้วครับ

Cloud-Native Application คืออะไร? และมีปัญหาอย่างไรในการใช้งานจริง?

ก่อนจะเข้าสู่เนื้อหาในส่วนของ Event Driven Architecture ทาง Red Hat ได้พาเราไปทบทวนกับเรื่องของ Cloud-Native Application ซึ่งเป็นสถาปัตยกรรมหลักสำหรับ Application สมัยใหม่หรือ Modern Application โดยมี Kubernetes เป็นเทคโนโลยีหลักเบื้องหลัง

ใน Cloud-Native Application นั้นมักมีการออกแบบในแบบ Microservices ที่มีการแยกแต่ละส่วนของ Application ออกเป็นส่วนย่อยๆ จำนวนมากที่ทำงานร่วมกัน รวมถึงมีการเรียกใช้บริการหรือข้อมูลจากระบบอื่นๆ ผ่านทาง API จึงส่งผลให้ภายในระบบ Application หนึ่งๆ นั้นมีการสื่อสารภายในและภายนอก Application เกิดขึ้นมากมายผ่านการทำ Integration ร่วมกันระหว่างแต่ละ Service ซึ่งจะต้องมีกระบวนการที่ต้องให้ความสำคัญดังนี้

  • การเปลี่ยน Data Payload ให้เหมาะสมต่อการนำมาใช้งาน ไม่ว่าจะเป็น Data Format หรือ Data Content ก็ตาม
  • การรองรับ Protocol ต่างๆ ที่จำเป็น เพื่อให้ระบบต่างๆ สามารถเชื่อมต่อใช้งานข้อมูลหรือเรียกใช้บริการต่างๆ ได้อย่างยืดหยุ่น
  • การบริหารจัดการ Service แต่ละส่วนโดยอัตโนมัติ เพื่อให้ง่ายต่อการพัฒนา การดูแลรักษา การบริหารจัดการ และการอัปเดต
  • การทำ Re-Route Event ให้กับผู้ใช้งาน เพื่อควบคุมเส้นทางการเรียกใช้บริการหรือข้อมูลต่างๆ ได้ตามความเหมาะสม
  • การเชื่อมต่อ Data Source ที่ต้องการใช้งาน เพื่อให้สามารถนำข้อมูลภายในระบบมาใช้งานได้อย่างมีประสิทธิภาพ

วิวัฒนาการของการทำ Integration นั้นเปลี่ยนแปลงมาโดยตลอด ตั้งแต่การทำ Point-to-Point ที่ผสานแต่ละระบบร่วมกันโดยตรง มาสู่การทำ Enterprise Service Bus ที่เริ่มมีตัวกลางในการผสานระบบ ไปสู่การใช้ Microservices ที่แตกระบบต่างๆ ออกเป็นบริการย่อยและเชื่อมต่อกันด้วย API มาสู่รูปแบบล่าสุดที่เป็น Serverless ซึ่งเป็นการผสานระบบในแบบ Event Driven

แน่นอนว่าในการผสานระบบรูปแบบต่างๆ นี้ Cloud-Native Application นั้นก็มีการใช้งานทั้งในส่วนของ Microservices และ Serverless ได้หลายรูปปแบบ ไม่ว่าจะเป็น API-First, Event Driven หรือ Event Mesh โดยมีเครื่องมือ Open Source ที่หลากหลายมาเป็นตัวช่วย ทั้ง Apache Kafka, Apache Camel, Apache ActiveMQ หรือ 3Scale by Red Hat

อย่างไรก็ดี ความท้าทายส่วนใหญ่ที่เกิดขึ้นในการผสานระบบภายใต้ Microservices นั้นก็คือการที่ระบบแต่ละส่วนต้องมีการทำงานร่วมกันผ่าน API ดังนั้นในบางระบบที่ออกแบบมาไม่ดี หาก API ของบริการย่อยส่วนใดมีปัญหา ก็อาจทำให้ระบบส่วนอื่นมีปัญหาตาม และอาจลุกลามไปจนทำให้ทั้ง Application มีปัญหาได้

ตอบโจทย์ปัญหาของ API ด้วย Event Driven Architecture

แนวคิดของการทำ Event-Driven Architecture (EDA) ถือเป็นแนวคิดที่เกิดขึ้นมานานแล้วและสามารถนำมาประยุกต์ใช้ในการแก้ไขปัญหารูปแบบนี้ได้ ด้วยการเปิดให้มีการสื่อสารระหว่างระบบในรูปแบบของการรับส่ง Message ระหว่างกัน เกิดเป็น Event ของการเรียกใช้บริการ ทำให้ระบบแต่ละส่วนมีอิสระแยกขาดจากกันในการบริหารจัดการ โดยทั่วไปแล้ว Event นี้จะถูกแบ่งออกเป็น 3 ประเภทด้วยกัน ได้แก่

  • Volatile คือ Event ที่มีต้องทำการตอบสนองต่อผู้ร้องขอ ณ ช่วงเวลานั้นๆ ซึ่ง Event ที่เกิดขึ้นในแต่ละช่วงเวลานั้นอาจได้รับคำตอบที่แตกต่างกันออกไป
  • Durable คือ Event ที่จะมีการตอบสนองต่อผู้ร้องขอทุกคนด้วยคำตอบเดียวกันทั้งหมด จนกระทั่งผู้ร้องขอข้อมูลทุกคนจะได้รับคำตอบแล้ว
  • Replayable คือ Event ที่ไม่ว่าจะถูกร้องขอเมื่อใดก็ตาม คำตอบก็จะเหมือนเดิมอยู่เสมอ ณ ช่วงเวลาที่กำหนด

การใช้งาน Event Driven Architecture นั้นจะมี Messaging Service มาคั่นกลางระหว่างการร้องขอเชื่อมต่อผสานระบบเบื้องหลัง เพื่อช่วยทำการบริหารจัดการการร้องขอข้อมูลต่างๆ โดยอัตโนมัติ เพื่อให้ระบบสามารถทำงานแยกขาดจากกันได้อย่างอิสระมากยิ่งขึ้นกว่าการเชื่อมต่อผ่าน API โดยตรง และหาก Service ย่อยใดๆ มีปัญหา ระบบส่วนที่เหลือก็จะไม่เกิดปัญหาตามไปด้วย โดยเมื่อ Service นั้นๆ กลับมาทำงานได้ตามปกติ ระบบก็จะทำการส่ง Message ที่ค้างอยู่ไปยัง Service นั้นๆ เพื่อทำการประมวลผลต่อไปได้

ข้อดีของการนำ Event-Driven Architecture ไปใช้งานนั้นมีด้วยกันหลายประการ ดังนี้

  • จำลองการทำงานในโลกจริง ด้วยการตอบสนองสื่อสารระหว่างแต่ละ Service เสมือนกับสิ่งต่างๆ ในโลก รวมถึงระบบประสาทของมนุษย์
  • ลดการขึ้นต่อกันภายในแต่ละระบบลง (dependency, loos-coupling) สามารถทำการเพิ่มเติมความสามารถใหม่ๆ ให้แต่ละ Service ได้โดยไม่กระทบต่อการทำงานของระบบอื่นๆ
  • สามารถทำ Encapsulation ได้ ทำให้ผู้พัฒนา Service ในแต่ละส่วนนั้นไม่จำเป็นต้องทราบว่า Event ที่เกิดขึ้นกับระบบอื่นๆ นั้นจะถูกนำไปประมวลผลหรือทำงานอย่างไร
  • สามารถเพิ่มขยายระบบเฉพาะส่วนได้ ทำให้สามารถตอบโจทย์การ scale แต่ละ Service ย่อยที่ถูกเรียกงานมากน้อยแตกต่างกันได้อย่างเหมาะสม
  • มี Latency ต่ำในระดับเกือบ Real-Time ลดการรอที่เคยต้องเกิดขึ้นระหว่างแต่ละ Service ลด ทำให้ภาพรวมของระบบมีประสิทธิภาพสูงขึ้น
  • รองรับการใช้งานในระบบ Cloud-Native ได้เป็นอย่างดี สามารถแยกแต่ละ Service ย่อยให้ทำงานเป็นอิสระต่อกันได้บน Node หรือ Server บน Cloud

ส่วนการนำ Event-Driven Architecture ไปใช้งานจริงนั้นก็สามารถทำได้หลากหลาย เช่น

  • Reactive Notification ทำการแจ้งเตือนในแบบ Reactive ได้
  • Behavior Capture เมื่อเกิดเหตุการณ์เชิงพฤติกรรมขึ้น ก็สามารถสร้าง Event เพื่อตอบสนองได้ทันที
  • Cache Store เมื่อมีการเปลี่ยนข้อมูล ก็ทำ Cache ได้ทันที
  • Complex Event Processing ทำการรองรับการประมวลผลที่มีความซับซ้อนสฦูง
  • Company Query Responsibility Segregation (CQRS) แยกการทำ Insert/Update กับ Query อื่นออกจากกัน
  • Streaming Between Data Center รับส่งข้อมูลข้ามระหว่าง Data Center และ Cloud ได้
  • Auditing ตรวจสอบเหตุการณ์ต่างๆ ในขอบข่ายที่สนใจได้อย่างต่อเนื่อง

เมื่อเปรียบเทียบการใช้ระบบ Request-Reply ที่ทำงานแบบ Synchronous กับ Event-Driven ที่ทำงานแบบ Asynchronous แล้ว การทำงานของระบบที่ใช้ Event-Driven จะมีความมั่นคงทนทานที่สูงกว่า, พัฒนาได้ง่ายกว่า, บริหารจัดการได้ง่ายกว่า และสามารถเพิ่มขยายได้อย่างอิสระ เป็นข้อดีที่เหนือกว่าอย่างชัดเจน

สำหรับการออกแบบระบบ Event-Driven ควรจะออกแบบในแบบ Event-Centric ที่มอง Event เป็นศูนย์กลางว่าในการทำงานร่วมกันระหว่างแต่ละภาคส่วนของธุรกิจนั้นจะต้องมีเหตุการณ์การรับส่งข้อมูลหรือคำสั่งใดที่จำเป็นบ้าง 

แนะนำ Apache Kafka ระบบ Open Source Software สำหรับทำ Event Streaming

Apache Kafka คือหนึ่งในเทคโนโลยีที่ได้รับความนิยมสูงทั่วโลก ในฐานะของระบบ Distributed System สำหรับการจัดการกับ Event Stream โดยเฉพาะ โดยสามารถทำการเพิ่มขยายได้ง่าย, มีความมั่นคงทนทานสูง, มี Commit Log, สามารถทำ Distributed Data Streaming และรองรับ Stream Processing Application ได้เป็นอย่างดี

Apache Kafka ถูกออกแบบมาให้เพิ่มขยายแบบ Horizontal Scaling ได้ โดยสามารถเริ่มสร้าง Cluster ที่มี Broker จำนวนไม่มากไปจนถึงหลายพัน Broker ต่อ Cluster ซึ่งการเพิ่มขยายนี้จะไม่ทำให้ Throughput และ Latency ต่อ Node ลดลงมากนัก รวมถึงยังมีการรับประกันลำดับของ Message ได้ โดยมีการจัดเก็บ Log ทำให้สามารถ Rewind/Replay ได้

ส่วนประกอบภายใน Apache Kafka มีดังนี้

  • Kafka Broker สำหรับทำหน้าที่ในการจัดเก็บและจัดส่ง Message ในระบบ โดยต้องใช้ Zookeeper ในการติดตั้งระบบแรกเริ่ม
  • Kafka Producer & Consumer คือ Java-based Client สำหรับทำการรับส่ง Message
  • Kafka Admin Tools เครื่องมือในการบริหารจัดการ Topic, ACL และการติดตามการทำงาน โดยถูกพัฒนาขึ้นมาจาก Java และ Scala

นอกจากนี้ภายใน Ecosystem ของ Kafka ก็ยังมีเครื่องมือที่จะช่วยให้การนำ Kafka ไปใช้งานนั้นเป็นไปได้อย่างสะดวกรวดเร็วยิ่งขึ้น เช่น

  • Kafka Core ระบบหลักของ Kafka ได้แก่ Broker, Producer, Consumer และ Admin Tools
  • Kafka Connect สำหรับใช้เชื่อมต่อกับ Kafka เข้ากับระบบต่างๆ ได้อย่างง่ายดาย
  • Kafka Streams API สำหรับประมวลผลข้อมูลหรือ Message ใน Kafka ได้
  • Mirror Maker / Mirror Maker 2 สำหรับการทำ Replication สำเนาข้อมูลข้าม Cluster

ในการนำ Apache Kafka ไปใช้งานก็มีความสะดวกสบายขึ้นกว่าในอดีต โดยรองรับการติดตั้งบน Kubernetes ได้ เช่น บน Red Hat OpenShift ก็สามารถ Deploy Apache Kafka ได้ทันทีผ่าน Red Hat AMQ Streams ซึ่งเป็นส่วนหนึ่งของ Red Hat Integration โดยมีพื้นฐานจาก Opensource Project  Strimzi

สำหรับการใช้งาน Red Hat Integration นั้น Red Hat จะทำการจัดเตรียมเครื่องมืออื่นๆ เพื่อช่วยให้การใช้งาน Kafka เป็นไปได้อย่างง่ายดายยิ่งขึ้น เช่น การตรวจจับการเปลี่ยนแปลงของ Database เพื่อนำมาใช้ในการ replication หรือนำมาทำ Change Data Capture Solution เช่น Debezium, มี Service Registry สำหรับควบคุม Schema ได้, มี Kafka Connect ให้พร้อมใช้งานได้มากกว่า 300 Connector ผ่าน camel kafka connector

ผู้ที่สนใจสามารถเริ่มต้นเรียนรู้และทดลองใช้งาน Apache Kafka ได้ทันทีที่ https://quarkus.io/guides/kafka และ https://quarkus.io/guides/kafka-streams

สนใจติดต่อ Red Hat ได้ทันที

ผู้ที่สนใจรายละเอียดเพิ่มเติม สามารถศึกษาข้อมูลเพิ่มเติมได้ที่ https://www.openshift.com/ หรือติดต่อทีมงาน Red Hat ประจำประเทศไทยได้ที่ Email rchemae@redhat.com


About techtalkthai

ทีมงาน TechTalkThai เป็นกลุ่มบุคคลที่ทำงานในสาย Enterprise IT ที่มีความเชี่ยวชาญทางด้าน Network, Security, Server, Storage, Operating System และ Virtualization มารวมตัวกันเพื่ออัพเดตข่าวสารทางด้าน Enterprise IT ให้แก่ชาว IT ในไทยโดยเฉพาะ

Check Also

Gartner Hype Cycle ด้าน AI ปี 2023

Gartner ได้ออกคาดการณ์สำหรับการพัฒนาของ AI ในปี 2023 ซึ่งเจาะจงไปที่ Generative AI โดยหัวข้อแบ่งได้ 2 ส่วนคือ นวัตกรรมที่ได้รับการกระตุ้นจาก Generative AI และอีกส่วนคือ …

[รีวิว] Asus Zenbook 14X OLED รุ่น Sandstone Beige สีเบจ ให้ความรู้สึกเหมือนเซรามิก

Asus Zenbook 14X OLED มีการออกแบบที่โดดเด่นในสีเบจ Sandstone Beige เคลือบผิวด้วยเซรามิกรูปแบบใหม่ที่เราไม่เคยเห็นมาก่อนบนฝาแล็ปท็อป มีรูปทรงบางเบา ขนาดหน้าจอ 14.5” (2880×1800) OLED มาพร้อมพลังขับเคลื่อนชิป CPU …