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
Independent Deployability
คือเราสามารถ change -> deploy -> release โดยที่ไม่ได้ยุ่งกับ service อื่น สามารถ Manage แยกได้
ซึ่งการจะทำแบบนี้ได้มันต้อง loosely coupled มากพอ เราเลยต้อง Explicit, well-defined, stable contracts กับ services ต่าง ๆ ซึ่งการทำแบบนี้เราต้องคิดถึงเรื่อง boundaries ของมันตั้งแต่แรกเลย
Modeled Around a Business Domain
เทคนิคอย่าง DDD ทำให้เราสามารถออกแบบโครงสร้างได้ง่ายขึ้น ซึ่งที่เราจะทำก็คล้ายๆกันก็ได้ในการออกแบบ service boundaries
การจะสร้าง change ในหลาย ๆ service มันแพง ใช้แรงงานมากกว่า single service (หรือ monolith)
Last updated