0

背景:我正在设计一个软件应用程序,它可以读取数百万或更多文件并转换或仅解析这些文件。部分需求是构建一个可扩展的分布式系统,以便可以相应地扩展读取和解析。

基本上,文件名的最低限度详细列表是一个数据库,客户端需要访问该列表才能知道接下来需要解析/转换哪些文件。这些文件再次位于另一个服务器/位置。虽然大多数部分都是设计好的,但需要重新审视的一个关键部分是将文件名提供给不同客户的设计。

我现在有两个选择:

  1. 设计一个位于 DB 旁边的服务,并将所有请求引导到文件名并提供给客户端。所以在这种情况下,客户端与服务(预定义的协议/格式)交谈并获取列表。

  2. 设计客户端直接与数据库对话并在客户端内实现同步/通道化。

我对第一个选项的唯一关注是,这是一个可扩展的架构/设计吗?有没有人在可扩展架构中处理过这样一种情况,其中一种资源在扩展中变得至关重要(在我的情况下,它可能是一项服务为所有客户端提供/服务)

4

2 回答 2

2

我建议在您的数据库之上使用像 GigaSpaces (http://www.gigaspaces.com/datagrid) 这样的分布式数据网格。通过这种方式,您可以将数据分区到多台机器上并降低数据库上的争用 - 客户端将从数据网格的不同实例中读取要处理的文件。然后,通过随着负载的增加增加数据网格分区的数量并决定如何在数据网格实例之间对数据进行分区,可以实现可伸缩性。

有几种可能性需要考虑以确保只有一个客户端读取要处理的特定文件,其中一种可能是使用数据网格的获取操作(读取和删除),它确保只有一个客户端“获取”一个文件处理。

GigaSpaces 还提供了一个很棒的监控工具,因此您可以监控您的负载(活跃度、统计数据等)。

于 2012-05-10T05:09:33.490 回答
0

我建议你看看消息队列,例如 Rabbit MQ(http://www.rabbitmq.com)、Microsoft Message Queue (http://bit.ly/GMo4iI) 和 IBM Message Queue (http:// bit.ly/GMo6qY),它已经有了一个可扩展的架构。

您可以设置客户端从队列中请求消息,并配置每个消息正文以包含要处理的文件的详细信息。处理完文件后,客户端可以从队列中删除消息。

您需要设置机制以确保不会同时读取相同的文件等,但这可以在队列级别完成,您可以将每个客户端配置为查看特定的队列或消息优先级。

于 2012-03-24T09:09:52.467 回答