我正在阅读关于scalability
和performance
应用程序的内容,并遇到了一条说明
“从应用程序中删除状态会显着增加数据库负载”
我无法理解这条线,原因如下:
- 假设我正在使用
www
[or rest] 并向 Web 服务器发送请求,即stateless
. - 如果我的请求需要数据库操作,它不等同于任何
stateful
请求吗?
增加数据库负载的无状态请求有什么问题?
我正在阅读关于scalability
和performance
应用程序的内容,并遇到了一条说明
“从应用程序中删除状态会显着增加数据库负载”
我无法理解这条线,原因如下:
www
[or rest] 并向 Web 服务器发送请求,即stateless
.stateful
请求吗?增加数据库负载的无状态请求有什么问题?
好吧,我不知道引用内容的上下文。您可以删除(或最小化)应用程序的状态,但并非在所有情况下都可以。首先,在这些情况下您可以做的是将状态移动到数据库(或像 redis 这样的企业缓存)——只是以某种方式持久化状态对象。因此,与节点包含数据的情况相比,每个请求从数据库中获取更多数据。
我们尝试在我当前的项目中以毫秒为单位进行响应。删除状态意味着加载大型 DDD 聚合,这会使每个请求的一个请求减慢几秒钟,并带来额外的数据库负载——这是引用语句的结果。
我不认为你引用的陈述是真的。
这种约束引入了可见性、可靠性和可扩展性的属性。可见性得到提高,因为监控系统不必超越单个请求数据来确定请求的全部性质。可靠性得到了提高,因为它简化了从部分故障中恢复的任务[133]。可扩展性得到了改进,因为不必在请求之间存储状态允许服务器组件快速释放资源,并进一步简化了实现,因为服务器不必管理请求之间的资源使用。
根据菲尔丁的论文,从通信中删除状态可以提高可扩展性,有必要定义 REST 的分层系统约束,从而进一步提高可扩展性。明确一点:您可以在系统中的任何位置添加缓存,因此相反,数据库负载会减少。