Monolithic Architecture เสาหินแห่ง Software

monolithic architecture

Monolithic Architecture การออกแบบและ พัฒนา Software แบบที่จับเอาทุกอย่าง ไปวางไว้ที่เดียวกัน เป็นกลุ่มเป็นก้อนเดียวกัน ทำให้เวลาทำงาน ทุกอย่างต้องถูกทำไปพร้อมๆกัน แยกอออกจากกันไม่ได้

อ้าว…. มันก็ไม่ได้แปลก อะไรนี่น่าการที่เราจะเห็น สถาปัตยกรรมแบบที่ มัดรวม เอาทุกอย่างเข้าไว้ด้วยกัน ในรูปแบบของ Monolithic เพราะมันเป็นสิ่งที่เราพบเห็นมาตลอด

ลองมองไปถึง Website ดูสิครับ ทุกวันนี้ คุณจะเห็น เวลาเราทำ Website ขึ้นมาซัก 1 Web สิ่งที่เราต้องมีคืออะไรบ้าง ก็จะประกอบไปด้วย ส่วนของ หน้าบ้าน และหลังบ้าน

แบ่งเป็น module ต่างๆอย่าง product, customer, content, banner, promotion แล้วก็ admin อะไรประมาณแบบนี้

ทีนี้เราต้องมีอะไร อยู่บนนี้บ้าง ก็มี Hosting 1 ตัวสำหรับวาง code ที่เป็น php เขียนขึ้นมาแบบเป็น MVC โครงสร้าง แล้วก็เอาไปเชื่อมกับ mysql ที่เป็น database ใช้ phpmyadmin เข้าถึง database ได้เลยทันที

ทุกอย่างถูกออกแบบ และสร้างขึ้นมา บน folder เพียง folder เดียวด้วยซ้ำ จากนั้นก็วางไว้บน Hosting ที่มี database ให้เราเชื่อมต่อ

ทีนี้ Software เองมันไม่นิ่งหรอกครับ มันต้องมีการแก้ไข ปรับปรุง อยู่ตลอดเวลา ถ้าคุณไม่ยอมปรับปรุง อะไรเลย ปล่อยเอาไว้เฉยๆ ไม่นาน website ของคุณก็จะตายลงไป เพราะทั้งตัว programing language และ technology มันมีการปรับปรุงไปเรื่อยๆ

ถ้าระบบคุณใช้ PHP 5.3 สร้างขึ้นมา แล้วอยู่ๆ ผู้ดูแล PHP บอกว่าเลือก Support PHP 5.3 แล้วนะต่อไปนี้ สิ่งที่คุณต้องพบเจอคือ เอ…เราไปปรับเป็น PHP 7 ตัว Website เราก็พังพอดีสิ

อันนี้คือเรื่องของการ maintenance นะเนี่ย แล้วไหนจะ ถ้า Website ของคุณ เจอคนเข้ามาใช้งานเยอะๆ แบบว่า อยู่ๆเป็นกระแส Post นี้เกิดเป็น Viral ขึ้นมา คนเอาไป Share กันเพียบ มีคนเข้ามาดูกันเต็มไปหมด Web แม่งล่มซะอย่างงั้น

แล้วเราจะขยาย หรือทำให้มันรองรับคนเข้าใช้งานจำนวนมากๆได้อย่างไร บอกให้เลย ว่ายากไม่น้อย

Monolithic Architecture มีแต่ข้อเสียหรอ

แต่….เดี๋ยวๆก่อน ผมไม่ได้บอกว่า Monolithic Architecture เนี่ย มันไม่ดีไปซะหมดหรอกนะ ไม่ใช่แบบนั้น จริงอยู่ว่าที่เล่ามาทั้งหมด มันอาจจะเป็นข้อจำกัด หรือบางคนมองบางข้อ ว่านั้นเป็นปัญหาไปเลยด้วยซ้ำ

แต่ผมกลับมองต่างออกไปว่า อันที่จริงแล้ว การพัฒนาในรูปแบบ mono ก็เป็นอะไรที่ สะดวกมากๆ เอาเรื่องเลยนะ ถ้าคุณออกแบบระบบดีๆ และทำงานอย่างต่อเนื่อง ลองมองในมุมของนักพัฒนาดูนะ

ถ้าคุณแยกงานกันออกมาเป็น Modules และทำในแต่ละ Module ออกมาเป็น MVC แล้วเข้าถึง database ตรงๆในแต่ละ module เลย อย่างเช่น product ก็ 1 module ส่วน customer ก็อีก 1 module แบบนี้ก็ง่ายและสะดวก

พอมีปัญหาเรื่องการ Update Code คุณก็ต้องทำการ Update ทุกๆ Version สิ เช่น จาก PHP 5.3 ไป 5.4 ไป 5.5 ต่อด้วย 5.6 แล้วก็ไต่ไป 7.0 ไป 7.1 ต่อไปเรื่อยๆ แบบนี้ Code ทั้ง Project ก็ไม่มีพังหรอก ก็เรา Maintenance อยู่ตลอดเวลา

ใช้คนในทีมไม่ต้องเยอะ มีหลายคนก็ใช้ Git Version Control เข้ามาควบคุมงาน พอมีการ Deploy ก็ให้คนๆเดียวเป็นคนจัดการ pull ลง server ไปโดยใช้ master branch ก็เป็นอันผ่านได้

ส่วนการขยาย แม้จะยาก แต่ก็เอาแบบตรงไปตรงมาเลย คือการ ขยายที่ตัว ทรัพยากร เพราะเราก็ใส่เจ้า CPU, RAM, HDD ไปเพิ่มถ้าไม่ได้ ก็ยัด Application ลงไปที่เครื่องอีกเครื่องแล้ววิ่งไปหา application ผ่านทาง load balance แทน

แบบนี้ก็ทำได้เหมือนกัน แม้ข้อเสียจะเยอะ แต่ก็ไม่ใช่ว่าจะไม่มีข้อดีเอาซะเลย ดังนั้นเจ้า Monolithic เอง ก็จัดว่าเป็นรูปแบบของ Architecture ที่ไว้ใจได้อยู่แล้ว เวลาจะเลือกใช้ ผมอยากให้เลือกใช้ให้เหมาะสมกับงานจะเหมาะกว่า

ลองคิดดูสมมุติผมทำระบบ Register ออนไลน์ ในนั้นมีแค่คนเข้ามาทำ Form หน้าเดียวแล้วให้ admin มาดูว่าใครสมัครเข้ามาบ้าง แบบนี้แม้ว่าจะใช้รองรับคนจำนวนมากเป็น 1000 คน แต่วันละหลัก 10-100 ผมก็ไม่จำเป็นต้องทำผ่าน ระบบ Architecture แบบอื่นเลย

Monolithic นี่แหละเอาอยู่ ต้องยอมรับเลยครับ ว่าระบบการออกแบบในรูปของ Microservice ที่จัดว่าเป็น ขั้วตรงข้ามของ mono นั้น เป็นกระแสแรงมาก ชนิดที่ใครๆก็ทำแบบนั้นกันหมด ใครๆก็พากันหันหลังให้ mono กันหมด เพราะมองว่า ดี เท่ห์ ทันสมัย ข้อดีเยอะมากๆ

แต่ผมอยากจะบอกว่า การเลือกใช้ให้เหมาะกับงาน ก็เป็นเรื่องสำคัญครับ

ขอบคุณครับ
ธีรภัทร เกษสกุล

คุณอาจสนใจเรื่อง Serverless คืออะไรกัน

คุณพ่อของน้องเกี้ยมอี๋ ไม่รู้ว่าใครซนกว่ากัน ทำงานเป็นโปรแกรมเม่า Programmer ประจำบ้าน ดูหนัง ดูซีรี่ย์ เล่นเกมส์กับลูกชาย และลงทุนในคริปโต

Leave a Reply

Your email address will not be published.

Back To Top