【问题标题】:Architecture for distributed data storage分布式数据存储架构
【发布时间】:2015-02-09 03:19:10
【问题描述】:

目前我有两个独立的应用程序。

首先是 RESTful API。

其次是数据存储,可以处理原始数据并将处理后的数据存储在文件系统上。这些按文件夹分组的数据和文件夹 id 按用户 id 分组。

这些应用程序使用 queueCount 队列通过消息队列 (ActiveMQ) 连接。

使用嵌入式文件服务器也通过此队列发送文件。

我想将此数据存储分布在多个节点上。

1) 第一个变体

在 n 个节点中的每一个上设置 ActiveMQ 和当前存储应用程序。 创建将向这些分片提供查询的主节点。 这样,不同用户的数据将存储在不同的节点上。

2) 第二个

使用存储应用设置 n 个节点。为 ActiveMQ 设置一个实例。在 ActiveMQ 中创建 n*queueCount 队列。从存储节点消费相应队列中的消息。

但是这两种变体都不完美,也许您可​​以给我一些建议? 提前致谢

更新: 根据 uuid 均匀分布数据的最佳方式是什么?

【问题讨论】:

    标签: java storage activemq distributed-system


    【解决方案1】:

    为什么不使用像 hdfs 这样的分布式文件系统来分发数据存储。这样一来,复制就被覆盖了,数据是分布式的,您甚至可以使用 hadoop 发送作业来并行处理您的数据。

    【讨论】:

    • 因为我要分散负载,处理数据可能会给处理器带来很大的负载,我需要更多的节点来同时处理很多不同的用户。
    • 选择使用一个队列的第一个选项。如果负载非常高,从而发布率高于消费率,您可以轻松附加消费者,从而扩展。顺便说一句,我最近遇到了推特风暴storm.apache.org,它看起来非常适合此类拓扑
    • ActiveMQ 能包含多少队列就好了?而且它的性能不是没有问题吗?
    • 我会使用一个队列,正如您在activemq.apache.org/clustering.html 看到的那样,发布者和消费者可以来来去去,但队列是静态的,除非您有备份。每个消费者有一个队列是一项重大开销
    • 也许有某种方法可以为一个队列中的不同消费者消费不同类型的消息?例如。基于一些标题?
    【解决方案2】:

    @vvsh,您正在尝试的是具有负载平衡的分布式存储(但我不明白您计划如何将特定用户的文件保留在特定节点上,同时获得均匀的负载分配)。无论如何,在我进一步介绍之前,您尝试的机制很难以稳定的方式实现,相反,请考虑使用 cmets 中提到的一些基础设施,它们可能无法 100% 满足您的要求,但会做很多事情更好的工作。

    现在,为了实现均匀分布,您的架构本质上需要是某种轮辐模型,其中集线器(在您的情况下为主服务器)将从单个队列收集负载,多个 JMS 客户端在多个线程上运行.主服务器本质上必须执行循环调度(如果文件大小相当恒定或文件大小和分配到节点的净总数,您可以根据文件数量选择不同类型的方案)。

    持久性代理必须在每个节点上运行才能实际获取文件、处理它们并持久保存在数据存储中。主服务器和代理之间的通信可以通过 Web 服务或直接套接字(取决于您需要的性能),与代理的基于 Q 的通信可能会阻塞您的 JMS 服务器。

    观察点是文件可以暂存到另一个位置,例如文档/CMS,并且只有 ID 可以与主服务器和代理程序进行通信,从而减少网络负载和 JMS 持久性负载。

    上述机制需要处理异常、故障和重新调度,即保证交付、水平扩展、并发处理和性能优化。在我看来,您最好使用一些经过验证的基础架构,但如果您真的想这样做,上述架构将完成工作。

    【讨论】:

    • 我想均匀分布数据,而不是加载。每个节点都将处理它自己的数据。
    • 您能解释一下“均匀分布数据”是什么意思吗
    • 例如我有 1000 个用户和 10 个节点。我希望每个节点包含大约 100 个用户的数据,因为每个用户的数据量几乎相同。
    • 与上述相同的机制也可以工作,只是代替循环,您将拥有特定的用户到节点的映射。只是出于好奇,您是在生产环境中实现它还是在测试知识/学习?
    • 没有分布式架构的应用程序已经准备就绪,可以在谷歌云中的测试服务器上运行。但它是我的个人项目,我不知道它是否会发布。
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2020-08-05
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多