【问题标题】:Split one request across multiple tomcat servers to fetch data from Cassandra DB跨多个 tomcat 服务器拆分一个请求以从 Cassandra DB 获取数据
【发布时间】:2015-06-21 17:11:23
【问题描述】:

我们有 6 台 tomcat 服务器在环境中运行,我的应用程序战争部署在每台服务器上。在当前场景中,我正在使用分页从 cassandra 获取所需的数据。假设 DB 中有 10,000 条记录,它将先获取 1-1000 条,然后再获取下一组数据。重要的一点是它只使用一个 tomcat 服务器,因为这是一个请求,因此等待时间更长。

现在,我想将此请求拆分到 6 个不同的 tomcat 服务器上,例如第一个 tomcat 将获取 1-1000 行,然后从 1001-2000 获取第二个等。然后将所有响应聚合为单个响应。那么,在 Camel 中是否有任何方法使用 spring DSL 将单个路由请求溢出到多个 tomcat 服务器,这样我可以利用所有服务器来提高性能。感谢您的宝贵意见。谢谢。

【问题讨论】:

    标签: java spring tomcat cassandra


    【解决方案1】:

    不幸的是,无法一次在单个分区中以不同的偏移量对行进行分页。 The protocol spec 定义从每个查询返回的分页状态。然后使用该分页状态来检索下一页的行。分页状态被认为是内部的,不应被操纵。在 java-driver 2.0.10/2.1.6 中有一种机制可以在语句(JAVA-550)上设置分页状态,但是非常严格,分页状态必须从原始查询派生,所以你可以保持该状态稍后再继续查询。

    但是,如果您正在进行范围查询(我怀疑这是因为您有很多行),那么可以考虑使用datastax spark connector,它具有将范围查询分解为令牌范围并通过令牌委派查询的机制范围包括提交给 spark workers 的任务。如果你能以某种方式在你的每个 tomcat 实例中运行一个 spark worker,那可能是一个选择。

    【讨论】:

      【解决方案2】:

      您可以将splitter EIP 与聚合策略结合使用。后者可用于将来自子消息的回复组装成来自拆分器的单个传出消息。您可能还想查看这个Camel Cassandra 组件,因为它非常灵活和健壮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-05
        • 2012-04-13
        • 2018-04-18
        相关资源
        最近更新 更多