Microservices

หยิบมาจาก Building Microservices, 2nd Edition

What Are Microservices?

Microservices are independently releasable services that are modeled around a business domain

ว่าง่าย ๆ มันคือเราแยก Service ตาม Business domain ให้มันแยกกัน สามารถทำงานแยกกันได้ ซึ่งต่างคนจะต้องต่างทำงานได้เอง แล้วค่อยคุยกันผ่าน Network มันเป็นวิธีการที่เราจะออกแบบ Architecture นึงละกัน

ถ้ามองจากข้างนอก Service ในนั้นแต่ละอันจะเป็นเหมือน Black box ที่มันจะมี business ของมันเอง หมายความว่า เราจะหลีกเลี่ยงการใช้ Database ร่วมกันให้ได้มากที่สุด

Information Hiding

Hide as much as possible inside a component and exposing little as posible via external interface

ทำให้เราสามารถแยก Service ออกจากกันให้ได้มากที่สุด และถ้ามีอะไรเปลี่ยน ก็เปลี่ยนง่าย กระทบน้อย เพราะเราซ่อน Implementation ไว้ใน Service เหลือให้เห็นแค่ External Interface พอข้างนอกหรือข้างในเปลี่ยนอะไร ถ้า Interface ยังเหมือนเดิม ก็ไม่กระทบไร

Hexagonal Architecture ก็คล้าย ๆ กัน คือแยก External Interface ออกมา ทำให้แอพเราจริง ๆ สามารถรันได้อยู่บนหลาย External Interface

Service Oriented Architecture กับ Microservice

Service Oriented Architecture (SOA) คือวิธีการดีไซน์ที่เอาหลาย ๆ Service มาทำอะไรบางอย่าง เอาไว้สร้าง Reuusability ของ software เช่น ใน service เดียว มี user ใช้งานได้หลาย application ซึ่งเราสามารถปรับ (replace) service ได้โดยที่ไม่มีใครรู้ ถ้านิยาม (interface) เรายังเหมือนเดิม บางคนอาจจะซอยออกมาเป็น service ย่อย ๆ แยก database กัน แต่ถ้ายัง deploy ทุกอย่างพร้อมกัน ก็ไม่ใช่ microservice อยู่ดี

Microservice จะคล้าย ๆ กัน เป็นวิธีการที่ทำให้เราออกแบบ soa ได้วิธีนึง

Key concepts

  1. Independent Deployability

    คือเราสามารถ change -> deploy -> release โดยที่ไม่ได้ยุ่งกับ service อื่น สามารถ Manage แยกได้

    ซึ่งการจะทำแบบนี้ได้มันต้อง loosely coupled มากพอ เราเลยต้อง Explicit, well-defined, stable contracts กับ services ต่าง ๆ ซึ่งการทำแบบนี้เราต้องคิดถึงเรื่อง boundaries ของมันตั้งแต่แรกเลย

  2. Modeled Around a Business Domain

    เทคนิคอย่าง DDD ทำให้เราสามารถออกแบบโครงสร้างได้ง่ายขึ้น ซึ่งที่เราจะทำก็คล้ายๆกันก็ได้ในการออกแบบ service boundaries

    การจะสร้าง change ในหลาย ๆ service มันแพง ใช้แรงงานมากกว่า single service (หรือ monolith)

Last updated