REST可以实现连接池吗?

时间:2012-06-12 16:55:42

标签: rest connection-pooling

由于REST是无状态的,因此每个进入的请求都不知道先前的请求。在这种情况下是否可以建立连接池?

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

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

4 个答案:

答案 0 :(得分:5)

您需要了解什么是连接池(对象池),缓存和差异。

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

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

REST实现中的无状态要求处理请求所需的任何状态都需要包含在其中。它无法阻止服务器维持状态以提高效率。

连接池没问题,服务器上的身份验证缓存也是如此。什么是不合适的是一个SQL类型的连接池,你有一个请求流,如:{login / operation1 / operation2},如果没有先在同一个连接上进行登录操作,就无法为service1提供服务。 REST实现需要{login + operation1 / login + operation2},因为它可以在{login + operation1} {drop cnx} {login + operation2}中安全地拆分,因此不需要服务器维护状态。

答案 3 :(得分:0)

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

ps。虽然问题集中在REST的连接池上,但它表明OP的目标是提高REST服务的吞吐量/速度。