API Gateway Mimarisi: Erişim Kontrolü ve Yük Dengelemesi
# API Gateway Mimarisi: Erişim Kontrolü ve Yük Dengelemesi
API Gateway, istemci isteklerini alıp arka planda çalışan servislere yönlendiren merkezi bir kapı gibi düşün. Gelen her isteği kontrol eder, kimlik doğrulaması yapar ve trafiği sunucuların arasında dağıtır. Böylece bir sunucu çökmese bile sistem çalışmaya devam eder.
Gelen istek önce kimlik kontrolünden geçer. Token var mı? Geçerli mi? Hangi servislere erişme yetkisi var? Bu kontroller API Gateway'de yapılır.
Basit bir örnek:
1const express = require('express');2const jwt = require('jsonwebtoken');34const app = express();5const SECRET = 'gizli-anahtar';67// Token doğrulama middleware8const verifyToken = (req, res, next) => {9const token = req.headers['authorization']?.split(' ')[1];1011if (!token) return res.status(401).json({ hata: 'Token gerekli' });1213try {14const decoded = jwt.verify(token, SECRET);15req.user = decoded;16next();17} catch (err) {18res.status(403).json({ hata: 'Geçersiz token' });19}20};2122app.get('/api/veri', verifyToken, (req, res) => {23res.json({ mesaj: 'Hoş geldin ' + req.user.isim });24});2526app.listen(3000);Çıktı: Token olmadan istek atarsan `{"hata": "Token gerekli"}` alırsın. Geçerli token ile `{"mesaj": "Hoş geldin Ali"}` döner.
Birden fazla sunucu varsa, her isteği sırayla farklı sunucuya gönder. Böylece hiçbiri aşırı yüklenmez.
1const http = require('http');23const servers = [4'http://localhost:3001',5'http://localhost:3002',6'http://localhost:3003'7];89let currentIndex = 0;1011const gateway = http.createServer((req, res) => {12// Sırayla sunucu seç (round-robin)13const targetServer = servers[currentIndex % servers.length];14currentIndex++;1516console.log(`İstek gönderiliyor: ${targetServer}`);1718// Gerçek uygulamada proxy kütüphanesi (http-proxy) kullan19res.writeHead(200);20res.end(`${targetServer}'ye yönlendirildi`);21});2223gateway.listen(8000);24console.log('Gateway 8000 portunda çalışıyor');Çıktı: Her istek farklı bir sunucuya gider:
- 1. istek localhost:3001
- 2. istek localhost:3002
- 3. istek localhost:3003
- 4. istek localhost:3001 (döngü başa döner)
Gerçek hayatta bu ikisini birleştirirsin: önce token kontrol et, sonra yük dengelemesi yap.
1// Önce token doğrula2app.use(verifyToken);34// Sonra yük dengelemesi ile yönlendir5app.use((req, res) => {6const targetServer = servers[currentIndex % servers.length];7currentIndex++;8// http-proxy ile isteği yönlendir9proxy.web(req, res, { target: targetServer });10});API Gateway iki temel işi yapar: kimse izinsiz girmez (erişim kontrolü) ve trafiği eşit dağıtır (yük dengelemesi). Bu sayede sistem güvenli, hızlı ve dayanıklı olur.
0 yorum