【问题标题】:what architecture to use for website with cpu intensive server side tasks?具有 cpu 密集型服务器端任务的网站使用什么架构?
【发布时间】:2015-10-27 23:42:28
【问题描述】:

我正在开发一个爱好项目网站。每个用户都在我的数据库中存储了多达数百兆字节的特定于他们的数据。用户可以对数据进行各种类型的统计分析,生成图表供用户查看结果。用户将通过浏览器完成所有这些操作。

我的问题是如何设置服务器端?至少需要支持几千个并发用户。每个用户都应该在会话中对他们的数据集进行一些查询。显然我不能只拥有一个网络服务器。

到目前为止,我的想法是让 Web 服务器接收请求,然后 Web 服务器上的脚本将请求发送到由几台机器组成的集群,这些机器进行数字运算。集群包含一个 master 和几个 worker。所有请求都交给主人。 master 监控 worker 并将请求发送给可用的最佳 worker。工作人员计算出数字并将响应发送回 Web 服务器。然后,Web 服务器将数据发送给构建图表的用户。

这个想法行得通吗?如果是这样,我将如何创建与主服务器的连接?它的联系方式是什么?有没有好的负载平衡软件,这样我就不必开发主控了?

另外,公司如何做类似的事情,或者更确切地说,解决这个问题的最佳方法是什么?我试图查找它,但找不到任何细节。提前致谢。

【问题讨论】:

    标签: architecture distributed-system web-development-server


    【解决方案1】:

    这通常是使用pub/sub 模型完成的。确切的实现取决于您使用的语言/平台,但基本实现如下:

    1. 客户端创建一个写入数据库的“查询对象”,并在message queue 上发送一条消息。
    2. 客户端开始轮询数据库以获取结果(当应用程序基于 Web 时,通常会设置响应队列)。
    3. 工作人员在空闲时轮询队列以获取工作。当他们找到一条消息时,他们会选择它,运行“job/query/whatever”,然后将结果写回数据库供客户提取。

    这个主题有很多种,比如当请求/响应足够小以适合队列消息本身时,您可以消除中间数据库,但这在基于 Web 的轮询模型中会变得很难看,因为您需要将正确的响应返回到正确的 http 响应线程。

    【讨论】:

    • 谢谢。 Web 服务器通常扮演什么角色?例如,假设我有这个 pub/sub 系统作为一个单独的应用程序,我想将它集成到网站中。后端只是一个带有数据库的 Web 服务器。浏览器客户端是否联系 Web 服务器,然后 Web 服务器回复发布/订阅系统的联系信息,以便客户端可以直接与系统通信?还是来自客户端的所有通信都通过 Web 服务器,而 Web 服务器充当客户端和发布/订阅系统之间的中介?理想情况下,我不希望应用程序暴露
    • 是的,Web 服务器充当中介。当客户端发出请求时,Web 服务器将查询请求写入数据库,并将消息丢弃在队列中。 Web 服务器还会在请求查询的状态时检查数据库,并在查询完成时发送响应。
    猜你喜欢
    • 2017-04-10
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多