Microservices āļāđāļ§āļĒ NestJS āļāļĩ 2026: āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ, gRPC āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāđāļĢāļ·āđāļāļāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ NestJS Microservices āļāļąāļ gRPC: transport layer, Protocol Buffers, streaming patterns āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļŠāļģāļŦāļĢāļąāļ backend engineer āļāļĩ 2026

Microservices Architecture āļāļąāļ NestJS āđāļāļāļĩ 2026 āļāļ·āļāđāļāđāļāļŦāļāļķāđāļāđāļāļŦāļąāļ§āļāđāļāļāļĩāđāđāļāđāļĢāļąāļāļāļ§āļēāļĄāļāļīāļĒāļĄāļāļĒāđāļēāļāļĄāļēāļāđāļāļ§āļāļāļēāļĢāļāļąāļāļāļēāļāļāļāļāđāđāļ§āļĢāđ NestJS āđāļāđāļāļĨāļēāļĒāđāļāđāļ Framework āļāļąāđāļāļāļģāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļąāđāļ Server āļāđāļ§āļĒ Node.js āđāļāļĒāđāļāļāļēāļ°āļāļĒāđāļēāļāļĒāļīāđāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢāļ°āļāļ Microservices āļāļĩāđāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļĒāļēāļĒāļāļąāļ§ āļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāļģāđāļŠāļāļāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļāļāļ NestJS Microservices āļāļēāļĢāđāļāđāļāļēāļ gRPC āļĢāļ§āļĄāļāļķāļāļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļāļĩāđāļāļāļāđāļāļĒāđāļāļāļĩ 2026
gRPC āđāļŦāđāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļĩāđāļŠāļđāļāļāļ§āđāļē REST āļāļĒāđāļēāļāļĄāļēāļāđāļāļ·āđāļāļāļāļēāļāđāļāđ Protocol Buffers āđāļāļ JSON āđāļĨāļ°āļĢāļāļāļĢāļąāļ HTTP/2 āļāļķāđāļāļāđāļ§āļĒāļĨāļ Latency āđāļĨāļ°āđāļāļīāđāļĄ Throughput āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ Services āļ āļēāļĒāđāļāļĢāļ°āļāļ āļāļĒāđāļēāļāđāļĢāļāđāļāļēāļĄ REST āļĒāļąāļāļāļāđāļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļ Public API āļāļĩāđāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļāđāļēāļĒāđāļāļāļēāļĢāđāļāđāļāļēāļ
NestJS Microservices Transport Layer Architecture
NestJS āļĢāļāļāļĢāļąāļ Transport Layer āļŦāļĨāļēāļĒāļāļĢāļ°āđāļ āļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ Microservices āđāļāđāđāļāđ TCP, Redis, NATS, RabbitMQ, Kafka āđāļĨāļ° gRPC āđāļāđāļĨāļ° Transport āļĄāļĩāļāđāļāļāļĩāđāļĨāļ°āļāđāļāđāļŠāļĩāļĒāļāļĩāđāđāļāļāļāđāļēāļāļāļąāļ āļāļēāļĢāđāļĨāļ·āļāļāđāļāđāļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļ§āļēāļĄāļāđāļāļāļāļēāļĢāļāļāļāļĢāļ°āļāļ
āļŦāļąāļ§āđāļāļŠāļģāļāļąāļāļāļāļ NestJS Microservices āļāļĒāļđāđāļāļĩāđāļāļēāļĢāđāļāđ Decorator āļŠāļāļāļāļąāļ§āļŦāļĨāļąāļ āđāļāđāđāļāđ @MessagePattern āđāļĨāļ° @EventPattern āļāļķāđāļāļĄāļĩāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļąāļāļāļąāļāļāļĩāđ:
- @MessagePattern āđāļāđāļŠāļģāļŦāļĢāļąāļāļĢāļđāļāđāļāļ Request-Response āļāļĩāđāļāļđāđāđāļĢāļĩāļĒāļāļāđāļāļāļāļēāļĢāļĢāļāļĢāļąāļāļāļĨāļĨāļąāļāļāđāļāļĨāļąāļāļĄāļē
- @EventPattern āđāļāđāļŠāļģāļŦāļĢāļąāļāļĢāļđāļāđāļāļ Fire-and-Forget āļāļĩāđāđāļĄāđāļāđāļāļāļāļēāļĢāļāļĨāļĨāļąāļāļāđāļāļĨāļąāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļ Event-Driven Architecture
āđāļ NestJS āđāļ§āļāļĢāđāļāļąāļ 11 āļĄāļĩāļāļēāļĢāđāļāļīāđāļĄ Method unwrap() āļāļķāđāļāļāđāļ§āļĒāđāļŦāđāļāļēāļĢāļāļąāļāļāļēāļĢ Error āļāļēāļ Microservices āļāļģāđāļāđāļāđāļēāļĒāļāļķāđāļ āđāļāļĒ unwrap() āļāļ°āđāļāļĨāļ RpcException āđāļŦāđāđāļāđāļ Native Error āļāļĩāđāļŠāļēāļĄāļēāļĢāļ Catch āđāļāđāđāļāļāļąāđāļ Client
import { Controller } from '@nestjs/common';
import { MessagePattern, EventPattern, Payload } from '@nestjs/microservices';
import { OrdersService } from './orders.service';
import { CreateOrderDto } from './dto/create-order.dto';
@Controller()
export class OrdersController {
constructor(private readonly ordersService: OrdersService) {}
// Request-response: caller waits for the created order
@MessagePattern('order.create')
async createOrder(@Payload() data: CreateOrderDto) {
return this.ordersService.create(data);
}
// Event-based: fire and forget, no response returned
@EventPattern('order.shipped')
async handleOrderShipped(@Payload() data: { orderId: string }) {
await this.ordersService.markAsShipped(data.orderId);
}
}āļāļēāļĢāļāļāļāđāļāļ Controller āđāļāļĨāļąāļāļĐāļāļ°āļāļĩāđāļāđāļ§āļĒāđāļŦāđāļŠāļēāļĄāļēāļĢāļāđāļĒāļāļāļ§āļēāļĄāļĢāļąāļāļāļīāļāļāļāļāđāļāđāļāļĒāđāļēāļāļāļąāļāđāļāļ Method āļāļĩāđāđāļāđ @MessagePattern āļāļ° Return āļāđāļēāļāļĨāļąāļāđāļāļĒāļąāļāļāļđāđāđāļĢāļĩāļĒāļ āđāļāļāļāļ°āļāļĩāđ Method āļāļĩāđāđāļāđ @EventPattern āļāļ°āļāļģāļāļēāļāđāļāļ Asynchronous āđāļāļĒāđāļĄāđāļĄāļĩāļāļēāļĢāļŠāđāļāļāđāļēāļāļĨāļąāļ
āļāļēāļĢāļāļąāđāļāļāđāļē gRPC āđāļāđāļ NestJS Microservice Transport
gRPC āđāļāđāļ Remote Procedure Call Framework āļāļĩāđāļāļąāļāļāļēāđāļāļĒ Google āļāļķāđāļāđāļāđ Protocol Buffers āđāļāđāļāļĢāļđāļāđāļāļāđāļāļāļēāļĢ Serialize āļāđāļāļĄāļđāļĨ āļāļēāļĢāđāļāđ gRPC āļāļąāļ NestJS āļāđāļāļāđāļĢāļīāđāļĄāļāļēāļāļāļēāļĢāļāļģāļŦāļāļ Service Definition āđāļāđāļāļĨāđ .proto
syntax = "proto3";
package users;
service UsersService {
rpc FindOne (UserById) returns (User);
rpc FindMany (UserFilter) returns (stream User);
}
message UserById {
string id = 1;
}
message UserFilter {
string role = 1;
int32 limit = 2;
}
message User {
string id = 1;
string email = 2;
string name = 3;
string role = 4;
}āđāļāļĨāđ .proto āļāļĩāđāļāļģāļŦāļāļ Service āļāļ·āđāļ UsersService āļāļĩāđāļĄāļĩ Method āļŠāļāļāļāļąāļ§ āđāļāđāđāļāđ FindOne āļŠāļģāļŦāļĢāļąāļāļāđāļāļŦāļēāļāļđāđāđāļāđāļāļēāļĄ ID āđāļĨāļ° FindMany āļŠāļģāļŦāļĢāļąāļāļāđāļāļŦāļēāļāļđāđāđāļāđāļŦāļĨāļēāļĒāļāļāđāļāļ Streaming
āļāļēāļĢ Bootstrap gRPC Server āđāļ NestJS āļāļģāđāļāđāļāļąāļāļāļĩāđ:
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.GRPC,
options: {
package: 'users',
protoPath: join(__dirname, 'proto/users.proto'),
url: '0.0.0.0:5000',
},
},
);
await app.listen();
}
bootstrap();āļāļēāļĢāļāļąāđāļāļāđāļēāļāļĩāđāļāļ°āļŠāļĢāđāļēāļ gRPC Server āļāļĩāđāļĢāļąāļāļāļąāļāļāļ Port 5000 āđāļāļĒāđāļāđ Package users āļāļēāļĄāļāļĩāđāļāļģāļŦāļāļāđāļāđāļāļĨāđ .proto
āļŠāļģāļŦāļĢāļąāļ Controller āļāļĩāđāļĢāļāļāļĢāļąāļ gRPC Method āļāđāļāļāđāļāđ Decorator @GrpcMethod āđāļāļ @MessagePattern:
import { Controller } from '@nestjs/common';
import { GrpcMethod } from '@nestjs/microservices';
import { UsersService } from './users.service';
@Controller()
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@GrpcMethod('UsersService', 'FindOne')
async findOne(data: { id: string }) {
return this.usersService.findById(data.id);
}
}āļĢāļđāļāđāļāļ gRPC Streaming āđāļ NestJS
gRPC āļĢāļāļāļĢāļąāļāļāļēāļĢ Streaming āļāđāļāļĄāļđāļĨāļŦāļĨāļēāļĒāļĢāļđāļāđāļāļ āđāļāđāđāļāđ Server Streaming, Client Streaming āđāļĨāļ° Bidirectional Streaming āļāļēāļĢāđāļāđ Server Streaming āđāļ NestJS āļāđāļāļāļāļēāļĻāļąāļĒ RxJS Observable āđāļāļāļēāļĢāļŠāđāļāļāđāļāļĄāļđāļĨāļāļĩāļĨāļ°āļāļīāđāļ
import { Observable, from } from 'rxjs';
import { map } from 'rxjs/operators';
import { GrpcMethod } from '@nestjs/microservices';
@GrpcMethod('UsersService', 'FindMany')
findMany(data: { role: string; limit: number }): Observable<any> {
// Stream users matching the filter one by one
const users$ = from(this.usersService.findByRole(data.role, data.limit));
return users$.pipe(
map((user) => ({
id: user.id,
email: user.email,
name: user.name,
role: user.role,
})),
);
}Server Streaming āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļĢāļāļĩāļāļĩāđāļāđāļāļāļŠāđāļāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļāļāļĨāļąāļāđāļāļĒāļąāļ Client āđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāđāļŦāđ Query āđāļŠāļĢāđāļāļŠāļĄāļāļđāļĢāļāđāļāļąāđāļāļŦāļĄāļ āļāļķāđāļāļāđāļ§āļĒāļĨāļ Memory Usage āđāļĨāļ°āļāļĢāļąāļāļāļĢāļļāļ Time to First Byte
Bidirectional Streaming āļāđāļ§āļĒāđāļŦāđāļāļąāđāļ Client āđāļĨāļ° Server āļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāđāļāļĄāļđāļĨāļŦāļēāļāļąāļāđāļāđāļāļĢāđāļāļĄāļāļąāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļ Real-time Applications āđāļāđāļ Chat āļŦāļĢāļ·āļ Live Dashboard
āđāļĄāļ·āđāļāđāļāđ gRPC Streaming āļāļ§āļĢāļĢāļ°āļĄāļąāļāļĢāļ°āļ§āļąāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢ Error āđāļāļ·āđāļāļāļāļēāļ Error āļāļĩāđāđāļāļīāļāļāļķāđāļāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢ Stream āļāļ°āļāļģāđāļŦāđ Stream āļāļđāļāļĒāļāđāļĨāļīāļāļāļąāļāļāļĩ āļāļ§āļĢāđāļāđ catchError Operator āļāļēāļ RxJS āđāļāļ·āđāļāļāļąāļāļāļēāļĢ Error āđāļĨāļ°āļŠāđāļ Fallback Value āļŦāļĢāļ·āļ Retry āļāļēāļĄāļāļ§āļēāļĄāđāļŦāļĄāļēāļ°āļŠāļĄ
Hybrid Applications: HTTP āđāļĨāļ° gRPC āļāļ Service āđāļāļĩāļĒāļ§āļāļąāļ
āđāļāļŦāļĨāļēāļĒāļŠāļāļēāļāļāļēāļĢāļāđ āļĢāļ°āļāļāļāđāļāļāļāļēāļĢāđāļŦāđāļāļĢāļīāļāļēāļĢāļāļąāđāļ HTTP API āļŠāļģāļŦāļĢāļąāļ External Client āđāļĨāļ° gRPC āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļ āļēāļĒāđāļāļĢāļ°āļŦāļ§āđāļēāļ Services NestJS āļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļ Hybrid Application āļāļĩāđāļŠāļēāļĄāļēāļĢāļāļĢāļąāļāļāļąāđāļāļŠāļāļ Protocol āļāļĢāđāļāļĄāļāļąāļāđāļāđ
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';
import { AppModule } from './app.module';
async function bootstrap() {
// HTTP server on port 3000
const app = await NestFactory.create(AppModule);
// gRPC microservice on port 5000
app.connectMicroservice<MicroserviceOptions>({
transport: Transport.GRPC,
options: {
package: 'users',
protoPath: join(__dirname, 'proto/users.proto'),
url: '0.0.0.0:5000',
},
});
await app.startAllMicroservices();
await app.listen(3000);
}
bootstrap();āļāļēāļĢāļāļąāđāļāļāđāļēāļāļĩāđāļāđāļ§āļĒāđāļŦāđ Service āđāļāļĩāļĒāļ§āļŠāļēāļĄāļēāļĢāļāļĢāļąāļ Request āļāļēāļ HTTP āļāļ Port 3000 āđāļĨāļ° gRPC āļāļ Port 5000 āđāļāđāļāļĢāđāļāļĄāļāļąāļ āļāļķāđāļāđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāđāļāļĒāđ Migrate āļāļēāļ Monolith āđāļāļŠāļđāđ Microservices
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Node.js / NestJS āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
Service Boundaries āđāļĨāļ° Domain-Driven Design āļāļąāļ NestJS
āļāļēāļĢāļāļāļāđāļāļ Microservices āļāļĩāđāļāļĩāļāđāļāļāļāļģāļāļķāļāļāļķāļ Service Boundaries āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ āļŦāļĨāļąāļāļāļēāļĢ Domain-Driven Design (DDD) āļāđāļ§āļĒāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļāļāļāđāļāļāļāļāļāđāļāđāļĨāļ° Service āđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
āđāļāļ§āļāļēāļāļŦāļĨāļąāļāđāļāļāļēāļĢāļāļģāļŦāļāļ Service Boundaries āļĄāļĩāļāļąāļāļāļĩāđ:
Bounded Context āđāļāđāļĨāļ° Service āļāļ§āļĢāļĢāļąāļāļāļīāļāļāļāļ Domain āđāļāļĩāļĒāļ§āļāļĩāđāļĄāļĩāļāļ§āļēāļĄāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāļāļĒāđāļēāļāļāļąāļāđāļāļ āđāļāđāļ Orders Service, Users Service āļŦāļĢāļ·āļ Payments Service
Aggregate Root āđāļāđ Aggregate Pattern āđāļāļāļēāļĢāļāļąāļāļāļĨāļļāđāļĄ Entity āļāļĩāđāļāđāļāļāļāļēāļĢ Transactional Consistency āđāļāđāļēāļāđāļ§āļĒāļāļąāļ āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāđāļāļĄāļđāļĨāļāļ§āļĢāļāļģāļāđāļēāļ Aggregate Root āđāļāđāļēāļāļąāđāļ
Event Storming āđāļāđāđāļāļāļāļīāļ Event Storming āđāļāļāļēāļĢāļāđāļāļŦāļē Domain Events āđāļĨāļ°āļāļģāļŦāļāļ Service Boundaries āļāļēāļ Event āļāļĩāđāđāļāļīāļāļāļķāđāļāđāļāļĢāļ°āļāļ
NestJS Module System āļŠāļāļąāļāļŠāļāļļāļāļāļēāļĢāđāļāđāļ Bounded Context āđāļāđāļāļĒāđāļēāļāđāļāđāļāļāļĢāļĢāļĄāļāļēāļāļī āđāļāđāļĨāļ° Module āļŠāļēāļĄāļēāļĢāļ Encapsulate Logic āļāļāļ Domain āļāļąāđāļāđ āđāļĨāļ° Export āđāļāļāļēāļ° Interface āļāļĩāđāļāļģāđāļāđāļ
Reliability Patterns: Timeouts, Retries āđāļĨāļ° Circuit Breakers
āđāļāļĢāļ°āļāļ Microservices āļāļ§āļēāļĄāļāđāļēāđāļāļ·āđāļāļāļ·āļāđāļāđāļāļŠāļīāđāļāļŠāļģāļāļąāļāļāļĒāđāļēāļāļĒāļīāđāļ āļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ Services āļāļēāļāļĨāđāļĄāđāļŦāļĨāļ§āđāļāđāļāļēāļāļŦāļĨāļēāļĒāļŠāļēāđāļŦāļāļļ āđāļāđāļ Network Latency, Service Unavailability āļŦāļĢāļ·āļ Resource Exhaustion
āļāļēāļĢāđāļāđ Timeout āđāļĨāļ° Retry Pattern āđāļ NestJS āļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāļ§āļĒ RxJS Operators:
import { Inject, Injectable } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { firstValueFrom, timeout, retry } from 'rxjs';
@Injectable()
export class OrdersService {
private usersService: any;
constructor(@Inject('USERS_PACKAGE') private client: ClientGrpc) {}
onModuleInit() {
this.usersService = this.client.getService('UsersService');
}
async getOrderWithUser(orderId: string, userId: string) {
// 3-second deadline, 2 retries with exponential backoff
const user = await firstValueFrom(
this.usersService.findOne({ id: userId }).pipe(
timeout(3000),
retry({ count: 2, delay: (err, retryCount) => {
const jitter = Math.random() * 100;
return new Promise(r => setTimeout(r, 1000 * retryCount + jitter));
}}),
),
);
return { orderId, user };
}
}āđāļāđāļāļāļĩāđāđāļŠāļāļāļāļēāļĢāđāļāđāļāļēāļ Timeout 3 āļ§āļīāļāļēāļāļĩ āđāļĨāļ° Retry āļŠāļđāļāļŠāļļāļ 2 āļāļĢāļąāđāļāļāļĢāđāļāļĄ Exponential Backoff āđāļĨāļ° Jitter āđāļāļ·āđāļāļāđāļāļāļāļąāļ Thundering Herd Problem
Circuit Breaker Pattern āđāļāđāļāļāļĩāļāļŦāļāļķāđāļ Pattern āļāļĩāđāļŠāļģāļāļąāļāđāļāļāļēāļĢāļāđāļāļāļāļąāļāđāļĄāđāđāļŦāđ Failure āđāļāļĢāđāļāļĢāļ°āļāļēāļĒāđāļāļāļąāđāļāļĢāļ°āļāļ āđāļĄāļ·āđāļ Service āļŦāļāļķāđāļāļĨāđāļĄāđāļŦāļĨāļ§āđāļāļīāļāļāļģāļāļ§āļāļāļĢāļąāđāļāļāļĩāđāļāļģāļŦāļāļ Circuit āļāļ° Open āđāļĨāļ° Request āđāļŦāļĄāđāļāļ°āļāļđāļ Reject āļāļąāļāļāļĩāđāļāļĒāđāļĄāđāļāđāļāļāļĢāļ Timeout
āļŠāļēāļĄāļēāļĢāļāđāļāđ Library āđāļāđāļ opossum āļŦāļĢāļ·āļ cockatiel āļĢāđāļ§āļĄāļāļąāļ NestJS āđāļāļ·āđāļ Implement Circuit Breaker Pattern āđāļāđ
NestJS 11 āļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāđāļāļāđāļ Trace Context āļĢāļ°āļŦāļ§āđāļēāļ Services āđāļāļĒāļāļąāļāđāļāļĄāļąāļāļīāđāļĄāļ·āđāļāđāļāđāļĢāđāļ§āļĄāļāļąāļ OpenTelemetry āļāļķāđāļāļāđāļ§āļĒāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļīāļāļāļēāļĄ Request āļāļĩāđāļāđāļēāļāļŦāļĨāļēāļĒ Services āđāļāđāļāļĒāđāļēāļāļāļĢāļāļāđāļ§āļ āļāļ§āļĢāļāļąāđāļāļāđāļē Tracing āļāļąāđāļāđāļāđāđāļĢāļīāđāļĄāļāđāļāđāļāļĢāđāļāļāļāđāđāļāļ·āđāļāļāļ§āļēāļĄāļŠāļ°āļāļ§āļāđāļāļāļēāļĢ Debug
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Node.js / NestJS āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ NestJS Microservices
āļŠāđāļ§āļāļāļĩāđāļĢāļ§āļāļĢāļ§āļĄāļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļāļĩāđāļāļāļāđāļāļĒāđāļāļĩāđāļĒāļ§āļāļąāļ NestJS Microservices āļāļĢāđāļāļĄāļāļģāļāļāļāļāļĩāđāļāļĢāļāļāļāļĨāļļāļĄ
āļāļģāļāļēāļĄāļāļĩāđ 1: āļāļāļīāļāļēāļĒāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ @MessagePattern āđāļĨāļ° @EventPattern
āļāļģāļāļāļ: @MessagePattern āđāļāđāļŠāļģāļŦāļĢāļąāļ Request-Response Pattern āļāļĩāđāļāļđāđāđāļĢāļĩāļĒāļāļāđāļāļāļāļēāļĢāļĢāļāļĢāļąāļāļāļĨāļĨāļąāļāļāđāļāļĨāļąāļāļĄāļē āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢ Query āļāđāļāļĄāļđāļĨāļŦāļĢāļ·āļ Command āļāļĩāđāļāđāļāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļĨāļĨāļąāļāļāđ āđāļāļāļāļ°āļāļĩāđ @EventPattern āđāļāđāļŠāļģāļŦāļĢāļąāļ Fire-and-Forget Pattern āļāļĩāđāđāļĄāđāļāđāļāļāļāļēāļĢāļāļĨāļĨāļąāļāļāđāļāļĨāļąāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļ Event āđāļŦāđ Services āļāļ·āđāļāļāļĢāļēāļāđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāļāļēāļĢāļāļāļāļāļĨāļąāļ
āļāļģāļāļēāļĄāļāļĩāđ 2: gRPC āđāļŦāđāļāđāļāļāļĩāļāļ°āđāļĢāđāļŦāļāļ·āļāļāļ§āđāļē REST āđāļāļĢāļ°āļāļ Microservices
āļāļģāļāļāļ: gRPC āđāļŦāđāļāđāļāļāļĩāļŦāļĨāļēāļĒāļāļĢāļ°āļāļēāļĢ āđāļāđāđāļāđ āļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļĩāđāļŠāļđāļāļāļ§āđāļēāđāļāļ·āđāļāļāļāļēāļāđāļāđ Protocol Buffers āļāļĩāđ Serialize āļāđāļāļĄāļđāļĨāđāļāđāđāļĨāđāļāļāļ§āđāļē JSON, āļĢāļāļāļĢāļąāļ HTTP/2 āļāļĩāđāļāđāļ§āļĒāđāļŦāđ Multiplexing āđāļāđ, āļĄāļĩ Strongly Typed Contract āļāļēāļ .proto file āļāļĩāđāļāđāļ§āļĒāļāđāļāļāļāļąāļ Breaking Changes, āđāļĨāļ°āļĢāļāļāļĢāļąāļ Streaming āļāļąāđāļ Server-side, Client-side āđāļĨāļ° Bidirectional
āļāļģāļāļēāļĄāļāļĩāđ 3: āļāļāļīāļāļēāļĒāļ§āļīāļāļĩāļāļēāļĢ Implement Circuit Breaker āđāļ NestJS
āļāļģāļāļāļ: Circuit Breaker āļŠāļēāļĄāļēāļĢāļ Implement āđāļāđāđāļāļĒāđāļāđ Library āđāļāđāļ opossum āļŦāļĢāļ·āļ cockatiel Circuit āļĄāļĩāļŠāļēāļĄāļŠāļāļēāļāļ° āđāļāđāđāļāđ Closed (āļāļģāļāļēāļāļāļāļāļī), Open (Reject Request āļāļąāļāļāļĩ) āđāļĨāļ° Half-Open (āļāļāļŠāļāļāļ§āđāļē Service āļāļĨāļąāļāļĄāļēāļāļģāļāļēāļāļāļāļāļīāļŦāļĢāļ·āļāļĒāļąāļ) āđāļĄāļ·āđāļ Failure āđāļāļīāļ Threshold Circuit āļāļ° Open āđāļĨāļ°āļŦāļĨāļąāļāļāļēāļāļāđāļēāļ Reset Timeout āļāļ°āđāļāđāļēāļŠāļđāđāļŠāļāļēāļāļ° Half-Open āđāļāļ·āđāļāļāļāļŠāļāļ
āļāļģāļāļēāļĄāļāļĩāđ 4: āļ§āļīāļāļĩāļāļēāļĢāļāļąāļāļāļēāļĢ Distributed Transactions āđāļāļĢāļ°āļāļ Microservices
āļāļģāļāļāļ: āļĄāļĩāļŦāļĨāļēāļĒāđāļāļ§āļāļēāļ āđāļāđāđāļāđ Saga Pattern āļāļĩāđāđāļāđ Compensating Transactions āđāļāļ·āđāļ Rollback āđāļĄāļ·āđāļāđāļāļīāļ Failure, Outbox Pattern āļāļĩāđāđāļāđāļ Event āđāļāļāļēāļĢāļēāļāđāļāļĩāļĒāļ§āļāļąāļ Business Data āđāļĨāđāļ§āđāļāđ CDC āļŦāļĢāļ·āļ Polling āļŠāđāļ Event, āđāļĨāļ° Event Sourcing āļāļĩāđāđāļāđāļāļāļļāļ State Change āđāļāđāļ Event āđāļĨāđāļ§ Replay āđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢ
āļāļģāļāļēāļĄāļāļĩāđ 5: āļāļāļīāļāļēāļĒāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ Hybrid Application āļāļąāļ Standalone Microservice āđāļ NestJS
āļāļģāļāļāļ: Standalone Microservice āļŠāļĢāđāļēāļāļāđāļ§āļĒ NestFactory.createMicroservice() āļĢāļāļāļĢāļąāļāđāļāļāļēāļ° Transport āļāļĩāđāļāļģāļŦāļāļāđāļāļĩāļĒāļāļāļąāļ§āđāļāļĩāļĒāļ§ āđāļāļāļāļ°āļāļĩāđ Hybrid Application āļŠāļĢāđāļēāļāļāđāļ§āļĒ NestFactory.create() āđāļĨāđāļ§āđāļāļ·āđāļāļĄāļāđāļ Microservices āđāļāļīāđāļĄāđāļāļīāļĄāļāđāļ§āļĒ app.connectMicroservice() āļāđāļ§āļĒāđāļŦāđ Service āđāļāļĩāļĒāļ§āļĢāļāļāļĢāļąāļāļāļąāđāļ HTTP āđāļĨāļ° Transport āļāļ·āđāļāđ āļāļĢāđāļāļĄāļāļąāļ
āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļąāļ§āļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļīāđāļĄāđāļāļīāļĄ āļŠāļēāļĄāļēāļĢāļāļĻāļķāļāļĐāļēāđāļĢāļ·āđāļāļ NestJS modules and dependency injection āđāļĨāļ° middleware and interceptors āđāļāļ·āđāļāļāļ§āļēāļĄāđāļāđāļēāđāļāļāļĩāđāļāļĢāļāļāļāļĨāļļāļĄāļĒāļīāđāļāļāļķāđāļ
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Node.js / NestJS āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļŠāļĢāļļāļ
āļāļēāļĢāļāļąāļāļāļē Microservices āļāđāļ§āļĒ NestJS āđāļāļāļĩ 2026 āļĄāļĩāļāļ§āļēāļĄāļŠāļĄāļāļđāļĢāļāđāđāļāļāļĄāļēāļāļĒāļīāđāļāļāļķāđāļ āļāļĢāļ°āđāļāđāļāļŠāļģāļāļąāļāļāļĩāđāļāļ§āļĢāļāļāļāļģāļĄāļĩāļāļąāļāļāļĩāđ:
- Transport Layer āļāļāļ NestJS āļĢāļāļāļĢāļąāļāļŦāļĨāļēāļĒ Protocol āđāļĨāļ°āđāļāđ
@MessagePatternāļŠāļģāļŦāļĢāļąāļ Request-Response āđāļĨāļ°@EventPatternāļŠāļģāļŦāļĢāļąāļ Event-Driven - gRPC āđāļŦāđāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļāļāļ§āđāļē REST āđāļĨāļ°āļĢāļāļāļĢāļąāļ Streaming āļŦāļĨāļēāļĒāļĢāļđāļāđāļāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļ āļēāļĒāđāļāļĢāļ°āļāļ
- Hybrid Application āļāđāļ§āļĒāđāļŦāđ Service āđāļāļĩāļĒāļ§āļĢāļāļāļĢāļąāļāļāļąāđāļ HTTP āđāļĨāļ° gRPC āļāļĢāđāļāļĄāļāļąāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢ Migrate āđāļāļŠāļđāđ Microservices
- Domain-Driven Design āļāđāļ§āļĒāļāļģāļŦāļāļ Service Boundaries āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāđāļēāļ Bounded Context āđāļĨāļ° Aggregate Pattern
- Reliability Patterns āđāļāđāļ Timeout, Retry āđāļĨāļ° Circuit Breaker āđāļāđāļāļŠāļīāđāļāļāļģāđāļāđāļāļŠāļģāļŦāļĢāļąāļāļĢāļ°āļāļ Production
- NestJS 11 āđāļāļīāđāļĄāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļĄāđ āđāļāđāļ
unwrap()āđāļĨāļ° Trace Propagation āļāļĩāđāļāđāļ§āļĒāđāļāļāļēāļĢāļāļąāļāļāļēāđāļĨāļ° Debug
āđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āđāļāđāļ
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

NestJS + Prisma: āļŠāđāļāļāđāļāđāļāđāļāļāļāđāļŠāļĄāļąāļĒāđāļŦāļĄāđāļŠāļģāļŦāļĢāļąāļ Node.js
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāđāļāļāļēāļĢāļŠāļĢāđāļēāļ API āđāļāđāļāđāļāļāļāđāļŠāļĄāļąāļĒāđāļŦāļĄāđāļāđāļ§āļĒ NestJS āđāļĨāļ° Prisma āļāļĢāļāļāļāļĨāļļāļĄāļāļēāļĢāļāļąāđāļāļāđāļē āđāļĄāđāļāļĨ āđāļāļāļĢāđāļ§āļīāļŠ āļāļĢāļēāļāđāļāļāļāļąāļ āđāļĨāļ°āđāļāļ§āļāļāļīāļāļąāļāļīāļāļĩāđāļāļĩ

NestJS: āļŠāļĢāđāļēāļ REST API āļāļĩāđāļŠāļĄāļāļđāļĢāļāđāļāļąāđāļāđāļāđāđāļĢāļīāđāļĄāļāđāļ
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļ REST API āļĢāļ°āļāļąāļāļĄāļ·āļāļāļēāļāļĩāļāļāđāļ§āļĒ NestJS āļāļĢāļāļāļāļĨāļļāļĄ Controller, Service, Module, āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāđāļāļĄāļđāļĨāļāđāļ§āļĒ class-validator āđāļĨāļ°āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļīāļāļāļĨāļēāļ

āļŠāļąāļĄāļ āļēāļĐāļāđ NestJS: Guards, Interceptors āđāļĨāļ°āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāđāļāļāđāļĄāļāļđāļĨ
āļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒāđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāđāļāļāļāļīāļ NestJS āđāļāļĩāđāļĒāļ§āļāļąāļ Guards, Interceptors āđāļĨāļ°āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāđāļāļāđāļĄāļāļđāļĨ āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ TypeScript āļāļĩāđāđāļāđāļāļĢāļđāļāļāļĢāļĢāļĄāđāļĨāļ°āļāļģāļāļāļīāļāļēāļĒāļāļēāļāđāļāļāļāļīāļ