เราต้องการทราบว่าอัลกอริทึมใดที่ Docker mesh ใช้เพื่อกำหนดเส้นทางคำขอไปยังคอนเทนเนอร์ นี่คือเหตุผล:
เราปรับใช้แอปพลิเคชันของเรากับฝูงนักเทียบท่าที่โฮสต์เอง เราใช้ docker routing mesh เพื่อส่งทราฟฟิกไปยังโหนดแต่ละโหนด ดังนี้:
- อินเทอร์เน็ต ->
- ไฟร์วอลล์ ->
- ผู้อำนวยการโหลด (nginx) ->
- nginx "การเชื่อมต่อน้อยที่สุด" กำหนดเส้นทางไปยังผู้จัดการ swarm สามคน ->
- นักเทียบท่าตาข่าย ->
- คอนเทนเนอร์แอปใดในหกแอปที่ทำงานบนโหนดนักเทียบท่าที่ไม่ใช่ผู้จัดการที่แตกต่างกันสามโหนด
นักพัฒนาของเราสงสัยว่า docker mesh กำลังกำหนดเส้นทางทราฟฟิกแบบ round robin ซึ่งอาจส่งผลให้คอนเทนเนอร์แอปบางแอปโหลดมากเกินไปพร้อมกับคำขอที่ช้า ขณะที่คอนเทนเนอร์อื่นๆ ใช้งานน้อยเกินไป หากผู้พัฒนาถูกต้อง เราไม่ควรใช้ docker mesh และควรใช้ load director เพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยังคอนเทนเนอร์แต่ละรายการโดยใช้อัลกอริทึมที่ชาญฉลาดกว่า round robin
ในทางกลับกัน หาก docker mesh ติดตามจำนวนคำขอที่กำลังส่งไปยังแต่ละคอนเทนเนอร์ และส่งทราฟฟิกไปยังคอนเทนเนอร์ด้วยคำขอน้อยที่สุด เราก็ไม่จำเป็นต้องทำงานข้าม docker mesh
คำถาม
docker mesh ใช้อัลกอริทึมอะไรในการส่งทราฟฟิกไปยังคอนเทนเนอร์ที่มีอยู่ มันเป็นโรบินธรรมดาหรือไม่?
การกำหนดค่า nginx ของเรา
nginx ของเรารับทราฟฟิกจากอินเทอร์เน็ตและพร็อกซีไปยัง docker mesh บนโหนดตัวจัดการนักเทียบท่าใดก็ได้ในสามโหนด:
document_service ต้นน้ำ {
little_conn;
เซิร์ฟเวอร์ dockermgr1.nosuchdomain:8402;
เซิร์ฟเวอร์ dockermgr2.nosuchdomain:8402;
เซิร์ฟเวอร์ dockermgr3.nosuchdomain:8402;
}
เซิร์ฟเวอร์ {
...
proxy_pass http://document_service;
การกำหนดค่านักเทียบท่าของเรา
ไฟล์ docker-compose กำหนดค่าบริการให้มีตัวจำลองหกตัวบนโหนดตัวเรียกใช้นักเทียบท่าสามโหนด:
รุ่น: "3.4"
บริการ:
บริการเอกสาร:
รูปภาพ: ${IMAGE_LOCATION}documents_service/documentsservice:prod-${COMPOSE_BUILD_TAG:-latest}
container_name: บริการเอกสาร
พอร์ต:
- "8402:80"
...
ปรับใช้:
แบบจำลอง: 6
ตำแหน่ง:
ข้อจำกัด: [node.role != ผู้จัดการ]
ทรัพยากร:
ขีด จำกัด :
หน่วยความจำ: 1024MB
update_config:
ความเท่าเทียม: 1
คำสั่ง: เริ่มก่อน
Failure_action: ดำเนินการต่อ
รุ่น
- นักเทียบท่า 5:19.03.12~3-0~debian-buster
- nginx-เต็ม 1.14.2-2+deb10u4
- docker-compose: 1.27.4