Virtualization 101

Gnomerock
horganice
Published in
2 min readMay 18, 2018

หลังจากที่โลกเราอยู่ในยุค Bare Metal มานานนั้น การ provision เครื่อง server เพื่อการ develop, staging หรือ deploy นั้น ค่อนข้างใช้เวลามากซ้ำยังต้องมาเป็นห่วงเรื่องของ Hardware ที่พร้อมจะลาโลกไปได้ทุกเมื่อ

แต่แน่นอนว่าความยากลำบากทำให้มนุษย์สร้างสิ่งที่มาอำนวยความสะดวกให้กับพวกเขา ซึ่งสิ่งที่จะมาเป็นฮีโร่ในงานนี้ก็คือ Virtualization หรือการจำลองเครื่องคอมพิวเตอร์เสมือนขึ้นมานั่นเอง

Virtual Machine (VM)

ในยุคแรกผู้คนอาจจะได้ยิน Virtual Machine กันมาก ไม่ว่าจะด้วยการใช้ VMware Workstation, VMware vSphere, Virtual Box ซึ่งจะขอพูดถึง Architecture ของ Virtual Machine ก่อน

VM Architecture

จากภาพด้านบนจะประกอบไปด้วย

  • Physical ชั้นล่างสุดแน่นอนว่าเราจะต้องมีคอมพิวเตอร์ Physical เพื่อนมารันนั่นเอง
  • Host OS ไม่ว่าจะเป็น Linux, Windows ไปจน MacOS หรือ OS ใดๆก็ตามเพื่อควบคุมการทำงานของคอมพิวเตอร์
  • ถัดมานั้นเป็นพระเอกของ VM นั่นก็คือ middleware ที่เป็นตัวกลางในการควบคุม GuestOS หรือ Virtual Machine น้อยๆของเราให้ทำงานพร้อมๆกันบนเครื่องเดียวกัน ซึ่งในที่นี้จะพบว่าส่วนใหญ่จะใช้ Hyper-V ในการควบคุมการทำงาน การ share resource ของ vm
  • สุดท้ายท้ายสุด คือ VMs ซึ่งใน VMs เหล่านี้เองเป็นจุดที่เราจะใช้ในการนำ Application ของเราไปรัน ซึ่งในการ develop เราก็มักจะตั้งค่าให้ตรงตามเครื่องที่ใช้เป็นเครื่อง Production หรือว่าในการใช้รันบน Production เองก็จะมีประสิทธิภาพมากขึ้นเพราะสามารถ Clone VM เหล่านี้ ไปจนถึงย้ายไปมาระหว่าง Physical เครื่องอื่นๆ ทำให้ Production นั้นมีความยืดหยุ่นมากขึ้น

ตัวอย่างการใช้ VMware

VMware Workstation
Using VMware in Enterprise

ข้อดีของ VM

  • จัดการทรัพยากรเครื่อง, Scale Up-Down ให้เหมาะสมกับ Application ได้ง่าย
  • จัดการสำรองข้อมูลได้ง่ายเพราะสามารถทำ Snapshot ได้
  • สามารถย้าย VM ไปยังเครื่องต่างๆ ได้ง่าย

ข้อเสียของ VM

  • จำเป็นจะต้องมี GuestOS ในการรัน Application เสมอ และทุกครั้งที่ต้อง install GuestOS ทำให้เครื่อง Physical รับภาระเพิ่ม

อ้าว? เครื่องหนักขึ้นเพราะ GuestOS ดังนั้นจึงมีอีกสิ่งนึงที่เกิดมาเพื่อแก้ไขปัญหานี้นั่นก็คือ Docker

Docker

เกิดมาจากการใช้พลังของ Linux Container ในการจำลอง environment ไว้ให้กับ Application โดยที่ไม่จำเป็นต้องใช้ OS ลองมาดูภาพของมันกัน

Docker Architecture

จากภาพจะเห็นได้ว่าสิ่งที่ต่างจาก VM ก็คือ Middleware และ GuestOS ที่หายไป และ middleware นั้นถูกแทนที่ด้วย Docker Engine ซึ่งทำหน้าที่ในการเป็นตัวกลางควบคุม Container ที่บรรจุ Application

Docker Flow

Docker Flow

การใช้ Docker นั้นก็จะมี Flow ที่ซัพซ้อนกว่าการใช้ VM นิดหน่อยเพราะ

  1. เราจะต้องเตรียม environment ต่างๆที่ใช้บน container ของเราซึ่งการเตรียม environment นั้นก็คือการสร้าง Docker Image ซึ่งสามารถที่จะสร้าง Image นี้ขึ้นมาเอง หรือ pull มาจาก Docker Registry ก็ได้ เช่น docker hub
  2. เมื่อเตรียม image พร้อมเราก็สามารถที่จะ push image เพื่อเอา image ไปเก็บบน server อย่าง docker hub เพื่อแบ่งปันแบบ public หรือเก็บ แบบ private เพื่อแชร์กันในทีม
  3. จากนั้นก็แค่เป็นการนำ image มาใช้โดยคำสั่ง docker run ในที่นี้เราสามารถที่จะตั้งค่าต่างๆ เพิ่มเติมได้ไม่ว่าจะเป็น การ bind port เพื่อ expose service หรือ application เพราะ docker engine นั้นถูกสร้างอยู่ในเครื่องของเราและ network เป็น network ภายในของ docker engine และในตัวของ docker engine สามารถที่จะเป็น reverse proxy ทำให้ application สามารถใช้จากเครื่องภายนอกได้

ในส่วนนี้ก็จะเป็นการใช้งานเบื้องต้นเหมาะสำหรับใช้เตรียม Develop Environment ในการพัฒนาโปรแกรมให้มี environment เหมือน production เป็นต้น

สำหรับการใช้งานที่ scale ใหญ่ขึ้นไว้เป็นบทเรียนหน้านะจ้ะ

--

--