目前,我们在单个云服务器上设置了所有设置,包括:
现在我们正在考虑将主要组件拆分为单独的服务器,例如单独的数据库服务器,媒体文件的单独存储,负载平衡器后面的Web服务器。原因是不支付一台重型服务器并使用负载平衡器按需创建服务器以降低成本并提高整体速度。
我对芹菜很困惑,有没有人在负载均衡器后面的多个生产服务器上使用过芹菜?任何指导都将不胜感激。
考虑一个小用例,目前在单个服务器上是如何完成的(混淆是当我们使用多个服务器时如何完成):
abc.pptx
文件 - >参考存储在数据库 - >存储在服务器磁盘上docsplit
考虑到上述用例,如何设置多个可以执行相同功能的Web服务器?
答案 0 :(得分:4)
强大简化处理的是一些共享存储,可从所有协作服务器访问。通过这样的设计,您可以在更多服务器之间分配工作,而无需担心下一个处理步骤将在哪个服务器上完成。
如果您可以使用某些云存储,例如AWS S3,请使用它。
如果您的服务器也在AWS上运行,您不需要为同一区域内的流量付费,并且传输速度非常快。
主要优点是,您的数据可以在相同存储桶/密钥名称下的所有服务器上获得,因此您无需担心谁在处理哪个文件,因为所有文件都在S3上有共享存储。
注意:如果您需要删除旧文件,您甚至可以在给定存储桶上设置一些策略文件,例如:删除超过1天或1周的文件。
还有更多选项
对于小文件,你甚至可以使用Redis,但这样的解决方案是有充分理由的,很少见。
答案 1 :(得分:2)
Celery实际上非常简单,因为您已经将任务放在队列中了。随着更多工作人员的变化,每个工作人员都会接受队列中的下一个工作 - 因此多个工作人员可以一次处理,每个工作人员都在自己的机器上。
这有三个部分,你已经有了其中一部分。
以下是您设置的方式:
def my_view(request):
# ... deal with storing the file
file_in_db = store_file(request)
my_process_file_task.delay(file_in_db.id) # Use PK of DB record
# do rest of view logic...
python manage.py celery worker --loglevel=INFO -Q default -E
然后,当您添加更多计算机时,您将拥有更多工作人员,并且工作将在它们之间进行分配。
要确保的关键事项: