Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Docker Swarm Mode :: Load balance มันทำงานอย่างไร ?

$
0
0

docker-web-00

docker-web-00 จาก blog เรื่อง มาลอง Scale Elasticsearch ด้วย Docker Swarm Mode กันหน่อย  คำถามที่น่าสนใจสำหรับการเริ่มต้นใช้งาน Docker Swarm Mode คือ
  • ถ้ามีหลาย ๆ container แล้วตอนทำงานจริง ๆ มันทำงานบน container ไหน ?
  • ที่บอกว่ามี Load balance มันทำงานจริง ๆ หรือไม่ ?
  • Load balance ทำงานแบบไหน ?
ดังนั้นลองมาหาคำตอบกันหน่อย

เริ่มด้วยการสร้างระบบ web application อย่างง่ายด้วยภาษา Go ขึ้นมา

โดยทำการแสดง Hostname หรือ ชื่อเครื่องออกมาเท่านั้นเอง เมื่ออยู่ใน Docker มันก็คือ container id นั่นเอง [gist id="9e00b841ece6447da36237646940bb41" file="hello.go"] ทำการ compile และทดสอบดูก่อนนะ ว่าทำงานตามที่คาดหวังหรือไม่ จากนั้นทำการสร้างไฟล์ Dockerfile ขึ้นมา เพื่อกำหนดขั้นตอนการทำงานต่าง ๆ ดังนี้ [gist id="9e00b841ece6447da36237646940bb41" file="Dockerfile"] สร้าง image ชื่อว่า web ด้วยคำสั่ง [code] $docker build -t web . [/code]

ทำการ setup Swarm Mode กัน

[code] $docker swarm init [/code] เมื่อทุกอย่างพร้อมก็สร้าง service ใช้กันเลย โดย service ชื่อว่า hello-web [code] $docker service create --publish 8080:8080 --name hello-web web [/code] ลองทดสอบการทำงานผ่าน curl หรือเปิด browser ก็ได้ [code] $curl http://localhost:8080 ได้ผลการทำงานดังนี้ Hello world, I'm running on <container id> [/code]

ทำการ Scale ให้ service ชื่อว่า hello-web มีสัก 10 เครื่อง ด้วยคำสั่ง

[code] $docker service scale hello-web=10 [/code] ต่อมาทำการยิงแบบรัว ๆ ผ่าน curl ได้ผลการทำงานเป็นดังรูป ซึ่งตอบคำถามได้หมดเลย เมื่อยิง request ไปยัง http://localhost:8080 พบว่า
  • แต่ละ request จะกระจายไปยัง container ต่าง ๆ
  • แสดงว่า Load balance ทำงานจริง ๆ
  • จากรูปด้านล่างจะพบว่า Load balance ทำงานแบบ Round-robin
docker-web-01 ต่อไปถ้าเอามา Scale พวก Microservice น่าจะง่ายดีนะ และมีคำถามมากมายจาก Slide เรื่อง What’s New in Docker 1.12 ? ไว้ศึกษากันต่อไป มันเยอะจริง ๆ Code ตัวอย่างอยู่ที่ Github::Up1

Viewing all articles
Browse latest Browse all 1997

Trending Articles