简短:当后端架构复杂且有异步通信时,如何向前端提供成功或错误消息?
Long:客户端与负载均衡器建立同步连接,然后后端有多个服务处理请求。为简单起见,我没有包含重试和超时感知代码,但像下面这样的服务会调用另一个具有类似结构的服务,然后访问数据库和资源。
from fastapi import FastAPI
import aiohttp
import logging
app = FastAPI()
@app.get("/request")
async def request():
url = "http://mybackend.service.domain/request2"
async with aiohttp.ClientSession() as session:
try:
async with session.get(url) as response:
if response.status == 200:
logging.info(f"Response.status: {status}")
result = await response.text()
else:
logging.warning(f"Response.status: {status}")
except aiohttp.ClientConnectorError as e:
logging.error(f"Could not reach {url}, error {e}")
return result
我读过 Asynchronous Request-Reply pattern,它涉及从前端进行 HTTP 轮询,并在它进入后端后立即发送 202(已接受)响应。我看到了如何然后我可以返回任何错误并在处理任何错误的同时重建整个后端的请求所遵循的路径。
但是,如果其中一项服务或资源没有响应,会发生什么情况?那么,这条路就会被打破。这会被另一个检查所有收到请求状态的服务解决吗?我想知道是否有更好、更可靠的方法将错误返回给前端,或者是否有任何此问题。我知道系统应该提供错误透明度,但错误确实会发生。
非常欢迎任何解释这一点的资源。
重要说明:这是系统的过度简化版本。请不要因为没有意义就判断所呈现的“微服务”是否有意义。它只是提供了一个最小的设置来展示这个想法。