เนื่องจากพบว่าการนำ Docker และ Docker Swarm ไปใช้งานนั้น
มักจะมีปัญหาเรื่องของ performance
ยิ่ง Docker Swarm ยิ่งมีปัญหาเรื่องของ network ที่ช้าอีก
ดังนั้นจึงทำการทดสอบ performance แบบง่าย ๆ ไว้นิดหน่อย
ซึ่งทำให้เห็นและเข้าใจปัญหามากขึ้น

รายละเอียดของการทดสอบ

  • ทดสอบบน Digital Ocean
  • CPU Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
  • Memory 2G
  • OS Ubuntu 16
  • Nginx 1.13.6
  • Docker 17.09.0-ce
  • WRK

การทดสอบใช้ WRK

ยิ่งผ่าน host เท่านั้น เป็นเวลา 20 วินาที (ยิงนานเหนื่อย)

$wrk -t5 -c400 -d20s  http://localhost

การทดสอบแบ่งออกเป็นกลุ่มได้ดังนี้

  • ติดตั้ง nginx บนเครื่อง host โดยตรง
  • ติดตั้ง nginx ด้วย Docker ซึ่งใช้ network ดังนี้ bridge, host และ Cailco
  • ติดตั้ง nginx เป็น service ด้วย Docker Swarm

ทำการทดสอบอย่างละ 5 ครั้ง
เพื่อให้ได้ขอบเขตของการทำงานที่ชัดเจนขึ้น
ได้ผลที่น่าสนใจดังนี้

การติดตั้ง nginx บน host โดยตรงผ่าน apt-get เลย

มีประสิทธิภาพสูงมาก ๆ คือ 10K request ต่อวินาที
สิ่งที่ลืมจดมาคือ min/max ของ response time !!

ต่อมาทำการทดสอบผ่าน docker ด้วย network default คือ bridge
ผลการทำงานตกลงมากอย่างน่าใจหายไปอยู๋มรา 5-6 K request ต่อวินาที
แต่เมื่อเปลี่ยนมาใช้ network host ก็วิ่งขึ้นมาสูงถึง 7-9 K request ต่อวินาที

แต่ตัวที่น่าสนใจว่าคือ Docker Swarm
พบว่าเมื่อสร้าง service ขึ้นมามี replica = 1 ใน Swarm มีเพียงเครื่องเดียวเท่านั้น
แน่นอนว่าใช้ overlay network นั่นเอง
ได้ผลการทดสอบที่น้อยมาก ๆ คือ 3-4 K request ต่อวินาที เท่านั้น
แต่เมื่อทำการเพิ่มค่า replica เป็น 2, 3 และ 4 ตามลำดับ
ได้ผลการทดสอบที่สูงขึ้นเรื่อย ๆ จนไปถึง 7-9 K request ต่อวินาที
ซึ่งทำให้เห็นภาพชัดเจนว่า

ถ้า Docker Swarm มี service ที่ replica เป็น 1
ต้องเสีย overhead เรื่องของ network ไปแน่นอน
แต่เมื่อเพิ่ม replica ขึ้นมา พบว่าการทำงานใกล้เคียงกับการติดตั้งปกติมาก
แต่สิ่งที่ได้กลับมาเพิ่มคือ High Avaiability นั่นเอง

นี่ยังเป็นเพียงการทดสอบแบบง่าย ๆ
ที่สำคัญเป็นแบบ static อีกด้วย
แต่น่าจะทำให้เห็นอะไรมากพอสมควร
ยังมีเรื่องอื่น ๆ อีก เช่นการพูดคุยกันระหว่าง container เป็นต้น

ไปอ่านมามีคำแนะนำให้ใช้ network อื่น ๆ อีก
ไม่ว่าจะเป็น Cailco, Weave เป็นต้น

Tags: