这是一个好的服务器的负载平衡系统吗?
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;
}
你为什么要重新发明轮子?有一个反向代理/负载均衡器,据我所知,它具有您需要的所有功能。
相关文章:
- 使用JSP从服务器检索和显示图像
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 客户端服务器REST API captcha实现
- 正在将base64 jpeg从input-type=file上传到服务器
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- jQuery blueimp文件上传:将N-1个文件上传到IE中的服务器
- 使用jasmine模拟对服务器的调用
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 这是一个好的服务器的负载平衡系统吗?
- 对单个 PHP 脚本的多个 AJAX 调用划分工作负载 = 服务器端多线程
- 只有在服务器负载不高的情况下,才按间隔执行函数
- SignalR web应用程序,笔记本电脑服务器负载测试
- 这是进行服务器负载测试的坏方法吗?
- Grunt -获得服务器与肝脏负载启动和运行
- 500服务器错误(连接重置),JS文件获胜't负载
- 提示客户端服务器通信的网站与负载的图像