0

有两个数据库,A 和 B,它们为网页提供服务,并在需要共享数据时通过内部网络相互通信。有时,服务器 A 需要生成一个带有图表的网页,该网页需要在服务器 B 上进行大量数据的密集计算。让我们假设两台服务器同样强大并且网络速度很快。我试图找出一个好方法来做到这一点。到目前为止的想法:

  • 服务器 B 可以进行大量计算,然后将一小部分结果传回服务器 A。不太灵活,但相当有效。不幸的是,这是一个有点复杂的交易。我会将其与具有大量参数、副作用和结果的方法进行比较。
  • 服务器 B 可以简单地向 A 提供自己的原始数据服务器,并让它自己处理所有计算。更“开放”和更灵活,但效率较低,因为计算中涉及大量数据,服务器 A 必须通过网络提取所有数据。
  • 服务器 B 可以生成并返回图表或指向它的链接。也许是最有效的,但最不灵活的,并且还会造成服务器 B 部分负责生成服务器 A 的网页的混乱关系。但是,至少服务器 A 不必担心取回一个复杂对象并知道如何处理它。

这里是否有一个最佳实践可以实现性能和可维护封装的平衡?还是只是个案情况?我倾向于第一个选项。我希望这个问题足够“可回答”,而不是讨论问题。我试图将一般问题集中到一个特定的场景中。

4

1 回答 1

0

我无法回答您问题的最佳实践部分,但会在性能方面回答。您所描述的是两台服务器,它们之间没有真正的技术差异,并且大概您拥有更新它们的平等访问权限,既不会缺乏资源,等等。

要真正计算性能,需要几个数字。

A)每秒有多少请求?B) 对于技术 a 和 b,机器之间将有多少流量?C)你能承受多少延迟?

如果数据流足够小,您的第一个选项对于性能来说是合理的。选项 b 将在您的基础架构上产生大部分负载,如果这接近硬件限制,那么现在就放弃这个选项。如果所有的数字都很小,那么这并不是一个真正基于性能的决定。

如果您是从网页驱动这一切,那么第一页加载不能简单地返回引用服务器 B 的 Img 标记等吗?即我请求pageA,但HTML 流包含来自serverB 的资源?这本质上是您的选项 C,但可能会提供更高的感知用户性能,因为来自不同服务器的资源可以并行下载(假设有几个要访问)。

从设计的角度来看,我很难看出在哪里执行计算与这个问题相关,你控制两台服务器,所以问题变成了服务器 b 必须向服务器 a 提供信息的“合同”是什么。是否有某些原因 b 不能只提供过滤结果,而不能提供基础原始数据?或者换一种说法,为什么a要处理b的数据?当你控制两端时,逻辑是在 a 还是 b 中并不重要。

如果您不控制两台服务器,那么决定更多的是围绕谁应该承担将原始数据处理为结果的成本(构建和支持)。

总结/意见。如果可能和合适,选项 c,否则 a 在没有某些压倒一切的理由 b

于 2013-03-16T23:03:50.670 回答