簡體   English   中英

這是一個好的服務器的負載平衡系統嗎?

[英]Is this a good server's load balancing system?

我是這個概念的新手,正在考慮如何水平擴展Xepler Node.js框架。

因此,主服務器上的主應用程序會將請求代理到隊列中的第一個集群(可能使用帶Redis的共享內存來檢索)。 每個X請求(取決於服務器的能力,X由我決定,也許使用映射),群集將移到此隊列中的最后一個位置。 這樣,所有集群將僅接收數量減少的請求。

在另一台服務器上的另一個應用程序,每隔X秒將向所有集群發出請求,以檢查某人是否失敗,將其從隊列中刪除(此隊列將在Redis上?)

通常,所有集群都將運行我的Web框架的實例。

這對您來說是一個好的負載平衡系統,還是我完全誤解了它的工作原理? 感謝大伙們

編輯:這就是我的意思(僅作為示例):

var http = require('http'),
     https = require('https'),
    httpProxy = require('http-proxy'),
    proxy = httpProxy.createProxyServer({}),

     clusters = [
        {
            id: 1,
            host: "localhost",
            port: 8080,
            dead : false,
            deadTime : undefined
        },      
        {
            id: 2,
            host: "localhost",
            port: 8081,
            dead : false,
            deadTime : undefined
        }
     ];

http.createServer(function(req, res) {
    var target = getAvailableCluster();

    if (target != -1) {
        proxy.web(req, res, { target: 'http://' + target.host + ':' + target.port });

        res.setTimeout(1e3 * 20, function() {
            target.dead = true;
            target.deadTime = new Date().getTime();
            console.log("Cluster " + target.id + " is dead");
        });
    }   
}).listen(80, function() {
    console.log('Proxy listening on port 80..');
});

proxy.on('error', function (error, req, res) {
    var json;
    console.log('proxy error', error);

    if (!res.headersSent)
        res.writeHead(500, { 'content-type': 'application/json' });

    json = { error: 'proxy_error', reason: error.message };
    res.end(JSON.stringify(json));
});

setInterval(function() {
    var cluster,
        currentTime = new Date().getTime();

    for (var i=0; i<clusters.length; i++) {
        cluster = clusters[i];

        if (cluster.dead && (currentTime - cluster.deadTime) > 1000) {
            cluster.dead = false;
            console.log("Cluster " + cluster.id + " is now alive");
        }
    }   
}, 5000);

function getAvailableCluster() {
    var cluster;

    for (var i=0; i<clusters.length; i++) {
        cluster = clusters.shift();
        clusters.push(cluster);

        if (!cluster.dead)      
            return cluster;
    }

    return -1;
}

你為什么要重新發明輪子? 據我所知,有一個可逆的代理/負載均衡器,它具有您需要的所有功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM