ในปัจจุบันไปงานไหน ๆ ก็มีแต่คนพูดถึง Microservice
ว่ามันดีอย่างนั้นอย่างนี้
แต่สำหรับใครก็ตามที่มีประสบการณ์กับ SOA (Service Oriented Architecture)
หรือบางคนอาจจะเรียกว่า Service Oriented Ambiguity ก็ตาม
อาจจะเกิดคำถามขึ้นมาว่า ทั้ง SOA และ Microservice มันเหมือนหรือแตกต่างกันอย่างไรบ้าง ?
SOA ย่อมาจาก Service Oriented Architecture
เป็นรูปแบบหนึ่งของการออกแบบสถาปัตยกรรม Software โดยทำการแยกส่วนการทำงานออกเป็น component ในแต่ละ component ประกอบไปด้วย service ต่าง ๆ ซึ่งทำงานอย่างใดอย่างหนึ่งไปเลย เช่น- Shopping cart service
- Account activation service
- Order validation service
- Order status service
- Consumer คือ ผู้ใช้งานทั้งจากผู้ใช้งาน จาก service อื่น และ ระบบอื่น
- Provider คือ ผู้ใช้บริการ service ต่าง ๆ
มาดู Microservice Architecture กันบ้าง
เป็นรูปแบบหนึ่งของการออกแบบสถาปัตยกรรมของ Software ซึ่งแยกส่วนการทำงานใหญ่ ๆ ออกเป็นส่วนเล็ก ๆ โดยแต่ละส่วนเรียกว่า service แต่ละ service มีขนาดเล็ก แต่ไม่ใช่เล็กแบบ function หรือ method นะ แต่ละ service แยกกันทำงานอย่างชัดเจน แต่ละ service แยกส่วนจัดเก็บข้อมูลออกจากกัน แต่อาจจะ share กันได้บางกรณี แต่ละ service สามารถพัฒนาด้วยภาษาโปรแกรมที่ต่างกัน แต่ละ service ติดต่อสื่อสารกันผ่าน protocol ที่กำหนดร่วมกัน แต่ละ service เป็นอิสระต่อกัน ทำให้สามารถ deploy โดยไม่กระทบ (แต่ต้องทดสอบดี ๆ นะ) แต่ละ service สามารถปิด หรือ ล่มได้ โดยไม่ส่งผลกระทบต่อ service อื่น !! (Design for failure) แต่การออกแบบและพัฒนาไม่ง่ายเลย !! แสดงดังรูปแล้ว SOA กับ Microservice มันแตกต่างกันอย่างไร ?
ในมุมมองนักพัฒนาของผมชอบภาพนี้ มันอธิบายได้ชัดเจนมาก ๆ โดยแต่ละ service ของ SOA และ Microservice สามารถแบ่งไปให้แต่ละทีม หรือ หลาย ๆ ทีมพัฒนาได้ สามารถใช้เทคโนโลยีในการพัฒนาที่แตกต่างกันได้แต่สิ่งที่แต่ละทีมต้องตกลงร่วมกันก่อนคือ รูปแบบของการติดต่อสื่อสารระหว่าง service ว่าเป็นอย่างไรแต่ว่า service ใน SOA มักจะไม่เป็นอิสระต่อกัน !! ซึ่งต่างจาก Microservice ส่งผลให้ Microservice นั้น deploy ได้ง่ายกว่า scale ระบบได้ง่ายกว่า
ส่วนใน SOA นั้น ESB กลับกลายเป็นปัญหาใหญ่ของทั้งระบบ หรือเป็น Single Point of Failure (SPoF) เนื่องจากแต่ละ service ต้องทำการติดต่อสื่อสารผ่าน ESBส่วนเรื่องของการ share ข้อมูลระหว่าง service นั้น มีทั้งข้อดีและข้อเสีย ซึ่งต้องพิจารณาให้ดี ๆ ข้อดีคือแต่ละ service สามารถใช้ข้อมูลร่วมกันได้ง่าย ข้อเสียคือแต่ละ service จะผูกมัดกันอย่างมาก (Tight coupling)