Егер интерфейс қате туралы хабарласа, әрекетті қайталаңыз ба? Құжаттама тапсырмалары алдымен қандай ақауларды қалпына келтіруге болатынын ажыратуы керек
Қате туралы хабарлағаннан кейін әрекетті қайталау жиі кездеседі. Қатені хабарлағаннан кейін шексіз қайталап көру кішігірім ақауларды күшейтеді. Рұқсат қателері, тіркелгідегі ақаулар, бүлінген файлдар және уақытша бос емес қызметтер бірдей қайталау жолымен жүрмеуі керек. Санаттаудан кейін қанша уақыт күту керектігін, ең көбі қанша рет әрекет ету керектігін және пайдаланушының араласуы қажет пе екенін шешіңіз.
Қате туралы хабарланғаннан кейін әрекетті қайталау әдеттегі тәжірибе болып табылады, бірақ шектеусіз ретсіз қайталанатын болсаңыз, ақауларды үлкейтуге болады. Рұқсат қателері, тіркелгідегі ақаулар, зақымдалған файлдар және уақытша бос емес қызметтер басқаша өңделуі керек.
Бұл мақала құжатты аудару және түрлендіру сияқты асинхронды тапсырмаларды орындайтын әзірлеушілер мен өнім студенттеріне қолайлы. Мұны оқығаннан кейін, сіз алдымен сәтсіздіктерді санаттай аласыз, содан кейін қанша уақыт күту керектігін, ең көбі қанша әрекет жасау керектігін және пайдаланушының араласуы қашан қажет екенін шеше аласыз.
Төмендегі код пен ағын оқшауланған ортада сыналған синтетикалық үлгілерге негізделген. Олар барлық түпнұсқалық құжаттарға немесе өнім әсерлеріне кепілдік бермейді. Маңызды құжаттарды өңдеуден бұрын түпнұсқаларды сақтап, мәтіндегі шекаралар мен қабылдау элементтеріне сәйкес қарап шығыңыз.
Құжат тапсырмасы қате туралы хабарлағаннан кейін әрекетті қалай қайталауға болады? Бір сөйлемнен қорытынды
Әрекетті қайталауды шешпес бұрын алдымен қатені жіктеңіз: уақытша сәтсіздіктер шектеледі және қайтарылады, рұқсат пен тіркелгі мәселелері тоқтатылады және пайдаланушыға беріледі, ал енгізу қателері түзету үшін пайдаланушыға қалдырылады.
| сіздің жағдайыңыз | Ұсынылатын тәжірибелер | себебі |
|---|---|---|
| Қызмет көрсетудегі уақытша кептеліс | Шектелген кері қайтару, шектеулі уақыт саны және жалпы күту уақыты | Барлық тапсырмаларды бір уақытта қарқынды қайта шығарудан аулақ болыңыз |
| Кіру немесе рұқсат жарамсыз | Пайдаланушыны қайта авторизациялауға шақырыңыз | Ескі тіркелгі деректерін қайта-қайта пайдалану сәтсіз аяқталады |
| Есептік жазба немесе шоттың ауытқуы | тоқтап, есеп беру | Есептік жазбаны автоматты түрде толтыру немесе өзгерту болмауы керек |
| Енгізу құрылымының қатесі | Пайдаланушыға енгізуді түзетуге мүмкіндік беріңіз | Дәл сол файлды қайта жіберудің қажеті жоқ |
| POST сұрауының күту уақыты | Алдымен интерфейс идемпотентті кілттерді немесе тапсырма сұрауларын қолдайтынын растаңыз. | Егер клиент жауап алмаса, бұл сервер тапсырма жасамағанын білдірмейді. |
Алдымен әрекетті қайталау қайталанатын тапсырмаларды тудыратынын анықтаңыз.
POST күту уақыты әсіресе қиын. Егер клиент жауап алмаса, бұл сервер тапсырма жасамағанын білдірмейді. Егер интерфейсте идемпотентті кілттер болмаса және тапсырманы сұрау механизмі болмаса, соқыр қайта жіберу бірнеше аударма тапсырмаларын жасауы мүмкін.
Сондықтан қайталау стратегиясы HTTP күй кодын қараудың орнына алдымен интерфейс келісім-шартын орындауы керек.
Таза функциялар ретінде уақыт санын және күту бюджетін жазыңыз
from enum import Enum
class Failure(Enum):
TRANSIENT = "transient"
AUTH = "auth"
BILLING = "billing"
INVALID_INPUT = "invalid_input"
def delay_for(kind, attempt, replay_safe):
if type(attempt) is not int or attempt < 0:
raise ValueError("invalid attempt")
if not replay_safe or kind is not Failure.TRANSIENT:
return None
schedule = (1, 2, 4)
return schedule[attempt] if attempt < len(schedule) else None
assert delay_for(Failure.TRANSIENT, 0, True) == 1
assert delay_for(Failure.TRANSIENT, 2, True) == 4
assert delay_for(Failure.TRANSIENT, 3, True) is None
assert delay_for(Failure.TRANSIENT, 0, False) is None
assert delay_for(Failure.BILLING, 0, True) is None
assert delay_for(Failure.INVALID_INPUT, 0, True) is None
Бұл код тек қайталау жоспарын есептейді, іс жүзінде күтпейді және сұрауларды жібермейді. Бекітілген бір, екі және төрт секунд синтетикалық демонстрацияның мәндері болып табылады және жалпы қызмет көрсету ұсыныстары болып табылмайды.
Өндіріс ортасы келесі тармақтарды да ескеруі керек:
- сервер қайтарған
Retry-After - Бір уақытта көптеген тапсырмаларды жалғастырмау үшін кездейсоқ діріл
- Жалпы мерзім
- Параметрлер санына шектеу
Егер сервер талап ететін күту уақыты жергілікті бюджеттен асып кетсе, ол сұрауды алдын ала бастаудың орнына қайта әрекетті тоқтатуы керек.
Қате түрлері әртүрлі әрекеттерге сәйкес келеді
| сәтсіз | Қосымша әрекеттер | әдепкі бойынша жасалмауы керек |
|---|---|---|
| Уақытша кептеліс | шектелген эвакуация | Барлық тапсырмалар бір уақытта қарқынды түрде қайта іске қосылады |
| Кіру немесе рұқсат мерзімі аяқталады | Оларға қайта рұқсат беруді анық еске салыңыз | Ескі құжаттарды қайта-қайта қайталау |
| Шот немесе шот аномалиялары | Тоқтап, есеп беріңдер | Автоматты түрде толықтыру немесе аккаунтты ауыстыру |
| Кіріс құрылымының қатесі | Пайдаланушыларға өз енгізулерін түзетуге мүмкіндік беріңіз | Дәл сол файлды қайта жіберу |
Логикалық тапсырмалар мен әрекет журналдарын сақтау
Әрбір пайдаланушы операциясы логикалық тапсырмаға сәйкес келеді, және осы логика бойынша бірнеше әрекет болуы мүмкін. Әр талпыныс басталу уақытын, сәтсіздік категориясын және қашықтағы тапсырма идентификаторын жазады. Соңында тек қабылдаудан өткен бір нәтиже таңдалады.
Бұл тәсілдің артықшылығы — қайта әрекет ету мәселелерін шешу кезінде толық жазба болады және әрекеттер саны пайдаланушы сұраныстары санымен қате есептелмейді.
📊 Негізгі салыстыру
| Тұжырымдама | Не екенін жазып ал | Қызметі |
|---|---|---|
| Логикалық тапсырмалар | Бір пайдаланушы операциясы | Пайдаланушы көрген сұранысқа сәйкес келеді |
| Бақылауды байқап көр | Бастау уақыты, ақау санаты, қашықтағы тапсырма идентификаторы | Қайта сынау процесін анықтау үшін қолданылған |
| Қабылдау нәтижелері | Қабылдаудан өткен нәтиже | Жеткізудің соңғы нәтижесі ретінде |
Аударма тәжірибесінің тұрақтылығы анық түсініктемелерден туындайды
OmniDoc-ға қосылғанда, интерфейс пайдаланушыларға ағымдағы күйін анық хабарлауы керек: олар күтіп отыр ма, қайта авторизация қажет пе, әлде есептік жазбасын тексеру керек пе. Барлық жағдайды "Генерация" деп көрсетпеңіз.
Пайдаланушылар белгілі бір тапсырманы күтуге дайын, бірақ кері байланыс бермейтін батырманы қайта-қайта басуға дайын емес.
Дереккөздер: Python enum.
🎯 Қай әдіс саған ыңғайлы?
Егер қызмет қайта басталуын күтіп отырсаңыз
Шектеулі шегінуді қолданыңыз, максималды санды және жалпы күту уақытын орнатыңыз, сервердіңRetry-After-ін құрметтеңіз.
Егер рұқсат немесе аккаунт мәселелері болса
Автоматты түрде қайта тырысуды тоқтатыңыз, пайдаланушыларға қайта авторизация жасауды сұраңыз немесе аккаунт жағдайын тексеріңіз.
Егер енгізу файл құрылымы дұрыс болмаса
Пайдаланушылардан файлдарды жібермес бұрын жөндеуді сұраңыз және сол файлды қайта жібермеңіз.
Егер сіз қоңырау шалған интерфейс POST болса және уақыт аяқталуы мүмкін,
Алдымен интерфейс идемпотентті кілттерді немесе тапсырма сұрауларын қолдайтынын растаңыз, содан кейін оны қайта жіберу керек пе, жоқ па, шешіңіз.
❓ Жиі қойылатын сұрақтар (FAQ)
1. Барлық қателерді тікелей қайта тексеруге бола ма?
Жоқ, болмайды. Рұқсат қателері, аккаунттың артық төлемдері, бүлінген файлдар және уақытша қызмет бос болмауы бөлек қарастырылуы керек; тек уақытша ақаулар шектеулі болдырмауға жарамды.
2. POST таймауты аяқталғаннан кейін қайта жариялай аламын ба?
Тікелей қайта жариялау ұсынылмайды. Клиенттің жауапсыз болуы сервердің тапсырмалар жасамағанын білдірмейді. Идемпотенттік кілттер немесе тапсырма сұрау механизмдері болмаса, қайталанатын тапсырмалар пайда болуы мүмкін.
3. Қайта әрекет жасау саны мен күту уақытын қалай анықтауы керек?
Тұрақты бір, екі және төрт секунд тек синтез демонстрациясы үшін. Өндірістік орта Retry-After, кездейсоқ джиттер, жалпы кесу уақыты және параллелизм шектеулерін біріктіру арқылы анықталуы тиіс.
4. Әрекеттер саны пайдаланушы сұраныстары статистикасына әсер ете ме?
Жоқ, тек бір пайдаланушы операциясын логикалық тапсырма ретінде жазып, әр қайта әрекет сол тапсырма бойынша әрекет ретінде жаса.
📝 Қысқаша мазмұны
Қайта тырысудың кілті — бірнеше рет тырыспау, алдымен сәтсіздік түрін анықтау, содан кейін не істеу керектігін шешу. Қалпына келтірілетін қателер шектеліп, қайта тексеріледі, ал адам басқаруды қажет ететін мәселелер пайдаланушыларға дереу қайтарылады.
Қазір тәжірибе алыңыз: Құжатыңызды жүктеп, түпнұсқа форматтауды сақтап, аударуды бастаңыз


