يبدو عامل حل اختبار CAPTCHA حيًا - العملية قيد التشغيل - لكنه لم يحل المهمة بنجاح خلال 10 دقائق. تم استنفاد مفتاح واجهة برمجة التطبيقات (API)، أو أن العامل عالق في حلقة مفرغة. وبدون إجراء فحوصات صحية، يستمر منسق أعمالك في توجيه العمل إلى عامل متوفى. تسمح نقاط النهاية الصحية لموازنات التحميل وKubernetes باكتشاف المشكلة وإعادة التوجيه.
المغزى العملي هنا هو أن "الخدمة تعمل" لا يعني أن العامل صالح للإنتاج. في أنظمة حل CAPTCHA، قد يبقى العامل يرد على HTTP بينما فشلت التبعيات، أو نفد الرصيد، أو توقفت الحلول الناجحة منذ دقائق طويلة.
كيف تستخدم هذه الفحوصات عمليًا؟
نوع العامل
أهم فحص يجب أن تبدأ به
لماذا؟
عامل واحد خلف supervisor بسيط
liveness + readiness
يمنع إرسال العمل إلى عملية معلقة أو عديمة الفائدة
عمّال Kubernetes
liveness + readiness + dependencies
لأن التوجيه الآلي وإعادة التشغيل يعتمدان على التمييز بينها
عمّال batch داخل queue
readiness أهم من liveness
العملية قد تكون حية لكن غير مؤهلة لاستقبال دفعة جديدة
ثلاثة أنواع من الفحوصات الصحية
تحقق
سؤال
استجابة الفشل
الحيوية
هل العملية جارية؟
أعد تشغيل الحاوية
الجاهزية
هل يمكن أن يقبل العمل؟
إيقاف توجيه حركة المرور
التبعية
هل خدمات المنبع جيدة؟
تتحلل برشاقة
بايثون: نقاط النهاية الصحية للقارورة
import requests
import time
import threading
from flask import Flask, jsonify
from dataclasses import dataclass, field
API_KEY = "YOUR_API_KEY"
RESULT_URL = "https://ocr.captchaai.com/res.php"
app = Flask(__name__)
@dataclass
class WorkerHealth:
"""Tracks worker health metrics."""
started_at: float = field(default_factory=time.monotonic)
last_solve_at: float = 0.0
total_solved: int = 0
total_failed: int = 0
consecutive_failures: int = 0
balance: float | None = None
balance_checked_at: float = 0.0
_lock: threading.Lock = field(default_factory=threading.Lock)
def record_success(self):
with self._lock:
self.total_solved += 1
self.last_solve_at = time.monotonic()
self.consecutive_failures = 0
def record_failure(self):
with self._lock:
self.total_failed += 1
self.consecutive_failures += 1
@property
def success_rate(self) -> float:
total = self.total_solved + self.total_failed
return self.total_solved / total if total > 0 else 1.0
@property
def seconds_since_last_solve(self) -> float:
if self.last_solve_at == 0:
return time.monotonic() - self.started_at
return time.monotonic() - self.last_solve_at
health = WorkerHealth()
# Thresholds
MAX_CONSECUTIVE_FAILURES = 10
MAX_SECONDS_WITHOUT_SOLVE = 600 # 10 minutes
MIN_BALANCE = 1.0
def check_balance() -> float | None:
"""Check CaptchaAI balance."""
now = time.monotonic()
# Cache balance for 60 seconds
if health.balance is not None and now - health.balance_checked_at < 60:
return health.balance
try:
resp = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "getbalance", "json": 1,
}, timeout=10).json()
health.balance = float(resp.get("request", 0))
health.balance_checked_at = now
return health.balance
except Exception:
return health.balance # Return cached value on error
@app.route("/health/live")
def liveness():
"""Liveness probe — is the process responsive?"""
return jsonify({"status": "ok", "uptime_s": int(time.monotonic() - health.started_at)}), 200
@app.route("/health/ready")
def readiness():
"""Readiness probe — can the worker accept tasks?"""
issues = []
# Check consecutive failures
if health.consecutive_failures >= MAX_CONSECUTIVE_FAILURES:
issues.append(f"consecutive_failures={health.consecutive_failures}")
# Check time since last solve
if health.total_solved > 0 and health.seconds_since_last_solve > MAX_SECONDS_WITHOUT_SOLVE:
issues.append(f"no_solve_for={int(health.seconds_since_last_solve)}s")
# Check balance
balance = check_balance()
if balance is not None and balance < MIN_BALANCE:
issues.append(f"low_balance=${balance:.2f}")
if issues:
return jsonify({
"status": "not_ready",
"issues": issues,
"stats": {
"solved": health.total_solved,
"failed": health.total_failed,
"success_rate": round(health.success_rate, 3),
},
}), 503
return jsonify({
"status": "ready",
"stats": {
"solved": health.total_solved,
"failed": health.total_failed,
"success_rate": round(health.success_rate, 3),
"balance": balance,
},
}), 200
@app.route("/health/dependencies")
def dependencies():
"""Check upstream dependencies."""
checks = {}
# CaptchaAI API reachability
try:
resp = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "getbalance", "json": 1,
}, timeout=10)
checks["captchaai_api"] = {
"status": "ok" if resp.status_code == 200 else "degraded",
"response_ms": int(resp.elapsed.total_seconds() * 1000),
}
except Exception as e:
checks["captchaai_api"] = {"status": "down", "error": str(e)}
all_ok = all(c["status"] == "ok" for c in checks.values())
return jsonify({
"status": "ok" if all_ok else "degraded",
"checks": checks,
}), 200 if all_ok else 503
# --- Worker loop (runs in background) ---
def worker_loop():
"""Simulated CAPTCHA solving worker."""
while True:
try:
# ... solve CAPTCHA logic ...
health.record_success()
except Exception:
health.record_failure()
time.sleep(1)
threading.Thread(target=worker_loop, daemon=True).start()
دليل تشغيلي لـ التوسع التلقائي لعمّال حل CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بيئات الإنتاج.
دليل تشغيلي لـ التوسع التلقائي لعمّال حل CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة ا...
Apr 19, 2026
DevOps والتوسع
دليل تشغيلي لـ معالجة نتائج CAPTCHA بنمط حدثي باستخدام AWS SNS وCaptcha AI يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha A...
دليل تشغيلي لـ معالجة نتائج CAPTCHA بنمط حدثي باستخدام AWS SNS وCaptcha AI يغطّي قرارات البنية، والاعتمادية، و...
Apr 20, 2026
الدروس التطبيقية
شرح خطوة بخطوة لـ إنشاء قائمة انتظار حل اختبار CAPTCHA في Python باستخدام Captcha AI مع أمثلة مباشرة قابلة لإعادة الاستخدام ومسار واضح لتطبيقه باستخدام Captcha...
شرح خطوة بخطوة لـ إنشاء قائمة انتظار حل اختبار CAPTCHA في Python باستخدام Captcha AI مع أمثلة مباشرة قابلة لإع...
Apr 29, 2026
DevOps والتوسع
دليل تشغيلي لـ نشر عمّال Captcha AI باستخدام Ansible يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بيئات الإنتاج.
دليل تشغيلي لـ النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA يغطّي قرارات البنية، والاعتماد...
Apr 25, 2026
DevOps والتوسع
دليل تشغيلي لـ Azure Functions + Captcha AI: تكامل سحابي بدون خوادم يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بي...