Arsitektur Microservices ForgeFlix: Menggabungkan NestJS, Next.js 15, dan FastAPI ML Engine
Membahas perancangan arsitektur terdistribusi pada ForgeFlix streaming platform, mengintegrasikan NestJS untuk API bisnis, Next.js 15 untuk SSR/ISR sinematik, dan FastAPI Python untuk rekomendasi ML.
Table of Contents
- Arsitektur Microservices ForgeFlix: Menggabungkan NestJS, Next.js 15, dan FastAPI ML Engine
- 1. Backend Core API (NestJS + Prisma + Redis)
- Komponen Utama Backend:
- 2. Machine Learning Recommendation Microservice (FastAPI + Python)
- Alasan Penggunaan FastAPI:
- 3. Frontend Web Client (Next.js 15 App Router + React 19)
- Fitur Frontend Utama:
- Kesimpulan
Dalam membangun platform streaming video modern seperti ForgeFlix, memilih arsitektur monolit tunggal sering kali menjadi titik henti (bottleneck) ketika aplikasi harus menangani pemrosesan rekomendasi machine learning berbobot tinggi sekaligus melayani request rendering halaman UI sinematik.
Untuk mengatasi tantangan ini, kami merancang ForgeFlix menggunakan Arsitektur Microservices Terdistribusi yang memisahkan tanggung jawab aplikasi (Separation of Concerns) menjadi 3 bagian utama:
[ Frontend: Next.js 15 App Router ]
│
┌────────┴────────┐
▼ ▼
[ Backend API ] [ ML Service ]
(NestJS + Redis) (FastAPI + Scikit)
│
▼
[ PostgreSQL / Prisma ]1. Backend Core API (NestJS + Prisma + Redis)
Backend utama ForgeFlix menggunakan NestJS berbasis TypeScript. NestJS dipilih karena struktur modularnya yang berstandar enterprise (Controllers, Modules, Services) serta dukungan native untuk middleware otentikasi.
Komponen Utama Backend:
- Otentikasi & Keamanan: Menggunakan JWT Tokens yang disimpan dalam
HttpOnlySecure Cookies untuk mencegah serangan XSS, dipadukan dengan hashing kata sandibcrypt. - Database & Migration: Menggunakan Prisma ORM dengan PostgreSQL 16 untuk mengelola skema relasional
User,Media,Episode,Watchlist,Comment, danCastMember. - Redis Caching Layer: Untuk menghindari rate limit dan latensi saat memanggil TMDB API eksternal, response data film disimpan di Upstash Redis dengan strategi TTL (Time-To-Live) 1 jam.
// Contoh Interceptor Caching Redis di NestJS
@Injectable()
export class TmdbCacheInterceptor implements NestInterceptor {
constructor(private readonly redisService: RedisService) {}
async intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const request = context.switchToHttp().getRequest();
const cacheKey = `tmdb:${request.url}`;
const cachedData = await this.redisService.get(cacheKey);
if (cachedData) {
return of(JSON.parse(cachedData));
}
return next.handle().pipe(
tap(async (data) => {
await this.redisService.set(cacheKey, JSON.stringify(data), 3600);
})
);
}
}2. Machine Learning Recommendation Microservice (FastAPI + Python)
Tugas menghitung bobot kesamaan film menggunakan matriks TF-IDF dan Cosine Similarity diserahkan ke microservice terpisah berbasis FastAPI (Python 3.11).
Alasan Penggunaan FastAPI:
- Performa eksekusi Python berkecepatan tinggi berkat runtime
asynciodanuvicorn. - Integrasi langsung dengan ekosistem ilmu data Python (
scikit-learn,pandas,numpy). - Penanganan kalkulasi matriks Vektor dalam memori yang sangat responsif (<15ms per request).
# FastAPI Endpoint untuk rekomendasi film
@app.get("/recommend/{tmdb_id}", response_model=List[RecommendationResponse])
async def get_recommendations(tmdb_id: int, limit: int = 10):
try:
recommendations = recommendation_engine.predict_similar(tmdb_id, top_n=limit)
return recommendations
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))3. Frontend Web Client (Next.js 15 App Router + React 19)
Untuk menghadirkan antarmuka yang responsif dan sinematik, kami memanfaatkan Next.js 15 App Router. Fitur React Server Components (RSC) memungkinkan pengambilan data metadata film langsung di server, sehingga halaman awal termuat tanpa delay indikator pemuatan.
Fitur Frontend Utama:
- Dynamic Episode Routing: Rute khusus per episode
/series/[slug]/season/[n]/episode/[n]. - Multi-Server Video Player: 4 opsi server embed (VidSrc Pro, VidSrc IC, SuperEmbed, EmbedSu) dengan fitur mode Matikan Lampu.
- Payment Paywall: Integrasi Stripe Sandbox dan Duitku untuk upgrade akun VIP.
Kesimpulan
Dengan memisahkan layanan menjadi NestJS (bisnis & auth), FastAPI (ML recommendation), dan Next.js 15 (rendering & UX), ForgeFlix mampu menyajikan aplikasi streaming agregator yang cepat, stabil, dan dapat dikembangkan (scalable) di masa depan.