【问题标题】:What is the best approach to build a system with high amount of data communication?构建具有大量数据通信的系统的最佳方法是什么?
【发布时间】:2012-11-22 14:58:50
【问题描述】:

你好

我有一个缓存服务器(用 Java+Lucene 框架编写),它保存大量数据并根据请求查询提供它们。

它基本上是这样工作的:

  1. 在启动时,它连接 DB 并将所有表存储到 RAM。
  2. 它监听请求并提供适当的数据作为数组列表(大约 1000 - 20000 行)
  3. 当用户访问网页时,它会连接到缓存服务器,请求并显示服务器响应。

由于内存问题,我计划在不同的实例中运行 Web 和缓存应用程序。缓存服务器作为服务,web 在 Tomcat 上。

您对如何在 web 端和缓存服务器之间建立通信有什么建议?

我需要将带有数组列表的大量数据从一个实例传递到另一个实例。我应该考虑 Web 服务(xml 通信)、nio 套接字通信(可能是 Apache MINA)还是像 CORBA 这样的解决方案?

谢谢。

【问题讨论】:

    标签: java web-services corba apache-mina high-traffic


    【解决方案1】:

    这在很大程度上取决于您未指定的注意事项。

    1. 什么是客户端?例如,如果您的客户端是运行 AJAX 的 javascript,那么显然 HTTP 上的东西比专有的 UDP 解决方案更有用。
    2. 它在哪个网络上工作?本地网络的行为与互联网不同,而移动互联网则与两者截然不同。
    3. 您可以如何巧妙地使用缓存?如果您使用 HTTP,您可以很好地控制(通过 HTTP 标头)客户端缓存和网络缓存,以及大量可以同时使用这两者的现有软件。

    还有许多其他因素需要考虑,并且有许多现有的系统实现可以满足更常见的需求。根据您提供的(不是很详细的)描述,我建议您查看Redis

    【讨论】:

    • 有一个 JSP 显示了一些类别和子项。该页面调用一些方法,这些方法在页面加载期间返回类别和内容数据。没有阿贾克斯。就像这样:jsp->(搜索查询)->Java 接口->缓存服务器然后缓存服务器->(结果数据)->Java 接口-> jsp。是的,它是一个本地网络。它们都将在同一台机器上运行。
    • JSP 端有什么重要的处理吗?将缓存服务器和 JSP 服务器分开实际上是在将两者之间的处理分开,还是只是为了减轻处理缓存服务器的许多连接的负担?
    • JSP 端必须处理非常高的流量。在这种流量的情况下,即使结果集也会成为 JVM 的内存成本。因此,由于内存问题,决定将它们分开。因此我需要两个不同模块之间的通信协议。
    • 如果 JSP “重”的原因是它从缓存接收轻量级数据并对其进行大量处理,我将在它们之间分离并使用基于 HTTP 的协议(如我预计 HTTP 处理的开销会相对低)。我会将其实现为某种 Servlet,而不是使用 MINA(这很棒,但是对 MINA 服务器进行编程对于这种需求来说是一种过度杀伤力)。对于数据序列化,我会使用 JSON 而不是 CORBA 或 XML,因为它轻量级且更易于使用。
    • 另一方面,如果 JSP 处理只是缓存数据的格式化,我会把它放在缓存上,并在前面放一个大内存 HTTP 缓存(例如 squid 或 trafficserver)其中。否则将毫无意义,因为在缓存服务器上将数据格式化为 Corba 或 JSON 与 JSP 没有太大区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2018-08-30
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多