gpt4 book ai didi

web-applications - 使用有状态的Web服务器有意义吗?

转载 作者:行者123 更新时间:2023-12-04 04:13:44 25 4
gpt4 key购买 nike

我正在开发一个Web应用程序,该应用程序历史上是建立在PHP/MySQL堆栈上的。

应用程序的其中一项关键操作必须进行一些繁重的计算,这些计算需要遍历整个数据库表的每一行。不用说这是一个严重的瓶颈。因此,决定用Java重写整个过程。

这给了我们两个好处。一个是Java作为一种语言,比PHP进程要快得多。第二个问题是我们可以将整个数据集保留在Java应用程序服务器内存中。因此,现在我们可以在内存中执行大量计算操作,并且一切发生的速度都快得多。

这工作了一段时间,直到我们意识到我们需要扩展,所以现在我们需要更多的Web服务器。

问题是-按照当前的设计,它们都必须保持完全相同的状态。他们都查询数据库,处理数据,并将其维护在内存中。但是,当您需要更改此数据时会发生什么呢?所有服务器如何保持一致性?

这种架构对我来说似乎是有缺陷的。将所有数据保存在内存中的性能优势是显而易见的,但这严重妨碍了可伸缩性。

从这里有什么选择?切换到内存中的键值数据存储?我们是否应该完全放弃Web服务器内部的保留状态?

最佳答案

现在切换到Erlang :-)

是的,这是个玩笑;但是有一点道理。问题是:您最初在外部共享存储库(数据库)中拥有状态。现在,您已经(部分)在一个内部非共享存储库中对其进行了预先计算:Java RAM对象。最明显的方法是仍然对其进行预先计算,但是在外部共享存储库中,速度越快越好。

一个简单的答案是memcached。

另一个是建立自己的“计算服务器”,以集中计算任务和(部分)结果。 Web前端进程仅访问此服务器。在Erlang中,这是自然的做法。用其他语言,您仍然可以做到,仅需更多工作即可。即使最终不使用ZeroMQ,也请检查ZeroMQ的灵感(但这是该死的良好实现)。

关于web-applications - 使用有状态的Web服务器有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4563140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com