แนวคิดการรักษาระดับการให้บริการซอฟแวร์ด้วย Microservice Architecture

บทความนี้จะนำเสนอแนวคิดพัฒนาซอฟแวร์ตามสถาปัตยกรรม Microservice เพื่อให้ระดับการให้บริการให้คงอยู่ในระดับสูงตลอดเวลา ทั้งในระหว่างพัฒนา (Dev) ทดสอบ (Test) และปรับใช้ (Deploy)

การจะรักษาระดับการให้บริการให้ได้ในระดับสูง ต้องเข้าใจถึงการออกแบบสถาปัตยกรรมซอฟแวร์ที่ทำให้การ Dev Test และ Deploy ต่อเนื่องกันอย่างไร้รอยต่อ

สถาปัตยกรรมไมโครเซอร์วิส (Microservice Architecture)

Microservice คือการออกแบบให้ซอฟแวร์ (หรือระบบ หรือบริการ) ให้เป็นลักษณะบริการย่อย หลายๆบริการที่ทำงานร่วมกัน

ก่อนหน้านี้เรามักพัฒนาระบบทั้งระบบจากนั้นอัพมันขึ้นเซิร์ฟเวอร์แล้วนำไปใช้ วิธีการแบบนี้มีปัญหาคือ เมื่อใดที่ชุดคำสั่งใดคำสั่งหนึ่งมีปัญหา เราต้องอัพชุดคำสั่งไปขึ้นใหม่ จากนั้นเริ่มต้นรันเซิร์ฟเวอร์ใหม่ ถึงแม้ในช่วงหลังจะมีแนวทางการทำ Automate Testing และ Continuous Integration (CI) สองแนวทางนี้ทำให้การ Dev Test และ Deploy ต่อเนื่องขึ้น แต่ในเชิงสถาปัตยกรรมมันยังคงทำงานด้วยระบบเดียวอยู่

ช่วงหลังจึงเกิดแนวคิดการพยายามแยกส่วนการพัฒนาให้เป็นส่วนย่อย หลายๆส่วน เพื่อให้ทั้ง Test และ Deploy สามารถทำแบบแยกส่วนได้ แนวทางที่ว่านี้เรียกว่า Microservice Architecture

เข้าใจใน Statefull และ Stateless

ก่อนที่จะเริ่มออกแบบตามแนวคิด Microservice สิ่งที่ต้องเข้าใจคือเรื่อง Statefull และ Stateless

Statefull และ Stateless คือคำที่ใช้มองเซิร์ฟเวอร์หรือบริการ ซึ่งถ้าแปลความหมายตรงตัว Statefull ก็คือมีสถานะ ส่วน Stateless ก็คือไม่มีสถานะ หรือในอีกมุมหมายถึงการที่เซิร์ฟเวอร์มองไคลเอนด้วยวิธีการจดจำหรือไม่จดจำสถานะ ยกตัวอย่างการใช้งานจริง อย่างการที่เซิร์ฟเวอร์เก็บคุ๊กกี้ของผู้ใช้ เซิร์ฟเวอร์แบบนี้จะเรียกว่า Statefull ส่วนถ้าไคลเอนใช้ Access Token เพื่อเข้าถึงข้อมูลจะเรียกเซิร์ฟเวอร์แบบนี้ว่า Stateless

Statefull และ Stateless คือสิ่งสำคัญในการออกแบบเซิร์ฟเวอร์ (ต่อจะเรียกว่าบริการ) ให้ไปอยู่ในสถาปัตยกรรมแบบ Microservice

Statefull == Server, Stateless == Serverless

ปัจจุบันเรามีทรัพยากรบนคลาวด์ที่เราสามารถใช้งานได้ในสองรูปแบบคือ รูปแบบเซิร์ฟเวอร์ เช่น VM หรือ SQL Server และอีกรูปแบบคือ Serverless

Serverless คือคำนิยามใหม่ของการเรียกใช้บริการ ซึ่งหมายถึงการเข้าถึงบริการได้ทันทีโดยที่เราไม่ต้องตั้งเซิร์ฟเวอร์ไว้เพื่อรอใช้งาน ในเชิงการพัฒนา Serverless ก็คือเซิร์ฟเวอร์นี่แหละ เพียงแต่ว่าผู้ให้บริการคิดค่าบริการมันตามจำนวนที่ใช้แทนที่จะคิดค่าเช่าตามเวลาเหมือนอย่างเซิร์ฟเวอร์

ในสถาปัตยกรรม Microservice สิ่งที่ดีคือการพยายามออกแบบให้สามารถทำงานได้แบบ Stateless เพราะเราจะสามารถแยกส่วนการพัฒนาได้โดยอิสระ อีกมุมนึง Stateless จะรองรับการ Scale เพื่อเพิ่มระดับการให้บริการทันทีตั้งแต่ต้น

แต่ในการใช้งานจริง บางสถานะการเรายังคงต้องอาศัยการทำงานแบบ Statefull ดังนั้นการใช้จริงเราจึงต้องดูว่าบริการส่วนย่อยทีเราสร้างขึ้นนั้นเป็น Statefull หรือ Stateless และเพื่อให้การใช้งานทรัพยากรเป็นไปอย่างมีประสิทธิภาพ พยายามออกแบบระบบให้เป็น Stateless เพื่อที่จะได้ใช้ทรัพยากรแบบ Serverless แต่ถ้าจำเป็นต้องทำงานลักษณะ Statefull จริงค่อยทำเอาบริการนั้นไปรันบน Server

การปรับใช้แบบอัตโนมัติ

ท้ายที่สุดเพื่อให้เราสามารถ Dev Test และ Deploy ได้โดยที่ระดับการให้บริการไม่ตก เราต้องออกแบบวิธีการทำ Automate Deploy ให้ได้ เพราะใน Microservice เราจะมีบริการย่อยๆเยอะมาก การทำมือ (Manual) แทบที่จะเป็นไปไม่ได้เลยใน Microservice

ทิ้งท้าย

สถาปัตยกรรม Microservice คือพื้นฐานที่สำคัญ แนวคิดการออกแบบบริการแยกส่วนนี้ เมื่อรวมกับการจัดการมันด้วยระบบอัตโนมัติ จะทำให้เราสามารถพัฒนาได้แบบแยกส่วนโดยแท้จริง ทั้งยังสามารถทดสอบและแก้ปัญหาได้แบบแยกส่วน ซึ่งนี่รวมไปถึงทั้งการทดสอบผู้ใช้แบบ A/B Test การแก้ปัญหาบริการย่อยเฉพาะส่วน ซึ่งนี่คือพื้นฐานสำคัญในการรักษาระดับการให้บริการให้คงอยู่ในระดับสูงตลอดเวลา

ที่มา

Leave a Reply

Your email address will not be published. Required fields are marked *