Akıllı Önbellekleme Stratejileriyle TTS Maliyetlerini Azaltma

Yayınlandı 23 Şubat 2026
Yazar Speeko Ekibi
optimizasyononbelleklememaliyet-azaltmamimari

Akıllı Önbellekleme Stratejileriyle TTS Maliyetlerini Azaltma

Speeko zaten rakiplerden %90 daha ucuz. Önbellekleme ekleyin, maliyetleri bir %80 daha azaltırsınız.

Önbellekleme Durumu

Çoğu TTS isteği tekrardır. Yaygın ifadeler (karşılama mesajları, hata bildirimleri, kategori duyuruları) binlerce kez üretilir. Bir kez üretin, sonsuza kadar sunun.

Cache Key Tasarımı

Çıktıyı etkileyen giriş parametrelerini hash'leyin:

const crypto = require('crypto');

function cacheKey(text, voice, format, speed) {
  const input = JSON.stringify({ text, voice, format, speed });
  return crypto.createHash('sha256').update(input).digest('hex');
}

Farklı girdiler → farklı anahtarlar. Aynı girdiler → aynı anahtar → cache hit.

Cache Katmanları

L1: Uygulama belleği (LRU)

const LRU = require('lru-cache');
const cache = new LRU({ max: 1000, ttl: 1000 * 60 * 60 });

Nanosaniye erişim. Küçük kapasite. Yeniden başlatmada kaybolur.

L2: Redis

const redis = require('redis');
const client = redis.createClient();

async function getAudio(key) {
  const cached = await client.get(key);
  if (cached) return Buffer.from(cached, 'base64');
  return null;
}

Milisaniye erişim. Ağa bağlı. Instance'lar arasında paylaşılır.

L3: Object storage + CDN

Üretilen sesi S3/R2/GCS'te saklayın, CloudFront/Cloudflare üzerinden sunun. Küresel dağıtımlı, ucuz, dayanıklı.

Tam Akış

async function generateOrFetch(text, voice) {
  const key = cacheKey(text, voice);

  if (memCache.has(key)) return memCache.get(key);

  const redisHit = await redis.get(key);
  if (redisHit) {
    memCache.set(key, redisHit);
    return redisHit;
  }

  const s3Url = `https://cdn.ornek.com/tts/${key}.mp3`;
  if (await s3Exists(s3Url)) {
    const audio = await fetch(s3Url).then(r => r.buffer());
    await redis.set(key, audio, 'EX', 3600);
    return audio;
  }

  const audio = await speeko.tts(text, voice);
  await s3Upload(s3Url, audio);
  await redis.set(key, audio, 'EX', 3600);
  memCache.set(key, audio);
  return audio;
}

Cache Geçersiz Kılma

Ne zaman geçersiz kılmalı?

  • Ses modeli yükseltmeleri (nadir, Speeko tarafından duyurulur)
  • Marka sesi değişikliği (kasıtlı)
  • Kaynak metindeki içerik hataları

Aksi halde: sonsuza kadar önbelleğe alın.

Maliyet Örneği

Günde 10.000 çağrı, çağrı başına 5 karşılama, her biri 100 karakter olan IVR:

  • Önbelleksiz: Günde 50M karakter × $0.03/1K = $1.500/gün
  • Önbellekli: Bir kerelik 500 karakter = $0.015

Aylık tasarruf: $45.000.

Anti-Desenler

  • Ses/format içermeyen anahtarları önbelleğe almak (yanlış ses sunar)
  • Sınırsız cache (bellek tükenmesi)
  • Tek seferlik kullanıcı girdilerini önbelleğe almak (cache kirlenmesi)

Optimize etmeye başlayın.