无状态负载平衡应用程序引领数据库瓶颈

时间:2013-08-11 11:25:19

标签: database rest load-balancing stateless

我正在阅读有关应用的scalabilityperformance的信息,并且遇到了一条说明

的信息。
  

“从应用程序中删除状态有显着增加   在数据库中加载“

我无法理解这一行,原因如下:

  1. 假设我正在使用www [或休息]并向{@ 1}}的网络服务器发送请求。
  2. 如果我的请求需要数据库操作,那么它是否等同于任何stateless请求?
  3. 增加数据库负载的无状态请求有什么问题?

2 个答案:

答案 0 :(得分:1)

好吧,我不知道引用内容的上下文。您可以删除(或最小化)应用程序的状态,但不是在所有情况下。首先,在这些情况下你可以做的是将状态移动到数据库(或像redis这样的企业缓存) - 只是以某种方式持久化状态对象。因此,每个请求从DB获取的数据多于节点包含数据的情况。

我们尝试在当前项目上以毫秒为单位的响应时间。删除状态意味着加载大型DDD'聚合,这会使每个请求的请求减慢一秒,并带来额外的数据库负载 - 这是引用句子的结果。

答案 1 :(得分:0)

我不认为你引用的陈述是真的。

  

这种约束导致了可见性,可靠性和性能的特性   可扩展性。由于监控系统可见,因此可见性得到改善   不必超越单个请求数据来确定   请求的完整性。可靠性因为它而得到改善   减轻从部分失败中恢复的任务[133]。可扩展性   因为不必在请求允许之间存储状态而得到改进   服务器组件可以快速释放资源,并进一步简化   实现,因为服务器不必管理资源   跨请求使用。

根据Fielding dissertation,从通信中删除状态会增加可伸缩性,因此有必要定义REST的分层系统约束,从而进一步提高可伸缩性。为了说清楚:您可以在系统中的任何位置添加缓存,相反,db负载会减少。