Penyeimbangan Beban dan Strategi Banyak Kunci
Implementasikan penyeimbangan beban round-robin dan berbobot di antara banyak kunci serta akun API untuk memperbesar ruang batas laju dan mengurangi lonjakan latensi p99.
Penyeimbangan Beban dan Strategi Banyak Kunci adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Mengapa Satu Kunci API Tidak Cukup
Satu kunci API OpenAI memiliki batas laju tetap yang diukur dalam permintaan per menit (RPM) dan token per menit (TPM). Pada Tingkat 1, GPT-4o mengizinkan 500 RPM dan 30.000 TPM. Untuk aplikasi produksi dengan ratusan pengguna bersamaan, satu kunci akan terus-menerus mencapai batas ini. Beberapa kunci API meningkatkan kapasitas cadangan yang tersedia secara proporsional.
Membuat Beberapa Kunci API
Anda dapat membuat beberapa kunci API dalam satu organisasi OpenAI, atau membuat beberapa akun OpenAI (masing-masing ditagih secara terpisah). Simpan setiap kunci dalam konfigurasi lingkungan dan perlakukan semuanya sebagai sebuah kumpulan. Simpan kunci dalam pengelola rahasia seperti AWS Secrets Manager atau HashiCorp Vault, bukan dalam kode sumber atau file .env yang dikomit ke kendali versi.
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 TPMPenyeimbangan Beban Round-Robin
Round-robin mendistribusikan permintaan secara merata ke semua kunci dengan menggilirkannya sesuai urutan. Cara ini sederhana untuk diterapkan dan memastikan setiap kunci menangani beban yang kurang lebih sama seiring waktu. Gunakan penghitung yang aman untuk thread atau bilangan bulat atomik agar dua permintaan bersamaan tidak memilih kunci yang sama secara simultan. Round-robin bekerja baik ketika semua kunci memiliki batas laju yang identik.
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()Penyeimbangan Beban Berbobot
Penyeimbangan beban berbobot memberikan porsi lalu lintas yang lebih besar kepada kunci dengan tingkat lebih tinggi (yang memiliki batas laju lebih tinggi), sesuai dengan kapasitasnya. Jika kunci A berada di Tingkat 3 (10.000 RPM) dan kunci B di Tingkat 1 (500 RPM), kunci A seharusnya menerima sekitar 95% permintaan. Penyeimbangan berbobot mencegah kunci tingkat rendah menjadi hambatan ketika digunakan bersama kunci tingkat tinggi.
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},
])Melacak Status Batas Laju per Kunci
API OpenAI mengembalikan header batas laju pada setiap respons: x-ratelimit-remaining-requests dan x-ratelimit-remaining-tokens. Lacak header ini untuk setiap kunci agar Anda mengetahui kunci mana yang hampir kehabisan kapasitas. Saat sebuah kunci melaporkan kurang dari 10 permintaan tersisa pada menit berjalan, arahkan lalu lintas menjauhinya sementara untuk mencegah kesalahan 429 sebelum terjadi.
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] = remainingMenangani Kesalahan Batas Laju 429
Saat sebuah kunci mengembalikan kesalahan 429, segera keluarkan kunci tersebut dari kumpulan selama durasi yang ditentukan dalam header Retry-After (biasanya 60 detik). Tandai kunci sebagai sedang didinginkan dan arahkan semua lalu lintas ke kunci yang tersisa. Setelah masa pendinginan berakhir, kembalikan kunci ke kumpulan. Ini mencegah kegagalan berantai ketika percobaan ulang pada kunci yang sama justru memperburuk keadaan.
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')Menggunakan OpenRouter sebagai Multiplexer
OpenRouter adalah layanan proksi yang menyediakan ratusan model melalui satu endpoint API yang kompatibel dengan OpenAI. Dengan merutekan permintaan melalui OpenRouter, Anda otomatis memperoleh penyeimbangan beban di berbagai akun penyedia yang mendasarinya, pengalihan ke penyedia alternatif, serta akses ke model sumber terbuka sebagai cadangan. Markup biaya yang dikenakan kecil dibandingkan kemudahan operasional yang diperoleh.
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 downMemantau Kesehatan Kunci dengan Metrik
Lacak metrik per kunci, termasuk jumlah permintaan yang dikirim, kesalahan 429 yang diterima, dan waktu pendinginan dalam satu jam terakhir. Kunci dengan tingkat 429 tinggi memerlukan pengurangan lalu lintas atau peningkatan tingkat. Tampilkan metrik ini pada endpoint /metrics dalam format Prometheus agar sistem pemantauan Anda dapat memberi peringatan saat kunci mana pun terus-menerus mencapai batas.
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')Distribusi Kunci Berdasarkan Geografi
Jika pengguna Anda tersebar di seluruh dunia, pertimbangkan untuk mempertahankan kunci API terpisah per wilayah geografis dan merutekan permintaan ke kunci yang paling dekat dengan pengguna. Berkurangnya waktu pulang-pergi jaringan meningkatkan TTFT. Terapkan penyeimbang beban ringan di setiap wilayah (AWS Lambda@Edge atau Cloudflare Worker) yang memilih kunci yang sesuai dan meneruskan permintaan, sehingga kunci Anda terlindungi dari paparan kepada klien.
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'])Menguji Penyeimbang Beban Anda
Tulis pengujian beban yang mengirim 100 permintaan bersamaan melalui kumpulan penyeimbang Anda dan mengukur distribusi, tingkat kesalahan, serta persentil latensi. Pastikan tidak ada satu kunci pun yang menangani lebih dari porsi proporsionalnya dan kesalahan 429 berada di bawah 0,1%. Gunakan asyncio.gather atau alat seperti Locust untuk menyimulasikan beban bersamaan yang benar-benar akan dialami sistem produksi Anda.
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 resultsMemilih Strategi Penyeimbangan yang Tepat
Sesuaikan strategi penyeimbangan dengan struktur batas laju Anda. Gunakan round-robin saat semua kunci memiliki batas tingkat yang identik dan lalu lintas terdistribusi merata. Gunakan penyeimbangan berbobot saat kunci memiliki batas tingkat yang berbeda. Gunakan perutean yang mempertimbangkan kesehatan (melewati kunci yang hampir kehabisan kapasitas) saat Anda perlu meminimalkan kesalahan 429 di bawah lalu lintas yang melonjak. Untuk sebagian besar sistem produksi, perutean yang mempertimbangkan kesehatan dengan jeda mundur eksponensial memberikan keseimbangan terbaik antara kesederhanaan dan ketahanan.
# 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 locationPemeriksaan Cepat
Uji pemahaman Anda tentang strategi penyeimbangan beban untuk API LLM.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari: penyeimbangan round-robin dan berbobot mendistribusikan lalu lintas ke beberapa kunci API untuk meningkatkan kapasitas cadangan batas laju, pelacakan pendinginan mencegah kesalahan 429 berantai dengan menghapus sementara kunci yang dibatasi, dan OpenRouter menyediakan opsi multiplexing terkelola dengan pengalihan otomatis. Selanjutnya, kita akan menerapkan penyedia cadangan dan pemutus sirkuit.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penyeimbangan Beban dan Strategi Banyak Kunci” gratis?
Ya — teks lengkap “Penyeimbangan Beban dan Strategi Banyak Kunci” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Penyeimbangan Beban dan Strategi Banyak Kunci”?
Implementasikan penyeimbangan beban round-robin dan berbobot di antara banyak kunci serta akun API untuk memperbesar ruang batas laju dan mengurangi lonjakan latensi p99. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Penyeimbangan Beban dan Strategi Banyak Kunci” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengukur Latensi LLM: TTFT dan TPOT
- Penyeimbangan Beban dan Strategi Banyak Kunci
- Penyedia Cadangan dan Pemutus Sirkuit
- Anggaran Batas Waktu dan Penurunan Layanan yang Terkendali