--- title: Service Architecture Patterns description: Common service architecture patterns for self-hosted platforms and small engineering environments tags: - architecture - services - infrastructure category: infrastructure created: 2026-03-14 updated: 2026-03-14 --- # Service Architecture Patterns ## Summary Service architecture patterns describe how applications are packaged, connected, exposed, and operated. In self-hosted environments, the most useful patterns balance simplicity, isolation, and operability rather than chasing scale for its own sake. ## Why it matters Architecture decisions affect deployment complexity, failure domains, recovery steps, and long-term maintenance. Small environments benefit from choosing patterns that remain understandable without full-time platform engineering overhead. ## Core concepts - Single-service deployment: one service per VM or container stack - Shared platform services: DNS, reverse proxy, monitoring, identity, backups - Stateful versus stateless workloads - Explicit ingress, persistence, and dependency boundaries - Loose coupling through DNS, reverse proxies, and documented interfaces ## Practical usage Useful patterns for self-hosted systems include: - Reverse proxy plus multiple backend services - Dedicated database service with application separation - Utility VMs or containers for platform services - Private admin interfaces with public application ingress kept separate Example dependency view: ```text Client -> Reverse proxy -> Application -> Database -> Identity provider -> Monitoring and logs ``` ## Best practices - Keep stateful services isolated and clearly backed up - Make ingress paths and dependencies easy to trace - Reuse shared platform services where they reduce duplication - Prefer a small number of well-understood patterns across the environment ## Pitfalls - Putting every service into one giant stack with unclear boundaries - Mixing public ingress and administrative paths without review - Scaling architecture complexity before operational need exists - Depending on undocumented local assumptions between services ## References - [Martin Fowler: MonolithFirst](https://martinfowler.com/bliki/MonolithFirst.html) - [The Twelve-Factor App](https://12factor.net/) - [NGINX: Reverse Proxy](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/)