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');
3
4const app = express();
5const SECRET = 'gizli-anahtar';
6
7// Token doğrulama middleware
8const verifyToken = (req, res, next) => {
9const token = req.headers['authorization']?.split(' ')[1];
10
11if (!token) return res.status(401).json({ hata: 'Token gerekli' });
12
13try {
14const decoded = jwt.verify(token, SECRET);
15req.user = decoded;
16next();
17} catch (err) {
18res.status(403).json({ hata: 'Geçersiz token' });
19}
20};
21
22app.get('/api/veri', verifyToken, (req, res) => {
23res.json({ mesaj: 'Hoş geldin ' + req.user.isim });
24});
25
26app.listen(3000);

Çıktı: Token olmadan istek atarsan `{"hata": "Token gerekli"}` alırsın. Geçerli token ile `{"mesaj": "Hoş geldin Ali"}` döner.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

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');
2
3const servers = [
4'http://localhost:3001',
5'http://localhost:3002',
6'http://localhost:3003'
7];
8
9let currentIndex = 0;
10
11const gateway = http.createServer((req, res) => {
12// Sırayla sunucu seç (round-robin)
13const targetServer = servers[currentIndex % servers.length];
14currentIndex++;
15
16console.log(`İstek gönderiliyor: ${targetServer}`);
17
18// Gerçek uygulamada proxy kütüphanesi (http-proxy) kullan
19res.writeHead(200);
20res.end(`${targetServer}'ye yönlendirildi`);
21});
22
23gateway.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ğrula
2app.use(verifyToken);
3
4// Sonra yük dengelemesi ile yönlendir
5app.use((req, res) => {
6const targetServer = servers[currentIndex % servers.length];
7currentIndex++;
8// http-proxy ile isteği yönlendir
9proxy.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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz