Penjelasan Mendalam

Dampak Resolusi DNS pada Performa API CAPTCHA

Resolusi DNS adalah overhead yang tidak terlihat pada setiap API call CAPTCHA. Setiap kali kode Anda memanggil ocr.captchaai.com, sistem mungkin melakukan lookup DNS — menambahkan 5–200 ms tergantung provider DNS, status cache, dan kondisi jaringan. Panduan ini menjelaskan kapan DNS menjadi bottleneck dan cara menghilangkannya.

Bagaimana DNS Mempengaruhi Solve CAPTCHA

Satu solve CAPTCHA melibatkan 5–7 HTTP request (1 submit + 4–6 polling). Tanpa cache DNS:

Skenario Lookup DNS Latensi ditambahkan
Tanpa caching, DNS lambat (200ms/lookup) 7 1.400 ms
Cache DNS OS (hanya call pertama) 1 200 ms
Keep-alive connection (0 lookup baru) 0 0 ms
Pre-resolve DNS + keep-alive 0 0 ms

Insight penting: Jika Anda sudah menggunakan HTTP keep-alive (persistent connection), DNS bukan masalah Anda — koneksi TCP yang sama menggunakan IP yang sudah di-resolve. DNS paling relevan ketika koneksi dibuat per request.

Kapan DNS Menjadi Masalah

Resolusi DNS menjadi bottleneck ketika:

  • Koneksi baru per request — Tanpa Session (Python) atau persistent agent (Node.js)
  • Container atau serverless cold start — Tidak ada DNS yang di-cache pada instance baru
  • Provider DNS lambat — DNS ISP default tanpa cache lokal
  • Solve paralel volume tinggi — Banyak worker mulai secara bersamaan

Python: Optimasi DNS

Verifikasi Perilaku DNS Saat Ini

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)")

Pre-Resolve dan Cache

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()}")

Gunakan DNS Resolver yang Lebih Cepat

Konfigurasikan sistem atau aplikasi Anda untuk menggunakan DNS publik yang cepat:

# 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}")

JavaScript: Optimasi DNS

Ukur Resolusi DNS

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}`);
  });
});

Pre-Resolve dengan DNS Cache

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}`);
})();

Lingkungan Serverless dan Container

Di AWS Lambda, Google Cloud Functions, dan container Docker:

Environment Perilaku cache DNS Rekomendasi
AWS Lambda Di-cache dalam execution context, hilang saat cold start Pre-resolve di handler init
Google Cloud Functions Di-cache dalam instance Pre-resolve di scope global
Docker Menggunakan DNS host secara default Konfigurasikan --dns 1.1.1.1
Kubernetes CoreDNS dengan cache yang dapat dikonfigurasi Set ndots: 1 di DNS config pod

Pemecahan Masalah

Masalah Penyebab Perbaikan
Call API pertama lambat, sisanya cepat Lookup DNS pada call pertama Normal dengan cache OS; gunakan keep-alive
Semua call lambat (~100ms+ ditambahkan) Tidak ada cache DNS, resolver lambat Set DNS ke 1.1.1.1 atau 8.8.8.8
Lonjakan latensi acak TTL cache DNS kedaluwarsa Naikkan TTL cache lokal atau pre-resolve
Container cold start lambat Tidak ada DNS di-cache pada instance baru Pre-resolve dalam kode inisialisasi

Pertanyaan Umum

Apakah DNS benar-benar layak dioptimalkan untuk solve CAPTCHA?

Untuk sebagian besar setup dengan keep-alive, DNS di-resolve sekali dan digunakan kembali. Ini paling relevan untuk lingkungan serverless, cold start, atau saat membuat koneksi baru per request.

Provider DNS apa yang sebaiknya saya gunakan?

Cloudflare (1.1.1.1) dan Google (8.8.8.8) adalah DNS publik respons kompetitif. Keduanya resolve dalam <10 ms dari sebagian besar region.

Apakah CaptchaAI menggunakan beberapa alamat IP?

Ya. DNS mungkin mengembalikan IP yang berbeda di setiap lookup. Ini adalah load balancing yang normal. Keep-alive connection melekat pada IP yang di-resolve selama lifetime koneksi.

Langkah Selanjutnya

Hilangkan latensi DNS tersembunyi di pipeline Anda — dapatkan API key CaptchaAI Anda.

Panduan terkait:

  • Keep-Alive Connection dan HTTP/2
  • Benchmarking Waktu Solve
  • Panduan Optimasi Latensi
Komentar dinonaktifkan untuk artikel ini.