ExpressJS应用程序每秒接收大约70个请求-Cassandra性能降低

时间:2019-05-31 09:46:44

标签: express cassandra express-cassandra

这不是与代码有关的问题,而是与服务器性能和我应检查的事情有关的问题。因此,我有一个ExpressJS服务器,该服务器连接到cassandra db(1个种子节点和1个群集上的2个节点,因此总共3个节点)。该API与cassandra db种子节点在同一服务器上运行。我在局域网中总共有3台服务器。

所以结构看起来像这样-

服务器1运行API和种子cassandra节点。 服务器2运行cassandra节点。 服务器3运行cassandra节点。

每台服务器具有8GM的ram和2.5Ghz的CPU。

默认情况下,每秒大约有70个请求会执行以下操作-

1)调用一个函数,该函数从cassandra的表中读取数据(使用实例化视图)。 2)从cassandra db读取另一个表(使用实例化视图)。 3)将数据发布到cassandra的第三个表中。

被调用的第二个函数非常相似,它使用物化视图进行1次读取,并发布1次。

每秒调用的函数之间的比例差大约是调用函数1的30倍(执行2次读取和1个帖子),调用函数2大约40倍(执行1次读取1个帖子)。

一切都会很好,但是请求的延迟会不时地跳跃,有时大约需要10毫秒,但每5到10秒就会增加3到30秒。另外,cassandra似乎不稳定-在3-30秒的请求时间期间,cassandra似乎在某些请求上超时。

我应该检查的第一件事是什么?我是否需要其他节点,如何确定是否有足够的节点来发送到cassandra db中的数据量?我是否应该将API与cassandra节点分开-从而将API服务器保存在单独的服务器(例如服务器4)上?

1 个答案:

答案 0 :(得分:0)

材料化视图非常适合读取操作,但它们以写入为代价;您需要考虑执行魔术所需的一些开销:

    物化视图将需要更多资源来跟踪其来源的更新;当您与多个实例化视图进行交互时,这种情况会变得更糟,就像您提出的第一种情况一样。
  • 如果帖子的数据写在实例化视图的同一源中,则这将取决于表中使用的主键的复杂性,如here所述。

我要探索的第一个选项是对第一个函数进行规范化并创建一个单独的表,因此您将读取一次,而不是两次。

我的答案有很多猜测,因为结构和表模式上有很多未知数;如果启用跟踪功能,您可能会得到更好的见解,在我们的案例中,TLP

说明的openzipkin效果很好