Nếu giao diện báo lỗi, thử lại? Nhiệm vụ tài liệu trước tiên phải phân biệt những lỗi nào có thể được phục hồi

Việc thử lại sau khi báo cáo lỗi là điều rất bình thường. Việc thử lại liên tục sau khi báo cáo lỗi sẽ làm tăng thêm các lỗi nhỏ. Các lỗi về quyền, lỗi tài khoản, tệp bị hỏng và các dịch vụ bận tạm thời sẽ không đi theo cùng một đường dẫn thử lại. Sau khi phân loại, hãy quyết định thời gian chờ đợi, tối đa bao nhiêu lần thử và liệu có cần sự can thiệp của người dùng hay không.

Việc thử lại sau khi một lỗi được báo cáo là một thói quen phổ biến, nhưng nếu bạn thử lại vô thời hạn một cách bừa bãi thì các trục trặc có thể bị phóng đại. Lỗi cấp phép, lỗi tài khoản, tệp bị hỏng và các dịch vụ bận tạm thời phải được xử lý khác nhau.

Bài viết này phù hợp với các nhà phát triển và sinh viên sản phẩm đang thực hiện các tác vụ không đồng bộ như dịch và chuyển đổi tài liệu. Sau khi đọc phần này, trước tiên bạn có thể phân loại các lỗi và sau đó quyết định thời gian chờ đợi, tối đa bao nhiêu lần thử và khi nào cần sự can thiệp của người dùng.

Mã và quy trình bên dưới dựa trên các mẫu tổng hợp đã được thử nghiệm trong môi trường biệt lập. Chúng không đại diện cho sự đảm bảo về tất cả các tài liệu xác thực hoặc tác dụng của sản phẩm. Vui lòng giữ lại bản gốc trước khi xử lý các tài liệu quan trọng và xem xét chúng theo ranh giới và các mục chấp nhận trong văn bản.

Làm cách nào để thử lại sau khi tác vụ tài liệu báo lỗi? Một câu kết luận

Trước tiên, hãy phân loại lỗi trước khi quyết định có nên thử lại hay không: các lỗi tạm thời được giới hạn và rút lại, các vấn đề về quyền và tài khoản bị dừng và bàn giao cho người dùng, còn các lỗi đầu vào sẽ do người dùng khắc phục.

hoàn cảnh của bạnCác phương pháp được đề xuấtlý do
Dịch vụ tắc nghẽn tạm thờiKhoảng lùi có giới hạn, số lần và tổng thời gian chờ có giới hạnTránh phát hành lại nhiều lần tất cả các nhiệm vụ cùng một lúc
Đăng nhập hoặc quyền không hợp lệNhắc người dùng ủy quyền lạiViệc sử dụng lại thông tin xác thực cũ nhiều lần sẽ chỉ tiếp tục thất bại
Tài khoản hoặc hóa đơn bất thườngdừng lại và báo cáoKhông nên tự động nạp tiền hoặc thay đổi tài khoản
Lỗi cấu trúc đầu vàoHãy để người dùng sửa lỗi đầu vàoKhông có ích gì khi gửi lại cùng một tập tin
Hết thời gian chờ yêu cầu POSTTrước tiên hãy xác nhận xem giao diện có hỗ trợ các khóa bình thường hoặc truy vấn tác vụ hay không.Nếu máy khách không nhận được phản hồi, điều đó không có nghĩa là máy chủ chưa tạo tác vụ.

Trước tiên hãy xác định xem việc thử lại có tạo ra các tác vụ trùng lặp hay không.

Thời gian chờ POST đặc biệt rắc rối. Nếu máy khách không nhận được phản hồi, điều đó không có nghĩa là máy chủ chưa tạo tác vụ. Nếu giao diện không có khóa bình thường và không có cơ chế truy vấn tác vụ, việc gửi lại mù có thể tạo ra nhiều tác vụ dịch.

Do đó, chiến lược thử lại trước tiên phải tuân theo hợp đồng giao diện thay vì chỉ nhìn vào mã trạng thái HTTP.

Viết số lần và ngân sách chờ đợi dưới dạng hàm thuần túy

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

Mã này chỉ tính toán kế hoạch thử lại, không thực sự chờ đợi và không gửi yêu cầu. Một, hai và bốn giây cố định là các giá trị của bản trình diễn tổng hợp và không phải là đề xuất dịch vụ chung.

Môi trường sản xuất cũng cần phải xem xét các điểm sau:

  • Retry-After được máy chủ trả về
  • Jitter ngẫu nhiên để tránh tiếp tục một số lượng lớn nhiệm vụ cùng một lúc
  • Tổng thời hạn
  • Giới hạn số lượng đồng thời

Nếu thời gian chờ mà máy chủ yêu cầu vượt quá ngân sách địa phương thì máy chủ sẽ dừng thử lại thay vì thực hiện yêu cầu trước.

Các loại lỗi tương ứng với các hành động khác nhau

thất bạiHành động tùy chọnkhông nên được thực hiện theo mặc định
ùn tắc tạm thờisơ tán có giới hạnTất cả các nhiệm vụ được ban hành lại một cách mạnh mẽ cùng một lúc
Đăng nhập hoặc quyền không hợp lệNhắc nhở rõ ràng về việc ủy quyền lạiTiếp tục lặp lại thông tin xác thực cũ
Tài khoản hoặc hóa đơn bất thườngdừng lại và báo cáoTự động nạp tiền hoặc thay đổi tài khoản
Lỗi cấu trúc đầu vàoHãy để người dùng sửa lỗi đầu vàoGửi lại cùng một tập tin

Lưu các tác vụ logic và bản ghi nỗ lực

Một thao tác của người dùng tương ứng với một nhiệm vụ logic và có thể có nhiều lần thử trong nhiệm vụ logic này. Thời gian bắt đầu, loại lỗi và ID tác vụ từ xa được ghi lại cho mỗi lần thử. Cuối cùng, chỉ có một kết quả được chấp nhận được chọn.

Ưu điểm của việc này là có bản ghi đầy đủ khi khắc phục sự cố retry, đồng thời số lần thử sẽ không bị tính nhầm vào số yêu cầu của người dùng.

📊 So sánh cốt lõi

ý tưởngGhi lại những gìtác dụng
Nhiệm vụ logicthao tác một người dùngTương ứng với cùng một yêu cầu mà người dùng nhìn thấy
cố gắng ghi lạiThời gian bắt đầu, loại lỗi, ID tác vụ từ xaĐược sử dụng để khắc phục sự cố trong quá trình thử lại
Kết quả nghiệm thuMột đầu ra đã được chấp nhậnLà kết quả của việc giao hàng cuối cùng

Sự ổn định của trải nghiệm dịch thuật đến từ lời giải thích rõ ràng

Khi kết nối với OmniDoc, giao diện người dùng phải thông báo rõ ràng cho người dùng trạng thái hiện tại: đang chờ, cần cấp quyền lại hay cần kiểm tra tài khoản. Không hiển thị mọi thứ là "Tòa nhà".

Người dùng sẵn sàng chờ đợi một nhiệm vụ có trạng thái và thoát, nhưng không sẵn sàng nhấp liên tục vào nút mà không có bất kỳ phản hồi nào.

Tham khảo: Python enum.

🎯 Phương pháp nào phù hợp với bạn?

Nếu bạn đang đợi dịch vụ được khôi phục

Sử dụng thời gian chờ có giới hạn, đặt số lần và tổng thời gian chờ tối đa, đồng thời tôn trọngRetry-After của máy chủ.

Nếu bạn có vấn đề về quyền hoặc tài khoản

Dừng việc thử lại tự động và nhắc người dùng ủy quyền lại hoặc kiểm tra trạng thái tài khoản.

Nếu cấu trúc file đầu vào của bạn sai

Hãy để người dùng sửa chữa tập tin trước khi gửi nó. Không gửi lại cùng một tập tin.

Nếu giao diện bạn gọi là POST và có thể hết thời gian chờ

Trước tiên, hãy xác nhận xem giao diện có hỗ trợ khóa bình thường hoặc truy vấn tác vụ hay không, sau đó quyết định có gửi lại hay không.

❓ Câu hỏi thường gặp (FAQ)

1. Có thể thử lại trực tiếp tất cả các lỗi được báo cáo không?

không thể. Lỗi cấp phép, nợ tài khoản, tệp bị hỏng và các dịch vụ bận tạm thời phải được xử lý riêng. Chỉ những thất bại tạm thời mới thích hợp cho việc lùi lại có giới hạn.

2. POST có thể được gửi lại trực tiếp sau khi hết thời gian không?

Không nên gửi lại trực tiếp. Nếu máy khách không nhận được phản hồi, điều đó không có nghĩa là máy chủ chưa tạo tác vụ. Nếu không có cơ chế truy vấn tác vụ hoặc khóa bình thường thì các tác vụ trùng lặp có thể xảy ra.

3. Số lần thử lại và thời gian chờ được xác định như thế nào?

Một, hai và bốn giây cố định chỉ là những minh chứng tổng hợp. Môi trường sản xuất phải được xác định bằng sự kết hợp của Retry-After, jitter ngẫu nhiên, thời hạn tổng thể và giới hạn đồng thời.

4. Số lần thử có ảnh hưởng đến số liệu thống kê về yêu cầu của người dùng không?

Không, chỉ ghi lại thao tác của người dùng dưới dạng tác vụ logic và ghi lại mỗi lần thử lại dưới dạng bản ghi lần thử trong tác vụ.

📝 Tóm tắt

Chìa khóa của việc thử lại không phải là thử nhiều lần mà là phân biệt loại thất bại trước rồi mới quyết định xem phải làm gì. Các lỗi có thể phục hồi sẽ được thử lại trong giới hạn và các sự cố cần xử lý của con người sẽ được trả lại cho người dùng một cách kịp thời.

Thử ngay: Tải tài liệu lên để bắt đầu dịch, giữ nguyên bố cục ban đầu

Cập nhật lúc 2026-11-14