วันพฤหัสบดีที่ 29 มิถุนายน พ.ศ. 2560

ทำความรู้จักกับ Container (ใน Windows Server 2016 และ Microsoft Azure)

    
     สวัสดีครับท่านผู้อ่านทุกท่านสำหรับบทความตอนนี้ของผมจะเป็นเรื่องราวของ ฟีเจอร์หนึ่งที่น่าสนใจในซึ่งอยู่ในWindows Server 2016 และ Microsoft Azure นั่นก็คือ “Container” ครับ  ท่านผู้อ่านบางท่านได้ยินแล้วอาจจะไม่รู้สึกแปลกใจอะไร  เพราะ Container นั้นไม่ใช่ของใหม่ครับ เพราะในฝั่งของ Open Source (Unix และ Linux)  ได้มีการพัฒนาและใช้งานกันอย่างแพร่หลายมานานพอสมควรแล้วครับ  แต่สำหรับฝั่งของทางไมโครซอฟท์นี่คือสิ่งที่ถูกเพิ่มเติมเข้ามาใหม่ใน Windows Server 2016 และใน Microsoft Azure ครับผม
การที่ทางไมโครซอฟท์ได้นำเอา Container เข้ามาใช้งานจะทำให้ การให้บริการเซอร์วิสต่างๆ ของไอทีมีความรวดเร็วและมีความยืดหยุ่นมากขึ้นครับ  เพราะที่ผ่านมาการที่หน่วยงานไอทีจะทำการจัดเตรียมหรือเรียกว่าการ “Provisioning” เซอร์วิสให้กับผู้ใช้งานหรือหน่วยงานในองค์กรนั้นจะใช้เวลาค่อนข้างนานพอสมควร  ถึงแม้ว่า ณ ปัจจุบันจะหน่วยงานทางด้านไอทีได้มีการปรับปรุงและพัฒนาจากเดิมที่ติดตั้งระบบที่ให้บริการเซอร์วิสต่างๆ บนเครื่อง Physical Server มาเป็นการติดตั้งบน Virtual Machine หรือ VM  แทนแล้วก็ตาม  แต่ยังคงใช้เวลาในการเตรียมการ Virtual Machine ต่างๆ เพื่อติดตั้งแอพพิเคชั่นตามที่ผู้ใช้งานต้องการเช่นเดิม อีกทั้งยังติดปัญหาทางด้านเทคนิคสำหรับการเตรียมสภาพแวดล้อมต่างๆ เช่น   OS, การกำหนดค่าต่างๆ, Components หรือส่วนประกอบที่แอพพิเคชั่นนั้นต้องการ และอื่นๆ ซึ่งขึ้นอยู่กับความต้องการของผู้ใช้งาน ซึ่งอาจเกิดปัญหาว่าติดตั้งไม่ครบหรือไม่ถูกต้อง เพราะฉะนั้นทุกอย่างจะต้องเตรียมการให้พร้อมทั้งหมดเพื่อให้  Virtual Machine ดังกล่าวพร้อมให้บริการงานหรือเซอร์วิสต่างๆ ในองค์กรได้ 
จากปัญหาข้างต้นนี้เองจึงมีการคิดค้นและพัฒนาการ Provisioning ให้มีความยืดหยุ่นและมีประสิทธิภาพมากขึ้น  จึงมีการนำเอา Container เข้ามาใช้งานและแก้ไขปัญหาข้างต้นครับ  ก่อนอื่นผมต้องบอกท่านผู้อ่านก่อนนะครับว่า Container จัดว่าเป็น Virtualization เทคโนโลยีแบบหนึ่งครับ ซึ่งต่างจาก Virtualization ที่เราใช้งานกันในปัจจุบัน, ที่เรามีเครื่อง Physical Server 1 ตัวจากนั้นก็ทำการติดตั้งระบบปฏิบัติการ เช่น Windows Server 2012 R2 และทำการติดตั้ง Hyper-V Role เข้าไป จากนั้นเราก็สามารถทำการสร้าง Virtual Machine ขึ้นเสมือนกับเป็นเครื่องคอมพิวเตอร์จริงๆ เครื่องนึงได้เลย จากนั้นก็สามารถติดตั้งระบบปฏิบัติการลงไปยัง Virtual Machine เครื่องดังกล่าว และตามด้วยแอพพิเคชั่นที่ต้องการได้เลยครับ  เรายังสามารถสร้าง Virtual Machine ได้อีกตามความต้องการเลยครับ  โดยที่แต่ละ Virtual Machine จะแยกกันทำงานอย่างเป็นอิสระ เราเรียก Virtualization แบบนี้ว่า “Server Virtualization” ครับ ดังรูปด้านล่างครับผม

ท่านผู้อ่านจะเห็นว่าจากรูปด้านบนซึ่งแสดงถึงภาพรวมของ Server Virtualization ซึ่งก็คือ Hyper-V ที่ท่านผู้อ่านคุ้นเคยและใช้งานกันอยู่นั่นล่ะครับ โดยที่แต่ละ Virtual Machine จะมี ระบบปฏิบัติการหรือ OS เป็นของตัวเองและมีแอพพิเคชั่นที่ติดตั้งบน Virtual Machine ดังกล่าว  โดยที่แต่ละ Virtual Machine ต้องการทรัพายากร เช่น Processor, Memory และ Disk ในการทำงานครับ  นั้นหมายความถ้าเรามีซัก 10 Virtual Machines, เราจะต้องมี OS หรือระบบปฏิบัติการกับแอพพิเคชั่นทั้งหมดตามจำนวน Virtual Machine เช่นกัน  และเมื่อถึงคราวที่เราต้องการใช้งานแอพพิเคชั่นตัวนึงใน Virtual Machine ตัวใดก็ตาม  สิ่งแรกที่จะต้องทำการคือการ Start หรือการ Boot Virtual Machine เพื่อให้ระบบปฏิบัติการที่อยู่ใน Virtual Machine นั้นพร้อมให้บริการ และจากนั้นเราถึงจะทำการ Start หรือเริ่มใช้งานแอพพิเคชั่นนั้นได้อย่างที่เราต้องการครับ ซึ่งกระบวนตั้งแต่เราทำการ Start และ Boot ระบบปฏิบัติการที่อยู่ใน Virtual Machine นั้นบางครั้งใช้เวลานานพอสมควร และเราจะต้องรอมัน ไม่อย่างนั้นเราก็จะไม่สามารถใช้งานแอพพิเคชั่นที่ต้องการได้เลยครับ ที่นี้เรามาดูอีกรูปนึงด้านล่างซึ่งเป็นการนำเอา Container เข้ามาใช้งานครับ
อย่างที่ผมเกริ่นไว้ตอนต้นว่า  Container นั้นเป็น Virtualization อีกแบบนึงที่เรียกว่า “OS Virtualization” ซึ่งมีความแตกต่างออกไปจาก Server Virtualization (Hyper-V) ครับ  โดยที่แต่ละ Container ที่เห็นในรูปนั้นจะมีเพียงแค่แอพพิเคชั่นเท่านั้นครับ และแต่ละ Container จะแชร์ OS ของเครื่องที่ Containers เหล่านั้นทำงานอยู่ครับ และด้วยการทำงานของ Container แบบนี้ทำให้การใช้งานทรัพยากรต่างๆ น้อยลงกว่าเดิมครับ นั่นหมายความว่า Container นั้นมีขนาดเล็กกว่า Virtual Machine ถ้ามองในแง่ของการใช้ทรัพยากรครับ นอกจากนี้แล้วต้องบอกเครื่องที่จะให้ Containers มารันและทำงานได้นั้นจะเป็น Physical หรือ Virtual Machine ที่อยู่ใน Private Cloud หรือ Public Cloud ก็ได้ครับแล้วแต่ความต้องการครับผม 
กลับมามองในส่วนของแอพพิเคชั่นที่อยู่ใน Container นั้นสามารถทำงานหรือใช้งานได้ทันที โดยที่ไม่ต้องรอ Virtual Machine ทำการ Boot ให้เสร็จก่อนเหมือนกับ Server Virtualization ที่เป็นเช่นนี้ก็เพราะว่า Container แชร์การใช้งาน OS (Kernel + Libraries) จากเครื่องที่ Container นั้นทำงานอยู่ครับ หมายความว่าเมื่อไรก็ตามที่เราต้องการรันแอพพิเคชั่นที่ติดตั้งใน Container,  แอพพิเคชั่นนั้นๆ จะสามารถทำงานได้ทันทีครับ  และแต่ละแอพพิเคชั่นที่รันและทำงานอยู่ในแต่ละ Container จะทำงานแยกจากกันโดยที่ไม่มีผลกระทบใดๆ กับแอพพิเคชั่นที่รันใน Container อื่นๆ ครับผม  ดังนั้นคอนเซปของ Container นั้นจึงเหมาะกับการทำงานในองค์กรในด้านต่างๆ ไม่ว่าจะเป็น  Developing และ Testing แอพพิเคชั่น ก่อนที่จะรันมันใน Production, ใช้เป็น Cloud-Based แอพพิเคชั่นและเซอร์วิส หรือจะสำหรับการ Provisioning เซอร์วิสต่างๆ ขึ้นมาเพื่อตอบสนองความต้องการของธุรกิจได้อย่างรวดเร็วและมีความยืดหยุ่นมากขึ้นครับ
เอาล่ะครับหลังจากรู้จัก Container กันไปพอสมควรแล้ว  คราวนี้ผมจะพาท่านผู้อ่านมาทำความรู้จักกับ Container ที่มาใน Windows Server 2016 กันก่อนนะครับว่ามีคอนเซปและรายละเอียดเป็นอย่างไรบ้าง

ใน Windows Server 2016 จะมี Container อยู่ 2 แบบ:
1.  Windows Container
2.  Hyper-V Container


เรามาเริ่มที่แบบแรกคือ Windows Container กันก่อนนะครับ  โดยตัวของ Windows Container เองจะทำงานและมีคอนเซปเหมือนกับ Open Source Containers (Unix หรือ Linux) ครับ โดยที่แต่ละ Container ก็จะมีแอพพิเคชั่นซึ่งรันอยู่ใน Container นั้นๆ โดยจะทำงานใน User-Mode  ซึ่งแต่ละ Container จะทำงานแยกจากกันและยังแชร์ OS และอื่นๆ จากเครื่องที่ Containers เหล่านี้ทำงานอยู่ครับ คอนเซปและรายละเอียดนั้นผมได้ทำการอธิบายไว้ก่อนหน้านี้แล้วครับผม แต่ Windows Container มีเรื่องที่ต้องระวังคือ เรื่องของความปลอดภัยครับ เพราะถ้าหากมีใครก็ตามที่ใช้แชร์ OS (Kernel + Libraries) แล้วพยายามเข้าถึง Container อื่นๆ ซึ่งจะทำให้เกิดปัญหาได้ครับ  รวมถึงเรื่องของการอัพเดท Patches ต่างๆ ด้วยก็อาจมีผลกระทบกับ Container แบบนี้ด้วยเช่นกันครับ
ดังนั้นเพื่อแก้ไขปัญหาข้างต้นทางไมโครซอฟท์ได้สร้าง Container แบบที่สองที่เรียกว่า Hyper-V Container ขึ้นมาครับ โดย Hyper-V Container จะทำการสร้าง Hyper-V Virtual Machine (ไม่เหมือน Virtual Machine ที่ถูกสร้างขึ้นมาจาก Hyper-V ใน Windows Server 2012 R2 นะครับ) ขึ้นมาโดย จะมี OS และ Libraries รวมถึงมีทั้ง Isolated Kernel และ User Modes มาด้วย ซึ่งแตกต่างจาก Windows Server Container ที่ผมได้อธิบายไปก่อนหน้านี้ครับ
นั่นหมายความว่า Hyper-V Container ใช้ Windows Containers ให้รันและทำงานอยู่ภายใน Hyper-V Virtual Machine ของตัว Hyper-V Container ครับผม และยิ่งไปกว่านั้น Hyper-V Container บู๊ทเร็วกว่า Virtual Machine ที่ถูกสร้างจาก Hyper-V ปรกติ อีกทั้งมันได้เตรียม Isolated Kernel และ User Modes มาให้ เพื่อความปลอดภัยในการทำงานและการบริหารและจัดการครับ  และทั้งหมดนี้คือเรื่องราวส่วนหนึ่งของ Container ซึ่งจะเป็นฟีเจอร์หนึ่งที่จะมาพร้อมกับ Windows Server 2016 และใน Microsoft Azureครับผม เอาไว้โอกาสหน้าผมจะนำเอาเรื่องราวของ Container และ มานำเสนอให้ท่านผู้อ่านได้รับทราบและรู้จัก Container มากขึ้นไปอีกครับผม…..