我正在开发一个涉及服务器的Node.js项目(为了简单起见,我们将这个服务器想象成一个必须将消息从某些客户端转发到其他客户端的聊天服务器).我需要QoS原因,这个服务器总是可以访问的,所以我想使用集群来划分不同服务器(不同的物理机器)之间的平衡负载,并确保如果服务器出现故障,另一个服务器将准备好服务请求.
我的问题是:在Node.js中这种分布式方法是否可行?
我已经阅读过关于"集群"模块的内容,但是,根据我的理解,它似乎只能在同一台机器上的多处理器上进行扩展.
嗨,我必须从几个Web服务器检索数据.首先,我以用户身份登录我的网站.成功登录后,我必须从不同的Web服务器获取数据并显示.如何与多个服务器共享一个会话.我怎样才能做到这一点?
当我第一次登录时,创建保存在该服务器的临时文件夹中的会话和会话ID.当我尝试访问另一台服务器时,如何使用我登录时已创建的当前会话.有人可以建议解决方案吗?
我有一个laravel REST API,它使用tymondesigns/jwt-auth进行身份验证,并希望将应用程序从单个服务器扩展到多服务器配置,并在前面配备负载均衡器.
该流使用RefreshToken中间件,并且在每个请求之后基本上令牌无效,并且与响应一起返回新的令牌.(https://github.com/tymondesigns/jwt-auth/wiki/Authentication)
如何在多服务器配置中管理无效令牌,其中令牌使用一个服务器无效,而使用无效令牌的新请求在另一个服务器上命中?
生产环境的物理体系结构包括多个执行不同作业的机器(rake任务),所有这些机器都在同一个数据库中.
UPDATE
如果其他作业正在运行,其中一个作业会在一个表上做大,通常会返回一个postgres死锁.
我已经有一个rake任务来优雅地停止其他作业,但我只能从本地机器上执行它.
我想要实现的是:
task :big_update => :environment do
stop_tasks_on_another_servers
# do the SQL UPDATE
...
end
Run Code Online (Sandbox Code Playgroud)
stop_tasks_on_another_servers应该rake task
在其他服务器上执行a .
我最好的尝试是使用https://github.com/capistrano/sshkit gem.与卡皮斯特拉诺一样使用它,但我仍然在这里错过了一步.我正在生产机器的rails控制台上尝试以下操作:
require 'sshkit/dsl'
hosts = ['machine1', 'machine2']
on hosts do
within "/home/me/project/current" do
with rails_env: :production do
rake "stop_tasks"
end
end
end
Run Code Online (Sandbox Code Playgroud)
但它返回:
INFO [70a0610a] Running /usr/bin/env rake stop_tasks on machine1
SSHKit::Command::Failed: rake stdout: Nothing written
Run Code Online (Sandbox Code Playgroud)
我缺少什么或者有更简单的方法来执行远程任务?
我一直想知道; 像Facebook代码的网站如何能够拥有多个服务器?
代码如何考虑到多个服务器将运行相同的代码并从添加更多服务器中获益?
或者,无论代码如何,网络服务器都可以处理这个问题?
链接一些 SQL Server 2008 服务器/实例后,我想对这些服务器进行更通用的查询。我知道我必须像这样指定查询的命运:
select *
from [SRV\INSTANCE].dbname.dbo.foo
Run Code Online (Sandbox Code Playgroud)
但是,我会针对多个链接服务器运行此查询。我也知道这个 select 语句返回的正是SRV\INSTANCE
我需要的:
select ss.name
from sys.servers ss
where ss.server_id > 0
Run Code Online (Sandbox Code Playgroud)
这个,servers\instances
从我想要查询的地方返回所有内容。
在这种情况下,所有数据库都具有相同的结构,所以我想做这样的事情:
select *
from [select ss.name from sys.servers ss where ss.server_id > 0].DBNAME.dbo.foo
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
提前致谢。
我设法Django
和RabbitMQ
和Celery
单机上工作.我已按照此处的说明操作.现在我想让它们一起工作,但是当它们在不同的服务器上时.我不想Django
知道任何事情Celery
,也不Celery
了解Django
.
所以,基本上我只是想Django
将一些消息发送到RabbitMQ
队列(可能是id,任务类型,也许是其他一些信息),然后我想RabbitMQ
将该消息(当可能时)发布到Celery
另一台服务器上.Celery/Django
不应该彼此了解,基本上我想要的架构很容易替换其中任何一个.
现在,我有Django
几次打电话
create_project.apply_async(args, countdown=10)
我想用类似的调用直接替换为RabbitMQ(正如我所说的Django
不应该依赖Celery
).然后,RabbitMQ
应该通知Celery
(当可能时)Celery
并将完成其工作(可能Django
通过REST
接口进行交互).
此外,我需要Celery
在两个或更多服务器上安装工作人员,并且我只想RabbitMQ
根据消息中的某个字段通知其中一个服务器.如果这很复杂,我可以检查每个任务(在不同的机器上),例如:这是你应该做的事情(比如检查消息中的ip地址字段),如果它不仅仅是停止执行任务.
我怎样才能做到这一点?如果可能的话,我更喜欢代码+配置示例而不仅仅是理论解释.
编辑:
我认为对于我的用例芹菜是总开销.使用自定义客户端的简单RabbitMQ路由将完成这项工作.我已经尝试过简单的用例(一个服务器),它运行得很好.应该很容易使通信多服务器准备就绪.我不喜欢芹菜.这是"神奇的",隐藏了太多的细节,并不容易配置.但我会留下这个问题,因为我对别人的意见很感兴趣.