【问题标题】:Need Design & Implementation inputs on Cassandra based use case需要基于 Cassandra 的用例的设计和实现输入
【发布时间】:2014-02-04 01:44:05
【问题描述】:

我打算将来自商业网站的大批量订单交易记录存储到存储库(这里必须使用 cassandra,即我们的数据库)。让我们将此组件称为 commerceOrderRecorderService。

问题的第二部分是 - 我想处理这些订单并推送到其他下游系统。这个组件可以称为batchCommerceOrderProcessor。

commerceOrderRecorderService 和 batchCommerceOrderProcessor 都将在 Java 平台上运行。

我需要有关这些组件设计的建议。特别是下面的:

commerceOrderRecorderService

  1. 考虑到性能和可扩展性,设计列的最佳方法是什么?我是否应该将整个订单(复杂实体)存储为单个 JSON 对象。订单属性没有搜索要求。我们至少可以等到它们被批处理器处理。考虑 - 单个订单可以包含许多子项目 - 在处理时,每个子项目都可以以不同的方式完成。为这种数据结构设计列可能有点过头了

  2. 什么应该是关键,因为数据量会很高。假设在高峰期每秒进行 10 次交易。在 cassandra 中创建此类事务数据的任何库或最佳实践? TTL也能有效使用吗?

batchCommerceOrderProcessor

  1. 应如何检索行进行处理?
  2. 如何确保批处理器的多线程实现(也可能在多个节点上运行)具有行级隔离。也就是说,没有两个实例会同时读取和处理同一行。没有重复处理。
  3. 如何在一段时间后清除数据,同时对压缩等 cassandra 进程友好。

欣赏设计输入、代码示例和库指针。谢谢。

【问题讨论】:

  • 考虑到安装数据库服务器的容易程度以及数据库服务器 cassandra 的具体类型,我认为您选择 cassandra(“这是我们的数据库”)的动机是错误的。
  • @flup,如果你愿意,它就像一个设计约束,基于遗留。随意对您认为有意义的事情进行更多说明。我真的希望在给定的限制范围内输入。
  • 我的意思是,不要仅仅因为你已经有了一个nosql数据库,而是因为你需要可扩展性。关于订单的问题:你能给出系统需要做什么的更功能性的描述吗?样品订单是什么样的?它去哪儿了?按照我现在阅读的方式,每个订单都被分解成订单行,这些订单行分布在不同的系统中。它是否正确?如果是这样,接下来会发生什么,系统是否有任何其他职责,例如将分布式线路的状态组合回订单状态?
  • 订单将流向订单管理系统,在 RDBM 中持久化,等等。但是订单下游发生的事情与这个问题无关。就 commerceOrderRecorderService 而言,它只是可靠地持久化订单,在持久化之前检查重复的订单 ID。它甚至不关心订单项的组成、价值等。它与有效负载完全无关。

标签: locking cassandra batch-processing isolation


【解决方案1】:

这个例子可能会有所帮助。它使用 jmxbulkloader 加载大量事务,然后将结果批处理到一定大小的文件中,以便在其他地方传输。它是多线程的,但在同一个进程中。

https://github.com/PatrickCallaghan/datastax-bulkloader-writer-example

希望对您有所帮助。顺便说一句,它使用最新的 cassandra 2.0.5。

【讨论】:

  • 我会检查一下。感谢您的回复。
【解决方案2】:

根据您系统的整体要求,采用由以下组成的架构可能是可行的:

  1. Cassandra 来存储订单、分析和您拥有的一切。
  2. 消息队列 - 您的商业订单记录服务将简单地将新订单排入事务和持久队列并返回。可扩展性和性能在这里应该不是问题,因为您可以使用单个队列服务器轻松实现每秒数千个事务。您可以将 RabbitMQ 视为可用的选择之一。
  3. 流处理框架 - 您可以使用 Twitter Storm 等流框架以可扩展的方式从队列中读取消息流。你可以在 Java 中实现,而不是在 Storm 中实现 3 个简单的流水线流程:

    a) Spout 进程将下一个订单从队列中取出并传递给 第二道工序
    b) 第二个过程称为 Bolt,它将每个下一个订单插入 Cassandra 并将其传递给第三个 Bolt
    c) 第三个 Bolt 流程,将订单推送到其他下游系统。

这样的架构提供高性能、可扩展性和近实时、低延迟的数据处理。考虑到 Cassandra 在高速数据写入方面非常强大,但在读取顺序记录列表方面并不那么强大。我们在 InnoQuant MOCA 平台中使用 Storm+Cassandra 组合,并根据硬件处理 25.000 tx/秒甚至更多。

最后,您应该考虑这样的架构是否适合您的场景。如今,几乎任何单机数据库都可以轻松实现 10 tx/秒。

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多