7

由于 REST 是无状态的,因此传入的每个请求都不知道传入的前一个请求。在这种情况下可以使用连接池吗?

如果要实现连接池,它将打开连接池并在每次请求时将其关闭,就像标准数据库连接一样。

如何实现 REST 以利用连接池?

4

4 回答 4

6

你需要了解什么是连接池(对象池)、缓存和区别。

创建连接池是为了避免创建这些昂贵资源的费用。它们大多是在某个地方创建和存储的,在使用后,它们会返回池中并可以再次使用。这是您避免一遍又一遍地创建这些资源的费用。比如数据库连接。

对于 REST,如何向 REST 服务发出请求?让我们通过 PUT、GET、POST 等通过 HTTP 说,所以你需要 HTTP 连接。如果您担心服务器,则取决于您使用的服务器,它们中的大多数都使用线程。

我有一种感觉,您可能会对缓存和对象池感到困惑。使用对象池,就像线程池一样,您创建 X 数量的该对象并将其存储在池中(通常是队列)。每当你需要一个时,你就从池子里问一个。完成后,您将其放回游泳池。

连接池上下文中的 REST 太有意义了。

您可能想要的是缓存... REST 是无状态的,但每个对象都有一个唯一标识符,因此您可以根据该 ID 缓存它。

于 2012-06-12T17:04:53.780 回答
1

这当然是可能的:REST并没有规定关于您的服务器如何在内部构建的任何内容,而是用于忽略状态并具有统一的 HTTP 接口。因此,您可以拥有一个使用连接池连接到您的数据库的服务器进程,但这仍然完全符合整个 REST、无状态、插入式组件的设计风格。

于 2012-06-12T17:22:25.453 回答
0

REST 实现中的无状态要求处理请求所需的任何状态都需要包含在其中。它不会阻止服务器为了效率而保持状态。

连接池可以,服务器上的身份验证缓存也可以。不行的是 SQL 类型的连接池,其中您的请求流如下: { login / operation1 / operation2 } 如果不首先在同一连接上执行登录操作,则无法为 operation1 提供服务。REST 实现需要类似 { login + operation1 / login + operation2 },因为它可以在 { login + operation1 } { drop cnx } { login + operation2 } 中安全地拆分,因此不需要服务器维护状态。

于 2012-06-12T17:52:55.027 回答
0

对于 REST 框架的性能调优,我建议阅读RESTful 应用程序的性能并作为一个很好的案例研究Profiling Django REST framework

ps.: While the question focuses on connection pooling for REST, it suggests that the OPs goal is to increase the throughput/speed of the REST service.

于 2013-11-25T21:54:46.210 回答