รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

การพัฒนาระบบแบบ Microservice Architecture คืออะไร?

    การพัฒนาระบบแบบ Monolith Architecture
    เป็นการพัฒนาระบบโดยเขียนระบบทั้งหมดรวมกันเป็นชิ้นเดียว (ถ้าเป็น Java ก็อยู่ใน JAR หรือ WAR file เดียวกัน) แล้วนำไปวางบนเว็บเซอร์เวอร์ที่เดียว

    การพัฒนาระบบแบบ Microservices Architecture
    เป็น
    การพัฒนาระบบโดยแยกพัฒนาแต่ละเซอร์วิซออกจากกันโดยชัดเจน โดยกำหนด API ไว้ให้เรียกใช้ แต่ละเซอร์วิซสามารถทำงานได้อย่างเป็นอิสระ มีฐานข้อมูลเป็นของตัวเอง และหากจำเป็นต้องใช้ข้อมูลที่อยู่ในเซอร์วิซอื่น ก็สามารถเรียกใช้ผ่าน API

    จะเห็นว่า Microservices
    ก็คือ SOA (Service-oriented Architecture) ดีๆ นี่เอง ซึ่งเป็นความคิดที่ถูกต้องครับ Microservices เป็นรูปแบบหนึ่งของ SOA ซึ่งมีลักษณะพิเศษเพิ่มอีกหลายอย่าง

    ลักษณะของ Microservices ที่ดี
    1. มีขอบเขตของปัญหาที่เล็ก 
    ถ้าจะให้ดี ต้องทำงานเรื่องใดเรื่องหนึ่งเลยเท่านั้น เช่นระบบการฝากเงินก็ทำแต่ฝากเงินเท่านั้น ส่วนการถอน โอน ก็แยกออกไปอีก

    2. สามารถ build และ deploy ได้ด้วยตัวเอง
    แต่ละ
    service ควรจะเป็นแบบ standalone สามารถ build, deploy และทำงานอย่างอิสระ ไม่ขึ้นอยู่กับ service อื่น ส่งผลให้ Microservice นั้นๆ ทดสอบได้ง่าย integrate ได้ง่าย ทำให้รูปแบบการ deploy เปลี่ยนไปคือ เป็นการ deploy service เล็กๆ หลาย service แทน ส่งผลให้ความเสี่ยงเรื่องการ deploy ลดลงไป

    การที่ Service ไม่สามารถทำงานได้ด้วยตนเอง จะทำให้ทีมไม่สามารถทำงานได้เสร็จในทีมอีกด้วย ต้องรอทีมอื่นทำของบางอย่างให้ก่อน แทนที่จะ Scale ทีมง่ายๆ ทีมใครทีมมันวิ่งกันได้เต็มที่ตามที่เราหวังไว้ ก็จะทำไม่ได้

    3. สามารถทำงานอยู่บน process ของตัวเอง
    เนื่องจากมันทำงานแบบ standalone ทำให้เราสามารถเปลี่ยนแปลงเทคโนโลยีการพัฒนาได้ง่าย แต่ละ service สามารถเขียนด้วยภาษาโปรแกรมที่ต่างกันตามความเหมาะสมได้ สามารถทำงานแยกกันตาม server หรือ VM ก็ได้

    4. สามารถ integrate กับส่วนอื่นๆ ผ่าน interface ที่กำหนด

    แต่ละ Microservice นั้นทำงานแบบแยกกันชัดเจน ติดต่อสื่อสารกันผ่าน interface ส่วนใหญ่จะทำงานอยู่บน HTTP protocol แต่ไม่ใช่ว่าจะต้องผ่าน protocol นี้เสมอนะครับ เช่น Thrift RPC,  Java RMI และ Protocol Buffer เป็นต้น หรืออาจจะผ่าน messaging queue และ notification service ก็ได้ ทำให้การทดสอบระดับ integration สามารถใชวิธีการ mock และ stub ในการทดสอบ service ต่างๆ ได้

    5. มีที่เก็บข้อมูลของตัวเอง
    ถ้าระบบของเราทำการแยกเป็น Microservice แล้ว แต่ที่เก็บข้อมูลหรือ database ยังอยู่ที่เดียวกันนั้นเป็นแนวทางที่แย่มากๆ เนื่องจากมันทำให้ Microservice ไม่เป็นอิสระจากข้อมูล รวมไปถึงโครงสร้าง และที่จัดเก็บข้อมูลนั่นเอง และทำให้ระบบมันผูกติดกันมาก จนเกิดความซับซ้อนในที่สุด

    ดังนั้น Microservice ควรที่จะเป็นที่จัดเก็บข้อมูลของมันเอง โดยไม่กระทบกับระบบอื่นๆ เลย จะสนใจเพียงระบบภายในเท่านั้น

    Microservices Framework มีอะไรบ้าง
    - Sinatra
    - Flask
    - Spark
    - Dropwizard
    - Springboot
    - Silex

    ข้อดี
    ของการพัฒนาระบบแบบ Microservices
    -
    มีอิสระในการพัฒนา แต่ละทีมสามารถทำงานได้เสร็จในทีม โดยไม่ต้องรอทีมอื่นทำของบางอย่างให้ก่อน
    - มีอิสระในการเลือกใช้เทคโนโลยีที่ต่างกัน
    - หากเซอร์วิซหนึ่งพัง เซอร์วิซอื่นๆที่เหลือยังสามารถทำงานต่อได้โดยไม่พังทั้งระบบ
    - การจัดการเซอร์วิซเล็กๆ หลายตัวทำได้ง่ายกว่า
    - การขยายเซอร์เวอร์เพื่อรองรับผู้ใช้งานที่มากขึ้น (เช่น เพิ่มจำนวนเซอร์เวอร์) สามารถทำได้ในเฉพาะเซอร์วิซที่ถูกใช้งานเยอะๆ  แทนที่จะต้องทำกับทั้งแอพพลิเคชั่น
       
    ข้อเสีย
    ของการพัฒนาระบบแบบ Microservices
    - หากการแบ่งเซอร์วิซทำไว้ตอนแรกไม่ดี การแก้ไขในภายหลังจะยากมาก เพราะ  Service อาจถูกเรียกใช้แล้ว การรักษา Backward compatibility จะทำให้การ Refactor โค้ดระหว่างเซอร์วิซยากมากๆ
    - การส่งข้อมูลระหว่างเซอร์วิซนั้นช้ากว่าการส่งข้อมูลภายใน process เดียวกัน (ในกรณี Monolith)
    - ความสอดคล้องกันของข้อมูลจะรักษายากกว่ากรณี Integrated Database
    - การทำ Microservices ให้ได้ดี จำเป็นต้องมีการจัดการ Infrastructure ที่ดีมาก เพราะการ deploy เซอร์วิซจำนวนมากนั้นจะทำ Manual ยากมาก ส่วนใหญ่ต้องใช้การทำ Automation เกือบ 100%

บทความที่น่าสนใจ

บทความ ล่าสุด

บทความ ความรู้ด้านไอที, คอมพิวเตอร์ Techonlogy, Gadget, ความรู้เกี่ยวกับคอมพิวเตอร์ กับทาง SoftMelt.com