惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
D
Docker
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
IT之家
IT之家
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
B
Blog
D
DataBreaches.Net

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Quando tirar o background work de dentro da API: o caso a...
Paulo Walraven · 2026-06-22 · via DEV Community

Seu endpoint que sempre respondia em 80ms começou a oscilar para 800ms — e ninguém mexeu no código dele. O culpado? Aquele BackgroundService que você colocou na API mês passado para gerar relatórios. Ele está rodando dentro do mesmo processo que suas requisições, e agora os dois estão brigando pela mesma CPU.

Esse é um dos erros arquiteturais mais silenciosos do .NET: começar com hosted services dentro da API e só descobrir o problema quando a produção já está degradada. Neste post você vai entender quando o background work deve sair da API e por que Worker Services são a resposta — não pela sintaxe, mas pelos trade-offs reais.

O problema: hosted services compartilham tudo com a sua API

Hosted services (IHostedService / BackgroundService) são ótimos para tarefas que pertencem à aplicação e são leves: limpar um cache, emitir um heartbeat, recarregar uma configuração de tempos em tempos.

Mas há uma característica fácil de esquecer: eles rodam dentro do mesmo processo da sua API. Isso significa que compartilham:

  • a mesma memória,
  • os mesmos recursos de CPU,
  • o mesmo ciclo de vida.

Para cargas leves, isso é perfeito. O problema aparece quando o trabalho fica pesado.

Imagine que seu serviço em background está processando arquivos grandes, gerando relatórios ou chamando múltiplos sistemas externos. Se esse trabalho executa dentro do processo da API, ele está competindo com as requisições que chegam pelos mesmos recursos.

O resultado é direto: tempos de resposta mais lentos e performance instável. E o pior tipo de instabilidade — aquela que não aparece no código de nenhum endpoint, só na conta de recursos compartilhada.

A segunda dor: você só consegue escalar tudo junto

Essa é a parte que mais machuca em sistemas que crescem.

Se o seu processamento em background vive dentro da API, a única forma de escalá-lo é escalar a API inteira. Precisa de mais poder para processar a fila de jobs? Suba mais instâncias da aplicação web junto — mesmo que o tráfego HTTP nem precise disso.

Isso é ineficiente por definição. Em muitos sistemas reais, as cargas de background têm um perfil de escala completamente diferente da camada web: elas precisam crescer e encolher de forma independente. Acoplar os dois te força a pagar por capacidade que você não precisa, do lado errado.

A terceira dor: uma falha derruba o que não devia

Confiabilidade é o terceiro argumento, e talvez o mais convincente.

Quando o worker mora dentro da API, o raio de explosão de uma falha é a aplicação inteira:

  • Se o worker quebra, você não quer que a API caia junto — mas, no mesmo processo, esse risco existe.
  • Se você precisa reiniciar os workers, não deveria ter que reiniciar toda a aplicação web — mas, acoplado, é exatamente isso que acontece.

Separar o trabalho em background cria uma arquitetura muito mais resiliente: cada parte falha, reinicia e se recupera de forma isolada.

A solução: Worker Services como aplicações separadas

Para resolver esses três problemas — contenção de recursos, escala acoplada e falhas que se propagam — o .NET oferece os Worker Services.

Um Worker Service é uma aplicação independente, dedicada ao processamento em background. O modelo de programação parece familiar (ainda é um BackgroundService com seu loop), mas a diferença que importa é estrutural: é outro processo.

Isso destrava exatamente o que faltava:

  • Recursos próprios — o worker não disputa CPU/memória com as suas requisições HTTP.
  • Escala independente — você sobe mais instâncias do worker sem tocar na API.
  • Ciclo de vida isolado — reiniciar ou derrubar o worker não afeta a aplicação web.

O melhor: como o Worker Service usa o mesmo generic host do ASP.NET, tudo que você já sabe — dependency injection, configuração, logging — continua valendo. Você ganha o isolamento sem reaprender a stack.

Checklist: está na hora de extrair o worker?

Use estes sinais como gatilho para tirar o background work de dentro da API:

  • [ ] O trabalho é pesado (processa arquivos, gera relatórios, chama vários sistemas externos).
  • [ ] Os tempos de resposta da API oscilam quando o background está ativo.
  • [ ] Você precisa escalar o processamento sem escalar a camada web.
  • [ ] Uma falha no processamento não pode colocar a API em risco.
  • [ ] Você quer reiniciar/deployar o background sem mexer na aplicação web.

Se você marcou dois ou mais, o Worker Service deixou de ser luxo e virou decisão de arquitetura.

Conclusão

Hosted services dentro da API são ótimos — até deixarem de ser. No momento em que o trabalho fica pesado, precisa escalar sozinho ou não pode derrubar a aplicação, o lugar certo para ele é fora da API, em um Worker Service independente.

Já tem um BackgroundService rodando dentro da sua API hoje? Rode o checklist acima e veja se ele já não está te custando latência. No próximo post da série, vamos colocar a mão na massa e criar e estruturar o nosso primeiro Worker Service do jeito certo.