Backend 7 min read

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.

0 views

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 HttpOnly Secure Cookies untuk mencegah serangan XSS, dipadukan dengan hashing kata sandi bcrypt.
  • Database & Migration: Menggunakan Prisma ORM dengan PostgreSQL 16 untuk mengelola skema relasional User, Media, Episode, Watchlist, Comment, dan CastMember.
  • 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 asyncio dan uvicorn.
  • 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.