Home

เปิดโลกของ Container vs Virtual Machine อะไรคือความแตกต่าง และเทคโนโลยีไหนที่ใช่สำหรับธุรกิจของคุณ?
เคยสงสัยไหมว่าทำไมแอปพลิเคชันสมัยใหม่ถึงทำงานได้รวดเร็วและปรับขนาดได้ง่ายขึ้น?
คำตอบอยู่ที่เทคโนโลยี Container และ Virtual Machine นั่นเอง
สองเทคโนโลยีนี้กำลังปฏิวัติวงการ Cloud Computing ทำให้ธุรกิจของคุณสามารถทำงานได้อย่างมีประสิทธิภาพสูงสุด
แต่จะเลือกใช้เทคโนโลยีไหนดี? บทความนี้จะพาคุณมารู้จักกับความแตกต่างของเทคโนโลยีทั้งสอง
และช่วยให้คุณตัดสินใจได้ว่าเทคโนโลยีใดตอบโจทย์ความต้องการ มาไขข้อสงสัยไปพร้อมกัน
ก่อนอื่นเลย อยากให้ทุกคนได้เห็นภาพการ Deploy Application ในแต่ละรูปแบบกันก่อน เพื่อที่จะเข้าใจถึงความเป็นมา
และความแตกต่างระหว่าง Virtual Machine (VM) และ Container ได้ชัดเจนยิ่งขึ้น ทั้งในแง่ของการทำงานและการจัดการทรัพยากรของระบบ
แบบแรก เป็นแบบที่ basic สุดที่ทุกคนเข้าใจได้ง่าย ๆ คือการลง Software บนเครื่อง Server เลย หรือที่เรียกว่า
การ Deploy Application บน Bare-Metal (Hardware) เปรียบเทียบก็คือเราซื้อคอมมาแล้วลงโปรแกรมไปเลย
องค์ประกอบของ Bare-Metal
- Infrastructure จะประกอบไปด้วย Server (Hardware) รวมทั้งสายโยงใยต่าง ๆ
เสียบเครื่องนู้นเครื่องนี้ไปมา (ตัวอย่างในรูป Infrastructure ก็คือ Server หนึ่งเครื่อง) - Operating System เป็นระบบปฏิบัติการหรือ OS ที่ทำการติดตั้งลงไปยัง Server เช่น windows, ubuntu, centos หรือ RHEL
- Bins/Libs เป็นองค์ประกอบสำคัญสำหรับการ Run Application (พวก dependency ต่าง ๆ)
- APP ก็คือตัว Application ที่จะทำการ Run อยู่บน Server
จะเห็นว่าการ Deploy Application แบบ Bare-Metal นั้นจะต้องใช้เครื่อง Server ถึง 3 เครื่องด้วยกัน
ในการ Deploy Frontend, Backend และ Database ข้อเสียของการ Deploy Application บน Bare-Metal หลัก ๆ
เลยคือการใช้ทรัพยากรไม่คุ้มค่าและเปลืองพื้นที่
ต่อมาแบบที่สอง การ Deploy Application ลงบน Virtual Machine หรือที่เราเรียกกันฮิตติดปากว่า VM
แน่นอนว่าข้อดีของ VM ก็คือ การแก้ข้อเสียที่เกิดขึ้นบน Bare-Metal ซึ่งตัว VM จะสร้างขึ้นมาได้นั้นจะต้องทำผ่าน Software ตัวหนึ่ง
ที่มีชื่อเรียกสุดหล่อเท่ว่า Hypervisor ซึ่งเป็นเทคโนโลยีที่คอยมาจัดการทรัพยากรของเครื่องให้กับเครื่อง VM แต่ละตัว
ถ้าให้อธิบายการทำงานของ Hypervisor แบบง่าย ๆ เพื่อให้ทุกคนเห็นภาพ ให้มอง Server เป็น เค้ก 1 ก้อน
และคนที่รอกินเค้กอยู่ก็คือ VM ซึ่งเจ้าตัว Hypervisor ก็เปรียบเสมือนคนที่จะตัดส่วนแบ่งเค้กให้กับแต่ละคน (VM)
ซึ่งคนไหนกินจุ ใช้ (Resource) สูงหน่อยก็จะตัดแบ่งเค้กให้เยอะเป็นพิเศษ คนไหน(VM) ใช้น้อยก็ตัดแบ่งเค้กให้น้อย
สามารถอธิบายโครงสร้างการ Deploy Application ได้ตามรูปด้านล่าง
ซึ่งถ้าเราดูเทียบกับรูปของการ Deploy บน Bare-Metal จะเห็นว่ามีการเพิ่มเข้ามา 2 layer
คือ Hypervisor และ Gust OS โดย Host Operating System ก็คือ Operating System ของ Bare-Metal
จากรูปส่วนสำคัญเลยก็คือเจ้าตัว Hypervisor ซึ่งหากไม่มี software ตัวนี้เราก็ไม่ได้ต่างอะไรจาก Bare-Metal
เพราะไม่สามารถสร้าง VM ขึ้นมาใหม่ได้นั้นเอง ซึ่งตัว Hypervisor ที่เรารู้จักกันในตลาดเช่น Microsoft Hyper-V,
KVM, VMware ESXi และ Nutanix AHV เป็นต้น
นอกจากนี้จะเห็นว่าจากรูปนั้น จะเหลือ Server หรือก็คือ Hardware แค่อันเดียวก็สามารถ Run ได้ทั้ง
Frontend, Backend และ Database ได้บนเครื่องเดียวกันแต่แค่แยกกัน Run อยู่บนคนละ VM ซึ่งแต่ละ VM นั้นจะเป็นอิสระต่อกัน
ข้อดีของ VM
- ความปลอดภัย: เนื่องจากแต่ละ VM มีระบบปฏิบัติการ (OS) ของตัวเอง ดังนั้นจึงแยกตัวจากกันอย่างสมบูรณ์
ทำให้การรัน App ใน VM ตัวหนึ่งไม่ส่งผลกระทบต่อ VM อื่น ๆ แม้ว่าจะอยู่บนเครื่องเดียวกัน - ความยืดหยุ่น: VM สามารถรันระบบปฏิบัติการ (OS) ที่แตกต่างกันบนเครื่องเดียวกันได้
เช่น คุณสามารถรัน Linux และ Windows VM บนเครื่องที่ใช้ Windows ได้ - ความเสถียร: เนื่องจากแต่ละ VM มีทรัพยากรที่แยกจากกัน ทำให้การทำงานของ VM หนึ่ง
ไม่กระทบกับการทำงานของ VM อื่น ๆ ที่อยู่ในเครื่องเดียวกัน
ข้อเสียของ VM
- ทรัพยากรที่ใช้งานมากขึ้น: เนื่องจากแต่ละ VM ต้องการ Guest OS ของตัวเอง จึงใช้ Memory และ Disk มากกว่า
- การ Boot ช้า: การ Start ใช้งาน VM ใช้เวลานานกว่า เพราะต้อง Boot ระบบปฏิบัติการ (OS) เต็มรูปแบบ
แบบต่อมาแบบที่ 3 การ Deploy Application เป็น Container
Container หรือหลายท่านจะคุ้นเคยกับคำว่า Docker ซะมากกว่า ซึ่งต้องอธิบายตรงนี้ก่อนว่า Docker ≠ Container
Docker นั้นเป็นซอฟต์แวร์หนึ่งที่มีความสามารถในการสร้าง Container ขึ้นมาซึ่งนอกจากจะสร้าง Container ได้แล้ว
ตัว Docker เองนั้นเรียกว่ามีความสามารถครบถ้วนตั้งแต่ Build เป็น Image จนกระทั้ง Run เป็น Container
ด้วยเหตุผลที่ Docker สามารถทำให้การใช้งาน Container เป็นเรื่องที่ง่ายและสะดวกขึ้นนี้เองทำให้เป็นที่นิยม
จนหลายท่านอาจจะเข้าใจผิดว่า Docker นั้นเท่ากับ Container
จากรูปนั้นเราจะเห็นว่า จะต่างจาก VM ตรงที่ไม่มี Hypervisor และตัว Container นั้นจะรัน Application ที่แยกจากกัน
แต่ต่างจาก VM ตรงที่ Container ไม่ต้องการ Guest OS ของตัวเอง Container ใช้การแบ่งปัน OS Kernel ของ Host OS ร่วมกัน
แต่ยังคงแยกการทำงานออกจากกันอย่างอิสระ ทำให้การเริ่มต้นใช้งาน(start) Container เร็วกว่าและใช้ทรัพยากรน้อยกว่า VM
ซึ่งส่วนสำคัญของ Container เลยก็คือ Container Runtime จะเป็นส่วนที่คอยรับคำสั่งและเป็นที่สำหรับให้ Container ไป run ได้
(เปรียบเสมือนถนนให้รถยนต์สามารถวิ่งได้) ซึ่งตัว Container Runtime ที่หลายท่านรู้จักกันดีเลยคงเป็น Docker
แต่ยังมีอีกหลายตัวที่สามารถทำงานเป็น Container Runtime ได้และเป็นที่นิยมเหมือนกันเช่น Containerd
และ Cri-o และยังมีตัวอื่น ๆ อีกมากมายที่เป็นที่นิยมเหมือนกัน
ข้อดีของ Container
- ประสิทธิภาพสูง: เนื่องจาก Container ใช้ OS Kernel ร่วมกันและไม่ต้อง Run Guest OS ของตัวเอง
ทำให้ใช้ทรัพยากรน้อยกว่าและ Run Application ได้เร็วขึ้น - ขนาดเล็กกว่า: Container มีขนาดเล็กกว่ามาก เนื่องจากไม่ต้องรวมระบบปฏิบัติการ(OS) ไว้ใน Container
ทำให้สามารถ Run Container จำนวนมากบนเครื่องเดียวกันได้ - การพัฒนาและการ deploy ง่าย: Container สามารถสร้างและทดสอบได้ง่ายในสภาพแวดล้อมที่ใกล้เคียงกับการใช้งานจริง
การ deploy Container จึงรวดเร็วและสะดวกมากกว่า
ข้อเสียของ Container
- การแยกการทำงานไม่สมบูรณ์เท่า VM: เนื่องจาก Container ใช้ OS Kernel ร่วมกัน
การทำงานของ Container หนึ่งอาจกระทบกับอีก Container หนึ่งได้หากมีปัญหากับ OS Kernel - การรองรับหลาย OS ไม่ดีเท่า VM: ในขณะที่ VM สามารถรัน Guest OS ที่ต่างกันได้ แต่ Container ถูกจำกัด
ให้รันแอปพลิเคชันที่ต้องการ OS แบบเดียวกันกับ Host OS (เช่น Host OS เป็น Linux แต่ Container ใช้ OS Windows ซึ่งจะใช้ Kernel ที่ไม่เหมือนกัน)
แน่นอนว่าการย้าย Application ที่จากเดิม Run อยู่บน VM ให้กลายมาเป็น Container เป็นเรื่องที่ยุ่งยากและต้องใช้เวลา
แต่คุณสมบัติ ที่ได้จากการมา Run Application เป็นแบบ Container นั้นมากมาย และเป็นการตั้งต้นเพื่อเปลี่ยนแปลง
การทำงานภายในองค์กรของคุณให้เป็น DevOps หรือ DevSecOps ต่อไป
คุณสมบัติเบื้องต้นที่จะได้รับจาก Container
- Container เหมาะสำหรับกระบวนการการทำ CI/CD
- มีประสิทธิภาพสูงใช้ทรัพยากรน้อย
- Run และ Start ขึ้นมาได้อย่างรวดเร็วเนื่องจากไม่ต้อง boot ทั้ง OS เหมือน VM
- สามารถ Scale เพื่อขยาย Application ได้อย่างรวดเร็วและสามารถทำได้อย่างอัตโนมัติ
- สามารถย้ายไป Run ได้ทั้ง On-premise และ Cloud ได้โดยไม่มีปัญหา
เนื่องจากมีการเตรียมทุกอย่างที่จำเป็นสำหรับ Run Application ไว้ใน image เรียบร้อยครบถ้วน - ลดปัญหาการจัดการเวอร์ชันต่าง ๆ ของ dependencies หรือ library (เพราะรวมอยู่ใน image เดียว)
- Isolation จะมีการแยกการทำงานของแต่ละ Application ที่เป็นอิสระต่อกัน
- ช่วยให้มั่นใจว่า Application จะทำงานเหมือนกันทุก Environment ไม่ว่าจะเป็นการ Run บนเครื่องส่วนตัวหรือย้ายไป Run บน Production
- รองรับการทำงานแบบ Microservices
- และที่สำคัญสุด ๆ คือ Container สามารถ Run ได้บน Platform อย่าง Kubernetes และ OpenShift Container Platform
ตารางเปรียบเทียบ ระหว่าง VM และ Container
มาถึงตรงนี้อาจเกิดความส่งสัยว่า เทคโนโลยีอย่าง “Container” จะมาแทน VM เลยหรือเปล่า คงจะบอกได้ดังนี้ว่า
ในปัจจุบันและอนาคตทั้งสองเทคโนโลยีนี้สามารถทำงานควบคู่กัน และ เสริมซึ่งกันและกันได้ เนื่องจากทั้งคู่นั้นมีจุดเด่น
และการใช้งานที่เหมาะกับความต้องการที่แตกต่างกัน ถ้าจะให้กล่าวง่าย ๆ ให้คุณมอง VM นั้นเป็นรถยนต์ส่วนตัวที่จะให้
ความเป็นส่วนตัวและความปลอดภัยแก่คนขับ (Application) แต่ก็มีข้อเสียในเรื่องของค่าน้ำมันที่แพงและรถติด (Cost และเวลาในการ Boot)
ส่วน Container ก็เปรียบเสมือนรถไฟฟ้าที่สามารถรองรับผู้คน (Application) ในจำนวนมากต่อหนึ่งขบวน(Host VM)
ซึ่งมีข้อดีคือประหยัดกว่าและถึงสถานที่ที่ต้องการได้เร็วกว่า(Cost และ Boot) ซึ่งทั้งสองมีข้อดีและข้อเสียตามที่ได้กล่าวไปก่อนหน้า
ซึ่งต้องบอกว่าเราสามารถนำเทคโนโลยีทั้งสองมาใช้งานรวมกันได้ ตามรูปด้านล่าง
จากรูปเป็นแค่ตัวอย่างการนำมาใช้งานรวมกันเท่านั้น ซึ่งมีอีกหลายวิธีในการใช้งานรวมกันของ Container และ VM
ถึงตรงนี้หวังว่า ทุกคนจะได้รับข้อมูลไปไม่มากก็น้อยเกี่ยวกับ VM และ Container
เพื่อจะช่วยให้คุณเข้าใจถึงข้อดีและข้อจำกัดของแต่ละเทคโนโลยีได้ชัดเจนยิ่งขึ้น เพื่อนำไปใช้เป็นข้อมูลในการตัดสินใจ
เลือกใช้เทคโนโลยีที่เหมาะสมและสอดคล้องกับความต้องการของธุรกิจคุณมากที่สุด เพื่อให้การทำงานมีประสิทธิภาพสูงสุด
และเติบโตได้อย่างยั่งยืนในโลกดิจิทัล ซึ่งสำหรับบริษัทสิริซอฟต์เอง เราเชี่ยวชาญทั้งการใช้ Virtual Machine
และ Container รวมถึงการดึงประสิทธิภาพในการพัฒนาต่อ หากใครสนใจ ให้เราเข้าไปให้คำปรึกษา
สำหรับการจัดการ Virtual Machine และ Container สามารถติดต่อได้ที่ [email protected]
Sirisoft ผู้ให้คำปรึกษาด้านเทคโนโลยีสารสนเทศโดยใช้ DevOps Culture เป็นแนวคิดที่ช่วยพัฒนาและ
ดูแลลูกค้าในรูปแบบสมัยใหม่ และให้บริการออกแบบพัฒนาซอฟต์แวร์โดยใช้สถาปัตยกรรมแบบ Microservices
ในการพัฒนา พร้อมด้วยศักยภาพในการทำงาน และการบริหารบุคลากรที่มีความเชี่ยวชาญด้าน High Code
พร้อมให้บริการด้านเทคโนโลยีแบบ end-to-end ในเรื่องของ Infrastructure Optimization และ Cyber Security
ไปจนถึง Digital Transformation ที่จะช่วยออกแบบซอฟต์แวร์และโครงสร้างระบบไอทีหลังบ้านคุณ
ให้ตอบโจทย์ธุรกิจ เติบโตได้ไว ขยายได้ทันในทุกโอกาสของโลกธุรกิจที่เปลี่ยนแปลงอย่างรวดเร็ว
Page 3 of 3