我正在开发一个使用Django的微服务架构,其中服务通过RESTful API相互通信。
来自客户端的请求由服务提供服务,然后该服务需要向另一个服务发出新的(嵌套的)HTTP请求,如下图所示,以便保持服务之间的解耦。
在这种情况下,可能会发生客户端触发两个不同的请求并由第一个服务同时提供的请求。然后,对第二个服务的两个嵌套请求之一保持不存在,直到发生503错误(服务不可用)。 似乎服务器不能处理嵌套请求之间的并发性。
RESTful API使用Django REST框架实现,嵌套请求使用Python请求库。这是一个例子:
from rest_framework.views import APIView
import requests
class FirstServiceView(APIView):
def get(self, request, format=None):
# Code...
# The nested requests to the second service
response = requests.get("http://127.0.0.1:8000/second_service/")
# Other code...
值得注意的是,Django和Apache的开发服务器都会出现这种情况。此外,在这种情况下,不涉及数据库的并发性。