Introduction to Microservice
มาทำความรู้จัก Microservice กันเถอะ!!
This is an introduction to Microservice. What is it? How it has become a trend? Pros and cons of Microservice architecture compared to others and what to consider when implementing Microservice.
ในบทความนี้ เราจะมาทำความรู้จักกับ Microservice มันคืออะไร? ทำไมมันถึงเป็นที่นิยมในปัจจุบัน ข้อดีและข้อเสียของโครงสร้างแบบ Microserviceเทียบกับโครงสร้างแบบอื่นๆ และเราต้องคำนึงถึงอะไรบ้างเมื่อเราต้องการที่จะออกแบบระบบของเราในรูปแบบของ Microservice?
What is Microservice?
Microservice คืออะไร ?
Before we get to know Microservice architecture, we should first explore the meaning of “Monolithic Architecture”
ก่อนที่เราจะรู้จักกับโครงสร้างแบบ Microservice เราควรที่จะทำความรู้จักกับโครงสร้างแบบ Monolithic กันเสียก่อน
Monolithic Architecture
In software engineering, a monolithic application describes a single-tiered software application in which the user interface and data access code are combined into a single program from a single platform.
From the definition defined on Wikipedia, Monolithic Architecture is the application structure where every tasks (e.g User interface, Business logic, Data Access layer) are conducted on a single piece of program on a single platform. Imagine an application that can perform multiple tasks from Authentication, take an order, check stock, to generate annual reports all in one place.
จากนิยามของ Monolithic Architecture ใน Wikipedia สรุปได้ว่า Monolithic Architecture คือการสร้างแอพลิเคชันหรือโปรแกรมขึ้นมาโดยที่รวบรวมการทำงานทุกอย่าง ไว้ในที่เดียวกัน บนแพลตฟอร์มเดียวกัน ไม่ว่าจะเป็นในส่วนของ User Interface, ส่วนของ Logic เช่น ระบบ Authorisation, รับออเดอร์, เช็ควัตถุดิบในสต็อค, การทำรายงานรายรับ-รายจ่ายรายปี
Microservice Architecture
Microservices are an approach to application development in which a large application is built as a suite of modular services (i.e. loosely coupled modules/components). Each module supports a specific business goal and uses a simple, well-defined interface to communicate with other sets of services.
Microservice is different from Monolithic Architecture application. Instead of building an application into a large single piece, performing every tasks, we distribute specific business tasks into different modular services (i.e. loosely coupled modules/components). Each of them is communicating over a web interface.
Microservice แตกต่างจาก แอพลิเคชันที่มีโครงสร้างแบบ Monolithic ตรงที่มีการแบ่งการทำงานออกเป็นส่วนๆ แต่ละส่วนเป็นเอกเทศซึ่งกันและกัน โดยที่ในแต่ละ service จะเชื่อมต่อกันผ่านทาง interface
Each service has its very own database instead of sharing, this help ensure the loosely coupling. Meaning that each of the module do not know well about others. They have less interdependency and coordination. We can implement different type of database to suits the task on that module. And also we can implement each service using different programming languages. This structure allows possible scalability and reliability.
ในแต่ละ service ที่แบ่งออกมาจะเชื่อมต่อไปที่ database ของตัวเอง ซึ่งจะทำให้เราสามารถเลือก database ที่เหมาะสมกับงานนั้นๆได้ รวมไปถึงแต่ละ service ยังสามารถใช้ภาษาโปรแกรมมิ่งที่แตกต่างกันได้ และยังช่วยให้ระบบของเรามีประสิทธิภาพมากยิ่งขึ้น ซึ่งการแบ่งส่วนแบบนี้ทำให้การที่จะขยายระบบในอนาคตทำได้ง่ายมากขึ้น กระทบส่วนอื่นๆน้อยลง ส่งผลให้ระบบของเรามีความมั่นคงมากยิ่งขึ้นนั่นเอง
For instance, the application have separate Authorization service that connect to the mongoDB keeping users information. Taking order is performed in another module that connects to ElasticDB keeping lists of products. Together with other parts, implementing in a separate modules (e.g transactions).
ตัวอย่างเช่น แอพลิเคชันที่แยกการทำงานออกเป็นส่วนของ Authorization ที่เชื่อมต่อกับ MongoDB ทำหน้าที่เก็บข้อมูลของผู้ใช้งาน , service นี้ทำหน้าที่การ log in, log out แยกประเภทของ users และอื่นๆ ซึ่ง module นี้อยู่แยกกับส่วนของ การรับออเดอร์ที่เชื่อมต่ออยู่กับ ElasticDB ที่เก็บรายการสินค้าเอาไว้, servicrนี้ทำหน้าที่ในการรับออเดอร์ จัดการออเดอร์ แล้วส่งต่อรายการสั่งซื้อไปให้ service อื่นจัดการการทำ transactions และงานอื่นๆต่อไป
Pros and Cons of Microservice Architecture
ข้อดีและข้อเสียของ Microservice Architecture
Pros (ข้อดี)
- Enables complex application deployment — ช่วยเพิ่มความสะดวกในการพัฒนาแอพลิเคชันที่มีความซับซ้อน เนื่องจากมีการแบ่งการทำงานออกเป็นส่วนๆ ซึ่งทำให้การทำความเข้าใจระบบทำได้ง่ายมากขึ้น
- Independent of each service — แต่ละ service ถูก implement แยกกันทำให้เราสามารถ deploy และพัฒนาแต่ละ service แยกกันได้ ซึ่งช่วยเพิ่มประสิทธิภาพในการพัฒนาระบบ
- Able to conduct a better test — สามารถที่จะทำการ test แยกกันในแต่ละส่วน ทำให้รวดเร็วมากขึ้น
- Relatively faster — IDE ทำงานได้เร็วกว่า และแอพลิเคชันสามารถที่จะสตาร์ทไวกว่า ส่งผลให้ deploy แอพลิเคชันได้ไวกว่า
- Failure of a service does not affect others — การที่ service อยู่แยกกัน เมื่อเกิดปัญหาที่ service ใด service หนึ่งแอปพลิเคชันจะยังคงสามารถดำเนินระบบต่อไปได้ ยกเว้น service ที่เกิดปัญหา ในกรณีของ Monolithic Architecture การที่องค์ประกอบนึงมีปัญหาอาจทำให้ทั้งระบบ down ได้
- Better Scalability — การที่เราจะพัฒนา service ใหม่ๆในอนาคตทำได้ง่ายมากยิ่งขึ้นและสามารถนำเอา technology stack ใหม่ๆมาใช้ได้ โดยไม่กระทบกับ service ที่ถูก deploy อยู่
Cons (ข้อเสีย)
- More complex distributed system — ต้องทำระบบการเชื่อมต่อของข้อมูลระหว่าง service ที่มีความซับซ้อนมากยิ่งขึ้น เพื่อให้ข้อมูลไม่หายเมื่อ service ใด service หนึ่งล่ม ซึ่งอาจจะต้องใช้ message broker มาช่วยในการส่งผ่านข้อมูล
- Lacks of supported development tools — IDEs ส่วนใหญ่เหมาะกับการพัฒนา Monolithic Architecture มากกว่าทำให้ขาดตัวช่วยในการสร้างระบบ
- Tasks requires multiple services are harder to implement — งานบางอย่างที่ต้องใช้ service หลายอันอาจจะยากในการพัฒนา เนื่องด้วยต้องประสานงานกันระหว่างทีมที่พัฒนาแต่ละ service ให้ดี รวมถึงการต้องใช้ distributed system ที่ดี
- Higher memory consumption — เนื่องจากในแต่ละ service นั้นมีความเป็นเอกเทศจึงมี database และ stack อื่นๆของตัวเอง จึงมีการใช้พื้นที่จัดเก็บข้อมูลเพิ่มมากขึ้นเทียบกับ monolithic architecture
- More Costly to develop — เนื่องด้วยความซับซ้อนของระบบที่มากกว่าทำให้การพัฒนานั้นต้องใช้เงินจำนวนมากกว่า แต่ในระยะยาวนั้น การ maintenance ใช้เวลาน้อยกว่าและประหยัดกว่า
Conclusion
Microservice has become a trend because of its scalability and the independent of components. Developers can easily scale their application and deploy new service independently. Each of the service is fully optimized, since we can select the most suitable technology stack, database, and programming language. However, it is relatively more complex than Monolithic Architecture. Developers need a careful coordination between teams to carry out a fully functional application.
Microservice ได้กลายมาเป็นที่นิยมในปัจจุบันเนื่องจาก scalability ที่ทำให้เราสามารถขยายขนาดของระบบเราได้ง่าย เนื่องจากความเป็นเอกเทศของแต่ละ service การที่จะ maintenance หรืออัปเดตแต่ละ service จึงสามารถทำได้โดยไม่กระทบกับ service อื่นๆ นักพัฒนายังสามารถใช้ database และ ภาษาโปรแกรมมิ่งที่เหมาะสมกับ service นั้นๆได้ ซึ่งทำให้เราสามารถออกแบบระบบให้มีประสิทธิภาพสูงสุดได้ แต่ microservice นั้นมีความซับซ้อนมากกว่า Monolithic Architecture ดังนั้นนักพัฒนาควรที่จะมีการประสานงานกันระหว่างทีมที่ดีเพื่อให้งานออกมาได้อย่างรวดเร็วและมีประสิทธิภาพ
Actually, Monolithic Architecture and Microservice Architecture have different pros and cons. Developers should choose the suitable architecture based on scenarios and requirements to fully utilize the architecture design.
Monolithic architecture และ Microservice architecture มีข้อได้เปรียบและข้อเสียเปรียบที่แตกต่างกันไป นักพัฒนาควรที่จะเลือกใช้ให้เหมาะสมกับสถานการณ์ , ตัวสินค้า , และบริการ เพื่อที่จะใช้ประโยชน์จากลักษณะของโครงสร้างอย่างมีประสิทธิภาพ
Touch Technologies
“ เราไม่ได้ถูกต้องที่สุด แต่เราแสดงสิ่งที่เราทำ ”