บทความ

กำลังแสดงโพสต์จาก 2015

Docker vs VM vs LXC

รูปภาพ
ในขณะที่โลก devops กำลังตื่นเต้นกับ docker ผมก็พบว่ามันมีงานอะไรบางอย่างที่ docker อาจจะยังทำได้ไม่ดีนัก โดยเฉพาะเวลาที่ผมต้องการ 'ควบคุม' บางสิ่งบางอย่างในระดับลึกๆ และไม่ได้เกี่ยวข้องกับโปรแกรมนั้นๆ โดยตรง เนื่องจาก docker นั้นออกแบบมาเพื่อให้เรียกใช้งานโปรแกรมเพียงโปรแกรมเดียว และการที่มีคนหลายๆ คนพยายามที่จะหา  'ท่าแก้'  ด้วยการเอามา run supervisord เพื่อให้มีหลายๆ process ใน docker ก็แสดงว่ามันยังมีงานบางอย่างที่จำเป็นต้อง run หลายๆ process อยู่ด้วยกัน และท่าแก้ต่างๆ ก็ยิ่งเพิ่มความซับซ้อนให้กับระบบขึ้นอีก จากเรื่องข้างบนทำให้ผมนึกย้อนกลับไปถึงข้อถกเถียงระหว่าง monolithic kernel กับ microkernel โดยหลักการของ docker เทียบได้กับ microkernel คือพยายามแยกส่วนการทำงานออกเป็นส่วนย่อยๆ ที่เรียบง่าย และเมื่อจะติดต่อกับส่วนย่อยอื่นๆ ก็จะทำผ่าน inter-process communication (IPC) ซึ่งถ้าเรามองที่หน่วยย่อยๆ ของ microkernel จะเห็นถึงความเรียบง่าย แต่พอมองภาพรวมที่ทุกๆ หน่วยย่อยจะต้องทำงานร่วมกันโดยการคุยกันผ่าน IPC ก็จะเห็นว่าเราแค่เอาความซับซ้อนจากที่หนึ่งไปใส่ไว้อีกที่หนึ