2017-01-13 89 views
0

我找不到任何關於swarm模式下docker服務的副本之間的負載均衡算法的文檔。docker swarm模式下服務副本之間的網絡請求負載均衡

我創建從Dockerfile基於圖像mynodeapp:5-秒延遲之後

const LATENCY = 5000; 
var app = require('express')(); 

app.get('/', (req,res)=>{ 
     console.log('Sending response'); 
     setTimeout(function() { 
       res.send('All ok'); 
     }, LATENCY); 
}); 
app.listen(8080); 

的代碼只是發送All ok

FROM node:latest                                           
RUN mkdir -p /usr/src/app                                        
WORKDIR /usr/src/app                                          
COPY package.json /usr/src/app/                                       
RUN npm install                                           
COPY . /usr/src/app                                          
EXPOSE 8080                                            
CMD [ "npm", "start" ]  

npm開始以下server.js。另外,它將Sending response打印到控制檯。

現在,我開始泊塢窗羣模式:

docker swarm init --advertise-addr:eth0 

,並與兩個副本啓動服務:

docker service create mynodeapp --replicas 2 --publish 8080:8080 

結果是

[email protected]:~# docker service ls 
ID   NAME    REPLICAS IMAGE  COMMAND 
233z44bz6sx0 amazing_hypatia 2/2  mynodeapp 



[email protected]:~# docker ps 
CONTAINER ID  PORTS    NAMES 
1f36e0c9eb37  8080/tcp   amazing_hypatia.1.453u2upnyf2nvtwxouopv4olk 

f0fb099a5154  8080/tcp   amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g 

現在,我打開兩個終端並看看兩個容器的日誌:

docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f 

docker logs amazing_hypatia.2.8lbs461uhiv2qvh28433ayi0g -f 

當我運行

curl localhost:8080 

我得到Sending response從一個終端與其它的終端另一個時間一次。所以它好像循環法使用負載均衡

但什麼是真正的負載平衡算法?

回答

2

該算法目前是一種簡單的循環法。已經有人建議啓用最快的預期響應時間算法,該算法可以解決請求被路由到另一個碼頭主機的問題,同時該服務也在本地運行,但是這尚未實現。


docker's swarm networking docs

的羣負載平衡器自動路由HTTP請求到服務 的VIP到活動任務。它使用循環法選擇將後續請求分發給 其他任務。

關於使用最快的預期響應的評論來自我現在無法提取的一些dockercon 2016視頻。

+0

你能提供一些支持你答案的鏈接嗎?我只是找不到任何來源來討論這個問題。 – rlib

+0

更新了鏈接並引用了docker文檔。 – BMitch