7 паттернов микросервисной архитектуры, которые стоит знать каждому разработчику
Senior Backend engineer
Ex-Самокат
Senior Engineer
Автор и наставник
Промежуточный этап распила монолита на микросервисы: пока что жив старый монолит, но часть кода уже вынесена в отдельные микросервисы
@app.get("/podcasts-svc/podcasts/{podcast_id}")
async def podcast(podcast_id: int):
try:
reply = await client.get(f"http://podcasts/podcasts/{podcast_id}")
except httpx.RequestError:
raise HTTPException(503, "Сервис подкастов недоступен") from None
return Response(reply.content, status_code=reply.status_code,
media_type=reply.headers.get("content-type"))
async with conn.transaction():
await conn.execute(
"INSERT INTO episodes (id, title) VALUES ($1, $2)",
episode_id, title,
)
await conn.execute(
"INSERT INTO outbox (event_id, payload) VALUES ($1, $2::jsonb)",
event_id, payload,
)
payment = await payments.charge(purchase_id, amount)
try:
await music.activate_subscription(user_id, purchase_id=purchase_id)
except ActivationFailed:
await payments.refund(payment.id, purchase_id=purchase_id)
raise