Database 为数据密集型多服务器应用程序封装服务器通信

Database 为数据密集型多服务器应用程序封装服务器通信,database,performance,webserver,encapsulation,bigdata,Database,Performance,Webserver,Encapsulation,Bigdata,有两个数据库,A和B,当它们需要共享数据时,它们为网页提供服务并通过内部网络相互通信。有时服务器A需要生成一个带有图表的网页,该图表需要在服务器B上进行大量数据的密集计算。让我们假设两台服务器功能相同,网络速度也很快。我在想一个好办法。迄今为止的想法: 服务器B可以进行大量计算,然后将一小部分结果传回服务器a。灵活性较低,但效率相当高。不幸的是,这是一个有点复杂的事务。我会将它与一种有很多参数、副作用和结果的方法进行比较 服务器B可以简单地向服务器A提供自己的原始数据,并让它自己处理所有的计算

有两个数据库,A和B,当它们需要共享数据时,它们为网页提供服务并通过内部网络相互通信。有时服务器A需要生成一个带有图表的网页,该图表需要在服务器B上进行大量数据的密集计算。让我们假设两台服务器功能相同,网络速度也很快。我在想一个好办法。迄今为止的想法:

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

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

我无法回答您问题中的最佳实践部分,但将针对性能方面进行回答。您所描述的是两台服务器,它们之间没有真正的技术差异,并且您可以平等地更新这两台服务器,既不缺乏资源,等等

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

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

如果数据流足够小,那么您的第一个选择对于性能来说是合理的。选项b将在您的基础设施上产生最大负载,如果这接近硬件限制,则立即放弃此选项。如果所有的数字都很小,那么这并不是一个真正基于性能的决策

如果您是从web页面驱动这些内容,那么第一个页面加载不能简单地返回指向服务器B的Img标记等吗?Ie I请求pageA,但HTML流包含来自serverB的资源?这基本上是您的选项C,但可能会提供更高的感知用户性能,因为来自不同服务器的资源可以并行下载(假设有多个可访问)

从设计的角度来看,我很难看出计算的执行位置与此问题相关,因为您控制两台服务器,所以问题变成了服务器b必须向服务器a提供什么“合同”信息。是否有某种原因导致b不能仅提供筛选结果,而不能提供基础原始数据?或者换句话说,为什么a必须处理b的数据?当你控制两端时,逻辑是a还是b并不重要

如果您不能同时控制这两台服务器,那么决策的重点是谁应该承担将原始数据处理成结果的成本(构建和支持)

摘要/意见。如果可能且合适,选择c,否则a在没有b的主要原因的情况下