मुख्य कंटेंट पर जाएं
Didit ने पहचान और धोखाधड़ी के लिए इंफ्रास्ट्रक्चर बनाने हेतु $7.5M जुटाए
Didit
ब्लॉग पर वापस जाएँ
ब्लॉग · 6 मार्च 2026

एसिंक्रोनस पहचान सत्यापन में उन्नत त्रुटि प्रबंधन (HI)

एसिंक्रोनस पहचान सत्यापन में त्रुटि प्रबंधन में महारत हासिल करना मजबूत प्रणालियों के लिए महत्वपूर्ण है। यह मार्गदर्शिका पायथन में बैकऑफ, सर्किट ब्रेकर और व्यापक लॉगिंग के साथ रिट्री जैसी रणनीतियों की पड़ताल करती है, जो लचीलापन.

द्वारा Diditअपडेट किया गया
advanced-error-handling-in-asynchronous-identity-verification-workflows.png

मजबूत रिट्रीज़ बाहरी पहचान सत्यापन सेवाओं के लिए एपीआई कॉल में अस्थायी त्रुटियों के लिए एक्सपोनेंशियल बैकऑफ और जिटर लागू करें, जिससे सिस्टम ओवरलोड को रोका जा सके और सफलता दर में सुधार हो सके।

सर्किट ब्रेकर पैटर्न विफल होने वाली सेवाओं के अनुरोधों को अस्थायी रूप से रोककर अपने सिस्टम को कैस्केडिंग विफलताओं से बचाएं, जिससे उन्हें ठीक होने और समग्र एप्लिकेशन स्थिरता को बनाए रखने की अनुमति मिलती है।

व्यापक लॉगिंग और मॉनिटरिंग वितरित एसिंक्रोनस पहचान सत्यापन पाइपलाइनों के भीतर समस्याओं को तुरंत पहचानने, निदान करने और हल करने के लिए संरचित लॉगिंग, सहसंबंध आईडी और वास्तविक समय की निगरानी का उपयोग करें।

डिडिट की अंतर्निहित लचीलापन डिडिट का एआई-नेटिव, मॉड्यूलर प्लेटफॉर्म ऑर्केस्ट्रेटेड वर्कफ़्लो और मजबूत एपीआई डिज़ाइन प्रदान करता है, जो कोर केवाईसी, जीवंतता और एएमएल जांच के लिए जटिल त्रुटि प्रबंधन को अमूर्त करता है, विश्वसनीयता और डेवलपर अनुभव को बढ़ाता है।

पहचान सत्यापन की दुनिया में, गति और विश्वसनीयता सर्वोपरि है। जैसे-जैसे व्यवसाय बढ़ते हैं, एसिंक्रोनस वर्कफ़्लो मुख्य एप्लिकेशन थ्रेड को अवरुद्ध किए बिना बड़ी मात्रा में अनुरोधों को संभालने के लिए आवश्यक हो जाते हैं। हालांकि, यह वितरित और गैर-अवरुद्ध प्रकृति महत्वपूर्ण जटिलताएं पैदा करती है, खासकर जब त्रुटि प्रबंधन की बात आती है। नेटवर्क समस्याएं, सेवा आउटेज, डेटा असंगतियां और अप्रत्याशित एपीआई प्रतिक्रियाएं सभी एक पहचान सत्यापन प्रक्रिया को पटरी से उतार सकती हैं, जिससे खराब उपयोगकर्ता अनुभव, अनुपालन जोखिम और परिचालन अक्षमताएं हो सकती हैं।

यह ब्लॉग पोस्ट एसिंक्रोनस पहचान सत्यापन वर्कफ़्लो के लिए उन्नत त्रुटि प्रबंधन रणनीतियों में गहराई से उतरता है, विशेष रूप से पायथन कार्यान्वयन पर ध्यान केंद्रित करता है। हम यह पता लगाएंगे कि अधिक लचीली और दोष-सहिष्णु प्रणालियों का निर्माण कैसे किया जाए, यह सुनिश्चित करते हुए कि जब चीजें गलत भी हों, तो आपकी सत्यापन प्रक्रियाएं मजबूत रहें।

पहचान सत्यापन में एसिंक्रोनस त्रुटियों की चुनौती

एसिंक्रोनस पहचान सत्यापन में अक्सर कई बाहरी सेवाएं शामिल होती हैं: ओसीआर और जीवंतता जांच के लिए डिडिट जैसे आईडी सत्यापन प्रदाता, एक एएमएल स्क्रीनिंग सेवा, एक पते का प्रमाण डेटाबेस, और संभावित रूप से अन्य डेटा स्रोत। इनमें से प्रत्येक इंटरैक्शन विफलता का एक संभावित बिंदु है। पारंपरिक सिंक्रोनस त्रुटि प्रबंधन (उदाहरण के लिए, एक साधारण ट्राई-एक्सेप्ट ब्लॉक) अपर्याप्त है जब संचालन बहुत बाद में, एक अलग प्रक्रिया में, या यहां तक कि तत्काल प्रतिक्रिया के बिना चुपचाप विफल हो सकता है।

एक विशिष्ट केवाईसी वर्कफ़्लो पर विचार करें: एक उपयोगकर्ता अपनी आईडी अपलोड करता है, एक जीवंतता जांच की जाती है, और फिर एक एएमएल स्क्रीनिंग शुरू होती है। यदि जीवंतता जांच सेवा को एक अस्थायी नेटवर्क समस्या का सामना करना पड़ता है, तो तुरंत पुनः प्रयास करने से समस्या बढ़ सकती है। यदि एएमएल सेवा पूरी तरह से बंद है, तो बार-बार प्रयास केवल संसाधनों को बर्बाद करेंगे और उपयोगकर्ता के ऑनबोर्डिंग में देरी करेंगे।

एक्सपोनेंशियल बैकऑफ और जिटर के साथ मजबूत रिट्रीज़ को लागू करना

वितरित प्रणालियों में सबसे आम त्रुटि प्रकारों में से एक अस्थायी विफलताएं हैं। ये अस्थायी मुद्दे हैं जैसे नेटवर्क गड़बड़, सेवा व्यस्त त्रुटियां, या डेटा विवाद जो थोड़े समय के बाद खुद ही ठीक हो जाते हैं। विफलता के तुरंत बाद अंधाधुंध पुनः प्रयास करने से संघर्षरत सेवा पर भार पड़ सकता है, जिससे कैस्केडिंग विफलता हो सकती है। समाधान एक्सपोनेंशियल बैकऑफ और जिटर का उपयोग करके बुद्धिमान रिट्रीज़ है।

एक्सपोनेंशियल बैकऑफ में रिट्रीज़ के बीच प्रतीक्षा समय को घातीय रूप से बढ़ाना शामिल है। उदाहरण के लिए, 1 सेकंड, फिर 2, फिर 4, फिर 8, और इसी तरह प्रतीक्षा करें। यह सेवा को ठीक होने का समय देता है। जिटर बैकऑफ समय में एक छोटा, यादृच्छिक विलंब जोड़ता है, जिससे सभी क्लाइंट को एक ही समय पर पुनः प्रयास करने से रोका जा सकता है, जिससे थंडरिंग हर्ड की समस्या हो सकती है।


import asyncio
import random

async def call_didit_api(data, attempt=0):
    max_retries = 5
    base_delay = 1  # seconds

    try:
        # Simulate an API call to Didit's ID Verification or Liveness service
        if random.random() < 0.6 and attempt < 3: # Simulate transient failure
            raise ConnectionError(f"Simulated API error on attempt {attempt+1}")

        print(f"Successfully called Didit API on attempt {attempt+1} with data: {data}")
        return {"status": "success", "result": "verification_data"}

    except (ConnectionError, asyncio.TimeoutError) as e:
        if attempt < max_retries - 1:
            delay = base_delay * (2 ** attempt) + random.uniform(0, 0.5) # Exponential backoff + jitter
            print(f"Attempt {attempt+1} failed: {e}. Retrying in {delay:.2f} seconds...")
            await asyncio.sleep(delay)
            return await call_didit_api(data, attempt + 1)
        else:
            print(f"All {max_retries} attempts failed for data: {data}")
            raise # Re-raise the last exception if all retries fail

async def main():
    try:
        # Example usage for Didit's ID Verification
        result = await call_didit_api({"document_image": "base64_id_scan"})
        print(f"Final result: {result}")

        # Example usage for Didit's Liveness
        result_liveness = await call_didit_api({"liveness_video": "base64_video"})
        print(f"Final liveness result: {result_liveness}")

    except Exception as e:
        print(f"Workflow failed after retries: {e}")

if __name__ == "__main__":
    asyncio.run(main())

यह पैटर्न बाहरी सेवाओं के साथ एकीकृत करते समय अमूल्य है, जिसमें डिडिट का आईडी सत्यापन, पैसिव और एक्टिव जीवंतता, या एएमएल स्क्रीनिंग एपीआई शामिल हैं, जिनमें से सभी लचीले संचार से लाभान्वित होते हैं।

सर्किट ब्रेकर पैटर्न को लागू करना

जबकि रिट्रीज़ अस्थायी त्रुटियों में मदद करते हैं, यदि कोई सेवा लंबे समय तक आउटेज का अनुभव कर रही है तो वे स्थिति को खराब कर सकते हैं। सर्किट ब्रेकर पैटर्न आपके एप्लिकेशन को बार-बार ऐसी सेवा को लागू करने से रोकता है जिसके विफल होने की संभावना है। यह विफलताओं की निगरानी करके काम करता है, और यदि वे किसी दिए गए समय के भीतर एक निश्चित सीमा से अधिक हो जाते हैं, तो यह सर्किट को "ट्रिप" कर देता है, इसे विफल सेवा के लिए आगे के कॉल को रोकने के लिए खोल देता है। एक कॉन्फ़िगर करने योग्य टाइमआउट के बाद, यह एक "आधा-खुली" स्थिति में प्रवेश करता है, जिससे कुछ परीक्षण अनुरोधों को यह देखने की अनुमति मिलती है कि क्या सेवा ठीक हो गई है।


import asyncio
import time
from collections import deque

class CircuitBreaker:
    def __init__(self, failure_threshold=3, recovery_timeout=10, half_open_attempts=1):
        self.state = "CLOSED"
        self.failure_threshold = failure_threshold
        self.recovery_timeout = recovery_timeout
        self.half_open_attempts = half_open_attempts
        self.failures = 0
        self.last_failure_time = None
        self.successes_in_half_open = 0

    async def __call__(self, func, *args, **kwargs):
        if self.state == "OPEN":
            if time.time() - self.last_failure_time > self.recovery_timeout:
                self.state = "HALF_OPEN"
                self.successes_in_half_open = 0
                print("Circuit Breaker: Moving to HALF_OPEN state.")
            else:
                raise CircuitBreakerOpenError("Circuit is OPEN. Service is likely down.")

        try:
            result = await func(*args, **kwargs)
            self._on_success()
            return result
        except Exception as e:
            self._on_failure(e)
            raise

    def _on_success(self):
        if self.state == "HALF_OPEN":
            self.successes_in_half_open += 1
            if self.successes_in_half_open >= self.half_open_attempts:
                self.state = "CLOSED"
                self.failures = 0
                print("Circuit Breaker: Service recovered. Moving to CLOSED state.")
        elif self.state == "CLOSED":
            self.failures = 0 # Reset failures on success in closed state

    def _on_failure(self, error):
        if self.state == "HALF_OPEN":
            self.state = "OPEN"
            self.last_failure_time = time.time()
            print(f"Circuit Breaker: Failure in HALF_OPEN. Moving to OPEN state. Error: {error}")
        elif self.state == "CLOSED":
            self.failures += 1
            if self.failures >= self.failure_threshold:
                self.state = "OPEN"
                self.last_failure_time = time.time()
                print(f"Circuit Breaker: Failures exceeded threshold. Moving to OPEN state. Error: {error}")

class CircuitBreakerOpenError(Exception):
    pass

# Example usage with a simulated Didit AML Screening call
async def simulate_aml_screening():
    if random.random() < 0.7: # Simulate frequent failures
        raise ConnectionError("AML service unavailable")
    await asyncio.sleep(0.1)
    return {"aml_status": "clear"}

async def main():
    cb = CircuitBreaker()
    for i in range(20):
        try:
            print(f"--- Attempt {i+1} ---")
            result = await cb(simulate_aml_screening)
            print(f"AML Screening Success: {result}")
        except CircuitBreakerOpenError as e:
            print(f"Caught: {e}")
            await asyncio.sleep(1) # Wait a bit before next attempt if circuit is open
        except ConnectionError as e:
            print(f"Caught: {e}")
        await asyncio.sleep(0.5)

if __name__ == "__main__":
    asyncio.run(main())

यह पैटर्न डिडिट की एएमएल स्क्रीनिंग या बड़े पैमाने पर फेस सर्च ऑपरेशन जैसी महत्वपूर्ण सेवाओं के लिए विशेष रूप से उपयोगी है, जहां एक विफल निर्भरता कई उपयोगकर्ताओं को प्रभावित कर सकती है।

व्यापक लॉगिंग, मॉनिटरिंग और अलर्टिंग

मजबूत रिट्रीज़ और सर्किट ब्रेकर के साथ भी, त्रुटियां होंगी। मुख्य बात यह जानना है कि वे कब होते हैं, क्यों होते हैं, और तुरंत प्रतिक्रिया देना। व्यापक लॉगिंग, वास्तविक समय की निगरानी और सक्रिय अलर्टिंग एसिंक्रोनस वर्कफ़्लो के लिए गैर-परक्राम्य हैं।

  • संरचित लॉगिंग: लॉग संदेश मशीन-पठनीय प्रारूप (जैसे, JSON) में होने चाहिए और इसमें session_id, workflow_id, सेवा का नाम, टाइमस्टैम्प और त्रुटि प्रकार जैसे संदर्भ शामिल होने चाहिए। यह आसान एकत्रीकरण और विश्लेषण की अनुमति देता है।
  • सहसंबंध आईडी: प्रत्येक पहचान सत्यापन अनुरोध को उसके प्रवेश बिंदु पर एक अद्वितीय सहसंबंध आईडी असाइन करें और इसे सभी बाद की सेवा कॉलों के माध्यम से पास करें। यह आपको एक जटिल, वितरित प्रणाली के माध्यम से एकल उपयोगकर्ता की यात्रा का पता लगाने की अनुमति देता है, यहां तक कि डिडिट के आईडी सत्यापन और आयु अनुमान जैसी मॉड्यूलर सेवाओं का उपयोग करते समय भी।
  • मॉनिटरिंग डैशबोर्ड: अपने वर्कफ़्लो के प्रत्येक घटक के लिए एपीआई सफलता दर, विलंबता, त्रुटि दर और कतार की लंबाई जैसे प्रमुख मेट्रिक्स की कल्पना करें। प्रोमेथियस, ग्राफना, या क्लाउड-नेटिव मॉनिटरिंग सेवाएं जैसे उपकरण अमूल्य हैं।
  • अलर्टिंग: महत्वपूर्ण थ्रेसहोल्ड के लिए अलर्ट सेट करें (उदाहरण के लिए, 5 मिनट के लिए 5% से अधिक त्रुटि दर, या एक विशिष्ट सेवा अनुपलब्ध है)। अलर्ट सही टीम को PagerDuty, Slack, या ईमेल के माध्यम से जाने चाहिए, जिससे तत्काल कार्रवाई हो सके।

उदाहरण के लिए, जब कोई उपयोगकर्ता डिडिट के ऑर्केस्ट्रेटेड वर्कफ़्लो का उपयोग करके एक सत्यापन सत्र शुरू करता है, तो एक session_id उत्पन्न होता है। यह आईडी आपके लॉग में हर कदम के लिए कैप्चर की जानी चाहिए, डिडिट के प्रारंभिक एपीआई कॉल से लेकर सत्यापन परिणामों के साथ अंतिम वेबहुक कॉलबैक तक। यदि कोई समस्या उत्पन्न होती है, तो आप सटीक विफलता बिंदु को इंगित करने के लिए इस session_id द्वारा लॉग को तुरंत फ़िल्टर कर सकते हैं।

डिडिट कैसे मदद करता है

डिडिट, एक एआई-नेटिव, डेवलपर-फर्स्ट पहचान प्लेटफॉर्म के रूप में, जटिल पहचान सत्यापन वर्कफ़्लो को सरल बनाने के लिए डिज़ाइन किया गया है, जिसमें उनकी अंतर्निहित त्रुटि प्रबंधन चुनौतियां शामिल हैं। हमारी मॉड्यूलर आर्किटेक्चर का मतलब है कि जबकि आप गहराई से अनुकूलित समाधान बना सकते हैं, अंतर्निहित लचीलेपन का बहुत कुछ आपके लिए संभाला जाता है।

  • ऑर्केस्ट्रेटेड वर्कफ़्लो: डिडिट का नो-कोड वर्कफ़्लो इंजन आपको ऑर्केस्ट्रेशन या स्टेट मैनेजमेंट के लिए व्यापक कोड लिखे बिना जटिल सत्यापन अनुक्रमों (उदाहरण के लिए, आईडी सत्यापन + जीवंतता + एएमएल स्क्रीनिंग) को परिभाषित करने की अनुमति देता है। डिडिट आंतरिक रिट्रीज़ और राज्य संक्रमणों को संभालता है, जिससे आपकी तरफ से त्रुटि प्रबंधन का बोझ काफी कम हो जाता है।
  • मजबूत एपीआई और वेबहुक: हमारे स्वच्छ एपीआई विश्वसनीयता के लिए बनाए गए हैं, और हमारी वेबहुक प्रणाली सत्यापन स्थिति पर वास्तविक समय के अपडेट प्रदान करती है। डिडिट इन वेबहुक की डिलीवरी को अंतर्निहित रिट्री तंत्र के साथ प्रबंधित करता है, यह सुनिश्चित करता है कि यदि आपका एंडपॉइंट अस्थायी रूप से अनुपलब्ध है तो भी आपको महत्वपूर्ण अपडेट प्राप्त हों।
  • निःशुल्क कोर केवाईसी: बिना किसी अग्रिम लागत के आईडी सत्यापन (ओसीआर, एमआरजेड, बारकोड) और पैसिव और एक्टिव जीवंतता सहित आवश्यक पहचान सत्यापन के साथ शुरुआत करें। यह आपको अंतर्निहित बुनियादी ढांचे के लचीलेपन के बारे में चिंता किए बिना मजबूत सत्यापन को लागू करने की अनुमति देता है।
  • एआई-नेटिव विश्वसनीयता: हमारे एआई-संचालित सिस्टम स्वाभाविक रूप से उच्च उपलब्धता और प्रदर्शन के लिए डिज़ाइन किए गए हैं, आंतरिक त्रुटियों को कम करते हैं और 1:1 फेस मैच और आयु अनुमान जैसे उत्पादों के लिए लगातार परिणाम प्रदान करते हैं।
  • संरचित पहचान डेटा: सभी सत्यापन परिणाम संरचित डेटा के रूप में प्रदान किए जाते हैं, जिससे आपके सिस्टम के लिए परिणामों को संसाधित करना और अपवादों को प्रोग्रामेटिक रूप से संभालना आसान हो जाता है।

डिडिट के प्लेटफॉर्म का लाभ उठाकर, आप एसिंक्रोनस त्रुटि प्रबंधन की अधिकांश जटिलता को कम कर सकते हैं, इसके बजाय अपने मुख्य व्यवसाय तर्क पर ध्यान केंद्रित कर सकते हैं जबकि अपने उपयोगकर्ताओं के लिए एक विश्वसनीय और सुरक्षित पहचान सत्यापन अनुभव सुनिश्चित कर सकते हैं।

शुरू करने के लिए तैयार हैं?

डिडिट को एक्शन में देखने के लिए तैयार हैं? आज ही एक निःशुल्क डेमो प्राप्त करें

डिडिट के निःशुल्क टियर के साथ मुफ्त में पहचान सत्यापित करना शुरू करें।

पहचान और धोखाधड़ी के लिए इंफ्रास्ट्रक्चर।

KYC, KYB, ट्रांज़ैक्शन मॉनिटरिंग और वॉलेट स्क्रीनिंग के लिए एक API। 5 मिनट में इंटीग्रेट करें।

इस पेज को समराइज़ करने के लिए AI से पूछें
एसिंक्रोनस पहचान सत्यापन में उन्नत त्रुटि प्रबंधन.