Yük Dengeleme ve Birden Çok Anahtar Stratejileri
Hız sınırı kapasitenizi artırmak ve p99 gecikme artışlarını azaltmak için birden çok API anahtarı ve hesap arasında dönüşümlü ve ağırlıklı yük dengeleme uygulayın.
Yük Dengeleme ve Birden Çok Anahtar Stratejileri, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Tek Bir API Anahtarı Neden Yeterli Değildir
Tek bir OpenAI API anahtarı, dakika başına istek (RPM) ve dakika başına belirteç (TPM) olarak ölçülen sabit bir hız sınırına sahiptir. 1. Katmanda GPT-4o, 500 RPM ve 30.000 TPM değerlerine izin verir. Yüzlerce eşzamanlı kullanıcının bulunduğu bir üretim uygulamasında tek bir anahtar bu sınırlara sürekli olarak ulaşır. Birden çok API anahtarı, kullanabileceğiniz kapasite payını orantılı olarak artırır.
Birden Çok API Anahtarı Oluşturma
Tek bir OpenAI kuruluşu içinde birden çok API anahtarı oluşturabilir veya birden çok OpenAI hesabı oluşturabilirsiniz (her biri ayrı faturalandırılır). Her anahtarı ortam yapılandırmanızda saklayın ve bunları bir havuz olarak ele alın. Anahtarları kaynak kodunuzda veya sürüm denetimine kaydedilmiş .env dosyalarında tutmak yerine AWS Secrets Manager ya da HashiCorp Vault gibi bir gizli bilgiler yöneticisinde saklayın.
import os
API_KEYS = [
os.environ['OPENAI_KEY_1'],
os.environ['OPENAI_KEY_2'],
os.environ['OPENAI_KEY_3'],
os.environ['OPENAI_KEY_4'],
]
# Total effective RPM = 500 * 4 = 2000 RPM
# Total effective TPM = 30000 * 4 = 120000 TPMDöngüsel Yük Dengeleme
Döngüsel dağıtım, anahtarlar arasında sırayla dolaşarak istekleri tüm anahtarlara eşit biçimde dağıtır. Uygulaması basittir ve zaman içinde her anahtarın yaklaşık olarak aynı yükü işlemesini sağlar. Aynı anahtarın aynı anda iki eşzamanlı istek tarafından seçilmesini önlemek için iş parçacığı güvenli bir sayaç veya atomik bir tamsayı kullanın. Döngüsel dağıtım, tüm anahtarların aynı hız sınırlarına sahip olduğu durumlarda iyi çalışır.
import itertools
import threading
from openai import OpenAI
class RoundRobinPool:
def __init__(self, keys: list):
self._clients = [OpenAI(api_key=k) for k in keys]
self._cycle = itertools.cycle(range(len(self._clients)))
self._lock = threading.Lock()
def get_client(self) -> OpenAI:
with self._lock:
idx = next(self._cycle)
return self._clients[idx]
pool = RoundRobinPool(API_KEYS)
client = pool.get_client()Ağırlıklı Yük Dengeleme
Ağırlıklı yük dengeleme, daha yüksek katmandaki anahtarlara (daha yüksek hız sınırlarına sahip olanlara) kapasiteleriyle orantılı olarak daha büyük bir trafik payı atar. A anahtarı 3. Katmandaysa (10.000 RPM) ve B anahtarı 1. Katmandaysa (500 RPM), A anahtarı isteklerin yaklaşık %95'ini almalıdır. Ağırlıklı dengeleme, daha düşük katmandaki anahtarların daha yüksek katmandakilerle birlikte kullanıldığında darboğaz oluşturmasını önler.
import random
class WeightedPool:
def __init__(self, key_configs: list):
# key_configs = [{'key': '...', 'weight': 10}, ...]
self._clients = [OpenAI(api_key=c['key']) for c in key_configs]
self._weights = [c['weight'] for c in key_configs]
def get_client(self) -> OpenAI:
return random.choices(self._clients, weights=self._weights, k=1)[0]
pool = WeightedPool([
{'key': os.environ['OPENAI_KEY_TIER3'], 'weight': 20},
{'key': os.environ['OPENAI_KEY_TIER1'], 'weight': 1},
])Anahtar Başına Hız Sınırı Durumunu İzleme
OpenAI API'si her yanıtla birlikte hız sınırı üst bilgilerini döndürür: x-ratelimit-remaining-requests ve x-ratelimit-remaining-tokens. Tükenmeye yaklaşan anahtarları bilmek için bu üst bilgileri anahtar bazında izleyin. Bir anahtar geçerli dakikada 10'dan az kalan istek bildirdiğinde, 429 hataları oluşmadan önce trafiği geçici olarak bu anahtardan uzaklaştırın.
class SmartPool:
def __init__(self, keys: list):
self._clients = [OpenAI(api_key=k) for k in keys]
self._remaining = {i: 500 for i in range(len(keys))} # initial RPM
def get_best_client(self):
# Pick key with most remaining capacity
best_idx = max(self._remaining, key=lambda i: self._remaining[i])
return self._clients[best_idx], best_idx
def update_remaining(self, idx: int, response_headers: dict):
remaining = int(response_headers.get('x-ratelimit-remaining-requests', 0))
self._remaining[idx] = remaining429 Hız Sınırı Hatalarını Ele Alma
Bir anahtar 429 hatası döndürdüğünde, Retry-After üst bilgisinde belirtilen süre boyunca (genellikle 60 saniye) bu anahtarı hemen havuzdan çıkarın. Anahtarı soğumaya alındı olarak işaretleyin ve tüm trafiği kalan anahtarlara yönlendirin. Soğuma süresi dolduktan sonra anahtarı havuza geri ekleyin. Bu, aynı anahtara yapılan yeniden denemelerin durumu daha da kötüleştirdiği zincirleme hataları önler.
import time
from openai import RateLimitError
class CooldownPool:
def __init__(self, keys: list):
self._clients = [(OpenAI(api_key=k), None) for k in keys] # (client, cooldown_until)
def get_available_clients(self):
now = time.time()
return [
(i, c) for i, (c, until) in enumerate(self._clients)
if until is None or until <= now
]
def mark_cooling(self, idx: int, retry_after: int = 60):
client, _ = self._clients[idx]
self._clients[idx] = (client, time.time() + retry_after)
print(f'Key {idx} cooling down for {retry_after}s')Çoklayıcı Olarak OpenRouter Kullanma
OpenRouter, yüzlerce modeli OpenAI uyumlu tek bir API uç noktası üzerinden sunan bir vekil hizmetidir. OpenRouter üzerinden yönlendirme yaptığınızda, birden çok temel sağlayıcı hesabı arasında otomatik yük dengeleme, alternatif sağlayıcılara geri dönüş ve yedek olarak açık kaynaklı modellere erişim elde edersiniz. Sağladığı operasyonel kolaylık karşılığında maliyet artışı düşüktür.
from openai import OpenAI
# OpenRouter uses the same OpenAI SDK interface
client = OpenAI(
api_key=os.environ['OPENROUTER_API_KEY'],
base_url='https://openrouter.ai/api/v1'
)
response = client.chat.completions.create(
model='openai/gpt-4o', # OpenRouter model name format
messages=[{'role': 'user', 'content': prompt}]
)
# Automatic failover if OpenAI is downÖlçümlerle Anahtar Sağlığını İzleme
Gönderilen istekler, alınan 429 hataları ve son bir saatteki soğuma süresi gibi ölçümleri anahtar bazında izleyin. 429 oranı yüksek olan bir anahtar için ya trafik azaltılmalı ya da katmanı yükseltilmelidir. Bu ölçümleri Prometheus biçiminde bir /metrics uç noktasında sunun; böylece izleme sisteminiz herhangi bir anahtarın sürekli olarak sınırlara ulaştığında uyarı verebilir.
from dataclasses import dataclass, field
from collections import defaultdict
@dataclass
class KeyMetrics:
requests_sent: int = 0
rate_limit_errors: int = 0
total_tokens_used: int = 0
cooldown_count: int = 0
class MetricPool:
def __init__(self, keys: list):
self._clients = [OpenAI(api_key=k) for k in keys]
self._metrics = [KeyMetrics() for _ in keys]
def report(self):
for i, m in enumerate(self._metrics):
error_rate = m.rate_limit_errors / max(m.requests_sent, 1)
print(f'Key {i}: {m.requests_sent} req, {error_rate:.1%} 429 rate')Coğrafi Anahtar Dağıtımı
Kullanıcılarınız dünyaya yayılmışsa her coğrafi bölge için ayrı API anahtarları bulundurmayı ve istekleri kullanıcıya en yakın anahtara yönlendirmeyi değerlendirin. Ağ gidiş-dönüş süresinin azalması TTFT'yi iyileştirir. Her bölgede, uygun anahtarı seçip isteği vekil üzerinden ileten hafif bir yük dengeleyici (AWS Lambda@Edge veya Cloudflare Worker) dağıtın; böylece anahtarlarınız istemcilerin erişiminden korunur.
REGIONAL_KEYS = {
'us-east': os.environ['OPENAI_KEY_US_EAST'],
'eu-west': os.environ['OPENAI_KEY_EU_WEST'],
'ap-southeast': os.environ['OPENAI_KEY_AP'],
}
def get_key_for_region(user_region: str) -> str:
# Default to us-east if region unknown
return REGIONAL_KEYS.get(user_region, REGIONAL_KEYS['us-east'])Yük Dengeleyicinizi Sınama
Dengeleme havuzunuz üzerinden 100 eşzamanlı istek gönderen ve dağılımı, hata oranlarını ve gecikme yüzdeliklerini ölçen bir yük testi yazın. Hiçbir tek anahtarın orantılı payından fazlasını işlemediğini ve 429 hatalarının %0,1'in altında olduğunu doğrulayın. Üretim sisteminizin gerçekte karşılaşacağı eşzamanlı yükü benzetmek için asyncio.gather veya Locust gibi bir araç kullanın.
import asyncio
import time
async def load_test(pool, concurrency=100, total=1000):
sem = asyncio.Semaphore(concurrency)
results = []
async def one_request():
async with sem:
client = pool.get_client()
start = time.perf_counter()
try:
await client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Ping'}],
max_tokens=5
)
results.append(('ok', time.perf_counter() - start))
except Exception as e:
results.append(('error', str(e)))
await asyncio.gather(*[one_request() for _ in range(total)])
ok = [r for r in results if r[0] == 'ok']
print(f'Success rate: {len(ok)/total:.1%}')
return resultsDoğru Dengeleme Stratejisini Seçme
Dengeleme stratejinizi hız sınırı yapınıza uygun seçin. Tüm anahtarların katman sınırları aynı ve trafik eşit dağılıyorsa döngüsel dağıtımı kullanın. Anahtarların katman sınırları farklıysa ağırlıklı dengelemeyi kullanın. Ani trafik altında 429 hatalarını en aza indirmeniz gerektiğinde sağlık durumuna duyarlı yönlendirmeyi (tükenmeye yaklaşan anahtarları atlayarak) kullanın. Çoğu üretim sistemi için üstel geri çekilmeli sağlık durumuna duyarlı yönlendirme, basitlik ve dayanıklılık arasında en iyi dengeyi sağlar.
# Strategy selection guide:
# Scenario A: 4 keys all Tier 2 (same limits)
# -> Round-robin: simple, even distribution
#
# Scenario B: 1 Tier 3 key + 3 Tier 1 keys
# -> Weighted: Tier 3 gets 10x weight
#
# Scenario C: Variable traffic with burst periods
# -> Health-aware: track remaining headers, skip near-limit keys
#
# Scenario D: Multi-region, latency-sensitive
# -> Geographic: regional keys, route by user locationHızlı Kontrol
LLM API'leri için yük dengeleme stratejileri konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: döngüsel ve ağırlıklı dengeleme, hız sınırı kapasitesini artırmak için trafiği birden çok API anahtarına dağıtır; soğuma izleme, kısıtlanmış anahtarları geçici olarak kaldırarak zincirleme 429 hatalarını önler; OpenRouter ise otomatik geri dönüş içeren yönetilen bir çoklama seçeneği sunar. Sırada geri dönüş sağlayıcılarını ve devre kesicileri uygulama var.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Yük Dengeleme ve Birden Çok Anahtar Stratejileri” dersi ücretsiz mi?
Evet — “Yük Dengeleme ve Birden Çok Anahtar Stratejileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Yük Dengeleme ve Birden Çok Anahtar Stratejileri” dersinde ne öğreneceğim?
Hız sınırı kapasitenizi artırmak ve p99 gecikme artışlarını azaltmak için birden çok API anahtarı ve hesap arasında dönüşümlü ve ağırlıklı yük dengeleme uygulayın. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Yük Dengeleme ve Birden Çok Anahtar Stratejileri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- LLM Gecikmesini Ölçme: TTFT ve TPOT
- Yük Dengeleme ve Birden Çok Anahtar Stratejileri
- Geri Dönüş Sağlayıcıları ve Devre Kesiciler
- Zaman Aşımı Bütçeleri ve Zarif Bozulma