Architecture

Architecture articles on service-oriented Node.js back-ends: splitting a monolith, service boundaries, discovery, load balancing and inter-service calls.

11 articles

Aug 22, 2026 · Mykhailo Stadnyk

Autoscale on queue depth, not CPU

CPU tells you a process is busy, not whether anyone is waiting. An @imqueue service's backlog is a Redis list, so KEDA can scale on it with no exporter, no Prometheus and no code change — and the metrics server covers the case where you need more.

read →
Aug 3, 2026 · Andrii Glushko

@imqueue vs NATS: a framework and a transport are not the same choice

NATS is a messaging system; @imqueue is an RPC framework that happens to use one. Comparing them means deciding how much of the contract you want to write yourself — and whether your fleet is Node-only.

read →
Aug 3, 2026 · Mykhailo Stadnyk

How Node.js services talk to each other in 2026: the honest options

REST, gRPC, tRPC, NATS, a framework like NestJS or Moleculer, or RPC over a message queue. Six real approaches, what each one costs, and the two questions that actually decide it — including when @imqueue is the wrong answer.

read →
Jul 24, 2026 · Serhiy Morenko

Auto-scaling Redis broker: with and without broadcast

One Redis behind your message bus is a ceiling and a single point of failure. The promoter and unicaster modules turn a fleet of plain Redis instances into a horizontally auto-scaling broker — here are the recipes for networks that deliver broadcast and for clouds like GCP that don't, and how to encrypt the result when the brokers announce addresses no certificate can carry.

read →
Jul 22, 2026 · Mykhailo Stadnyk

RPC between Node.js microservices over a message queue

Why route internal service-to-service calls through a message queue instead of HTTP or gRPC — and how @imqueue makes those calls fully typed with zero client boilerplate.

read →
Jul 14, 2026 · Mykhailo Stadnyk

Load balancing microservices without a load balancer

For internal service-to-service traffic, the load balancer you run and operate is often solving a problem a message queue solves for free. Here's the competing-consumers pattern, why pull beats push, and what you give up.

read →
Jul 12, 2026 · Mykhailo Stadnyk

Do your Node.js back-ends really need service discovery?

Consul, etcd, DNS-SD — service discovery is a lot of machinery to stand up. Sometimes you genuinely need it; often you don't. Here's how to tell, and how a queue makes the question disappear.

read →
Jun 27, 2026 · Andrii Glushko

Internal APIs don't need to be REST

REST is a fine choice for public, resource-oriented APIs. For internal service-to-service calls it's often ceremony over a plain function call. Here's when to drop it and what to reach for instead.

read →
Jun 24, 2026 · Andrii Glushko

From monolith to services: a low-risk first extraction

You don't migrate a monolith by rewriting it. You extract one capability, keep everything else in place, and repeat. Here's a concrete, low-risk first step for a Node.js team.

read →
Jun 19, 2026 · Andrii Glushko

@imqueue vs Moleculer: two takes on Node.js microservices

Moleculer is a full-featured microservices framework with many transporters; @imqueue is a focused, TypeScript-first RPC layer over a message queue. Here's an honest comparison to help you pick.

read →
Jun 17, 2026 · Andrii Glushko

@imqueue vs NestJS microservices: framework vs transport

NestJS is a full application framework with a microservices module; @imqueue is a focused RPC transport. They're not really competitors — here's how they differ, where each is stronger, and how to run them together.

read →