Explainers

DNS Çözünürlüğünün CAPTCHA API Performansına Etkisi

Çoğu CAPTCHA API entegrasyonunda DNS'i ayrıca ayarlamanıza gerek yoktur: keep-alive (kalıcı bağlantılar) kullanıyorsanız ocr.captchaai.com bir kez çözümlenir ve aynı bağlantı boyunca yeniden kullanılır. DNS çözümleme ancak her istekte yeni bağlantı açtığınızda ya da sunucusuz soğuk başlatmalarla çalıştığınızda devreye girer — ve o zaman her çağrıya sessizce 5–200 ms ekler. Bu rehber DNS'in tam olarak ne zaman darboğaza döndüğünü ve bunu nasıl ortadan kaldıracağınızı gösterir.

Kısa yanıt: DNS gecikmesini nasıl sıfırlarsınız

Üç ayar senaryoların çoğunu kapatır:

  • keep-alive kullanın — bağlantı yeniden kullanılır, DNS yalnızca bir kez çözümlenir.
  • Hostname'i önceden çözün — soğuk başlatmada ilk çağrının gecikme cezasını ortadan kaldırın.
  • Hızlı bir genel DNS'e geçin — 1.1.1.1 (Cloudflare) veya 8.8.8.8 (Google).

Aşağıdaki bölümler bu üç adımı Python ve Node.js'te somut kodla gösteriyor; ama önce gecikmenin gerçekten DNS kaynaklı olup olmadığını doğrulayın.

DNS ne zaman gerçekten önemli olur?

DNS çözümleme yalnızca belirli koşullarda ölçülebilir bir gecikmeye dönüşür:

  • İstek başına yeni bağlantı — Python'da Session, Node.js'te keep-alive ajanı kullanmadığınızda her çağrı yeni bir arama yapar.
  • Konteyner veya sunucusuz soğuk başlatma — Yeni oluşturulan örneklerde önbelleğe alınmış DNS bulunmaz.
  • Yavaş DNS sağlayıcıları — Yerel önbelleği olmayan varsayılan İSS DNS'i her aramayı uzatır.
  • Yüksek hacimli paralel çözüm — Çok sayıda worker aynı anda başlatıldığında aramalar birikir.

Bu koşulların hiçbiri sizde yoksa, DNS büyük olasılıkla sizin darboğazınız değildir; önce gerçek maliyeti ölçün.

Tek bir CAPTCHA çözümü kaç DNS araması yapar?

Bir CAPTCHA çözümü tipik olarak 5–7 HTTP isteği içerir (1 gönderim + 4–6 sorgulama). DNS önbelleği olmadan bu aramaların her biri gecikmeye eklenir:

Senaryo DNS araması Eklenen gecikme
Önbellek yok, yavaş DNS (her biri 200 ms) 7 1.400 ms
İşletim sistemi DNS önbelleği (yalnızca ilk çağrı) 1 200 ms
keep-alive (0 yeni arama) 0 0 ms
DNS önceden çözümleme + keep-alive 0 0 ms

Kritik nokta: Zaten keep-alive (kalıcı bağlantılar) kullanıyorsanız aynı TCP bağlantısı çözümlenen IP'yi yeniden kullanır, dolayısıyla DNS ihmal edilebilir. DNS asıl önemini istek başına yeni bağlantı kurulduğunda gösterir — yani aslında çözmeniz gereken sorun çoğu zaman bağlantı yönetimidir.

Sunucusuz ve konteyner ortamları en çok etkilenir

Asıl DNS maliyeti soğuk başlatmalarda ortaya çıkar; bu yüzden çözüme geçmeden önce ortamınızı tanımak faydalıdır. AWS Lambda, Google Cloud Functions ve Docker konteynerlerinde önbellek davranışı ortama göre değişir:

Ortam DNS önbellek davranışı Öneri
AWS Lambda Yürütme bağlamında önbelleğe alınır, soğuk başlatmada kaybolur İşleyici başlatmasında önceden çözümleme yapın
Google Cloud Functions Örnek içinde önbelleğe alınır Global kapsamda önceden çözümleme yapın
Docker Varsayılan olarak ana makine DNS'ini kullanır --dns 1.1.1.1 yapılandırın
Kubernetes Yapılandırılabilir önbellekli CoreDNS Pod DNS ayarında ndots: 1 verin

Somut bir örnek: İstanbul merkezli bir e-ticaret ekibinin ödeme akışı QA testlerini AWS Lambda üzerinde (eu-central-1, Frankfurt) çalıştırdığını düşünün. Her soğuk başlatmada işleyici yeniden DNS araması yaptığı için ilk çağrı diğerlerinden belirgin biçimde yavaştır. İşleyici başlatmasında ocr.captchaai.com adresini bir kez çözümlemek bu farkı kapatır. Test verisi toplarken kişisel veri işleniyorsa, akışı KVKK kapsamında yetkili QA senaryolarıyla sınırlı tutun. CaptchaAI'nin thread tabanlı planları USD olarak sabittir (BASIC $15/ay, 5 thread) — TL kur dalgalanmasından etkilenmeden öngörülebilir aylık maliyet sağlar, bu da bulut faturasına ek olarak planlamayı kolaylaştırır.

Python ile DNS optimizasyonu

Mevcut DNS davranışını ölçün

Önce ilk arama ile önbellekten gelen ikinci arama arasındaki farkı görün:

import socket
import time

# Measure DNS resolution time
hostname = "ocr.captchaai.com"

start = time.time()
ip = socket.getaddrinfo(hostname, 443)
first_resolve = time.time() - start

start = time.time()
ip = socket.getaddrinfo(hostname, 443)
second_resolve = time.time() - start

print(f"First resolve: {first_resolve*1000:.1f}ms")
print(f"Second resolve: {second_resolve*1000:.1f}ms (OS cached)")

Hostname'i önceden çözün ve önbelleğe alın

Session kullanmak keep-alive'ı korur; böylece DNS bir kez çözümlenir ve sonraki istekler için işletim sistemi önbelleği devreye girer:

import os
import socket
import requests
from urllib3.util.connection import create_connection

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

# Pre-resolve the API hostname
CAPTCHAAI_IP = socket.getaddrinfo("ocr.captchaai.com", 443)[0][4][0]
print(f"Resolved ocr.captchaai.com to {CAPTCHAAI_IP}")

# Patch connection to use cached IP
DNS_CACHE = {"ocr.captchaai.com": CAPTCHAAI_IP}

class CachedHTTPAdapter(requests.adapters.HTTPAdapter):
    def send(self, request, **kwargs):
        return super().send(request, **kwargs)

# Use with Session for fastest resolution
session = requests.Session()
session.headers.update({"Connection": "keep-alive"})

# The session already maintains keep-alive, so DNS is resolved once
# For the first request, the OS cache handles subsequent lookups
resp = session.get("https://ocr.captchaai.com/res.php", params={
    "key": API_KEY, "action": "getbalance", "json": "1",
})
print(f"Balance: {resp.json()}")

Daha hızlı bir DNS çözümleyici kullanın

DNS yapılandırmasını kontrol edebildiğiniz sistemlerde varsayılan İSS DNS'i yerine hızlı bir genel çözümleyiciye geçin:

# For systems where you control DNS configuration:
# /etc/resolv.conf (Linux) or system DNS settings
# Recommended: Cloudflare (1.1.1.1) or Google (8.8.8.8)

# In Python, you can also use dnspython for explicit resolution
import dns.resolver

resolver = dns.resolver.Resolver()
resolver.nameservers = ["1.1.1.1", "8.8.8.8"]

answers = resolver.resolve("ocr.captchaai.com", "A")
for answer in answers:
    print(f"Resolved: {answer}")

Node.js ile DNS optimizasyonu

DNS çözümleme süresini ölçün

Python'daki mantığın aynısı Node.js için de geçerlidir; ilk ve ikinci aramayı karşılaştırın:

const dns = require('dns');
const { performance } = require('perf_hooks');

const hostname = 'ocr.captchaai.com';

// First resolution
const start1 = performance.now();
dns.lookup(hostname, (err, address) => {
  const time1 = performance.now() - start1;
  console.log(`First resolve: ${time1.toFixed(1)}ms → ${address}`);

  // Second resolution (OS cached)
  const start2 = performance.now();
  dns.lookup(hostname, (err2, address2) => {
    const time2 = performance.now() - start2;
    console.log(`Second resolve: ${time2.toFixed(1)}ms → ${address2}`);
  });
});

Önceden çözümleme ve keep-alive ajanı

Ölçümden sonra hostname'i önceden çözün ve tüm istekleri keep-alive ajanı üzerinden gönderin; böylece bağlantı ömrü boyunca yalnızca tek arama yapılır:

const dns = require('dns');
const https = require('https');
const axios = require('axios');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

// Pre-resolve and cache
let cachedIP = null;

async function preResolve() {
  return new Promise((resolve, reject) => {
    dns.lookup('ocr.captchaai.com', (err, address) => {
      if (err) reject(err);
      cachedIP = address;
      console.log(`Cached IP: ${cachedIP}`);
      resolve(address);
    });
  });
}

// Use keep-alive agent (DNS resolved once per connection)
const agent = new https.Agent({
  keepAlive: true,
  maxSockets: 20,
  keepAliveMsecs: 60000,
});

const api = axios.create({
  baseURL: 'https://ocr.captchaai.com',
  httpsAgent: agent,
  timeout: 30000,
});

(async () => {
  await preResolve();
  const resp = await api.get('/res.php', {
    params: { key: API_KEY, action: 'getbalance', json: '1' },
  });
  console.log(`Balance: ${resp.data}`);
})();

Sık karşılaşılan DNS sorunları

Sorun Neden Çözüm
İlk API çağrısı yavaş, sonrakiler hızlı İlk çağrıda DNS araması yapılır İşletim sistemi önbelleğiyle normaldir; keep-alive kullanın
Tüm çağrılar yavaş (~100 ms+ eklenir) DNS önbelleği yok, çözümleyici yavaş DNS'i 1.1.1.1 veya 8.8.8.8 olarak ayarlayın
Rastgele gecikme sıçramaları DNS önbelleği TTL süresi doldu Yerel önbellek TTL'sini artırın veya önceden çözün
Konteyner soğuk başlatması yavaş Yeni örnekte önbelleğe alınmış DNS yok Başlatma kodunda önceden çözümleme yapın

Sık sorulan sorular

keep-alive kullanıyorsam DNS'i ayrıca optimize etmeli miyim?

Genelde hayır. Kalıcı bağlantılarda DNS bir kez çözümlenir ve bağlantı ömrü boyunca yeniden kullanılır, dolayısıyla ekstra ayara gerek kalmaz. DNS optimizasyonu asıl karşılığını sunucusuz ortamlarda, soğuk başlatmalarda ve istek başına yeni bağlantı açan kurulumlarda verir.

Docker konteynerinde DNS neden yavaş çözümleniyor?

Konteyner varsayılan olarak ana makinenin DNS yapılandırmasını devralır; bu da yavaş bir çözümleyici veya ndots yanlış yapılandırması anlamına gelebilir. Konteyneri --dns 1.1.1.1 ile başlatmak ya da imaj içinde hızlı bir çözümleyici tanımlamak sorunu çoğunlukla ortadan kaldırır.

dnspython kullanmak requests çağrılarımı hızlandırır mı?

Doğrudan hayır. dns.resolver yalnızca çözümlemenin hangi sunucudan yapılacağını denetlemenizi sağlar; hız kazancı hızlı bir çözümleyici seçmekten ve sonucu önbelleğe almaktan gelir. requests çağrılarının kendisi yine keep-alive üzerinden hızlanır.

CaptchaAI için sabit tek bir IP'ye bağlanabilir miyim?

Bunu önermiyoruz. DNS, aramalar arasında farklı IP'ler döndürebilir; bu normal yük dengelemedir. keep-alive kullandığınızda bağlantı ömrü boyunca tek bir çözümlenen IP'ye bağlı kalırsınız, IP'yi elle sabitlemenize gerek yoktur.

Yayına almadan önce kontrol listesi

Üretime çıkmadan önce şu dört maddeyi doğrulayın:

  • Üretim istemcisi keep-alive ya da Session kullanıyor mu?
  • Soğuk başlatan işlevlerde hostname, başlatma kodunda çözümleniyor mu?
  • Çözümleyici 1.1.1.1 veya 8.8.8.8 gibi hızlı bir DNS'e ayarlı mı?
  • İlk çağrı gecikmesini ölçtünüz mü ve değer kabul edilebilir sınırda mı?

Sonraki adımlar

İşlem hattınızdaki gizli DNS gecikmesini ortadan kaldırın — CaptchaAI API anahtarınızı alın.

İlgili rehberler:

Bu makale için yorumlar devre dışı bırakılmıştır.