构建具有大量数据通信的系统的最佳方法是啥?
Posted
技术标签:
【中文标题】构建具有大量数据通信的系统的最佳方法是啥?【英文标题】:What is the best approach to build a system with high amount of data communication?构建具有大量数据通信的系统的最佳方法是什么? 【发布时间】:2012-11-22 14:58:50 【问题描述】:你好
我有一个缓存服务器(用 Java+Lucene 框架编写),它保存大量数据并根据请求查询提供它们。
它基本上是这样工作的:
-
在启动时,它连接 DB 并将所有表存储到 RAM。
它监听请求并提供适当的数据作为数组列表(大约 1000 - 20000 行)
当用户访问网页时,它会连接到缓存服务器,请求并显示服务器响应。
由于内存问题,我计划在不同的实例中运行 Web 和缓存应用程序。缓存服务器作为服务,web 在 Tomcat 上。
您对如何在 web 端和缓存服务器之间建立通信有什么建议?
我需要将带有数组列表的大量数据从一个实例传递到另一个实例。我应该考虑 Web 服务(xml 通信)、nio 套接字通信(可能是 Apache MINA)还是像 CORBA 这样的解决方案?
谢谢。
【问题讨论】:
【参考方案1】:这在很大程度上取决于您未指定的注意事项。
-
什么是客户端?例如,如果您的客户端是运行 AJAX 的 javascript,那么显然 HTTP 上的东西比专有的 UDP 解决方案更有用。
它在哪个网络上工作?本地网络的行为与互联网不同,而移动互联网则与两者截然不同。
您可以如何巧妙地使用缓存?如果您使用 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 没有太大区别。以上是关于构建具有大量数据通信的系统的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
渲染具有大量节点的 Vuetify v-treeview 的最佳方法是啥?