Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan failover dan cuba semula permintaan dalam FastAPI

Bagaimana untuk melaksanakan failover dan cuba semula permintaan dalam FastAPI

WBOY
WBOYasal
2023-07-28 13:33:341337semak imbas

Cara melaksanakan pemulihan kegagalan permintaan dan cuba semula dalam FastAPI

Pengenalan:
Dalam membangunkan aplikasi web, kita sering perlu berkomunikasi dengan perkhidmatan lain. Walau bagaimanapun, perkhidmatan ini mungkin mengalami kegagalan, seperti gangguan rangkaian sementara atau tamat masa respons. Untuk memastikan aplikasi kami boleh dipercayai, kami perlu pulih daripada kegagalan dan cuba semula apabila perlu. Dalam artikel ini, kita akan mempelajari cara melaksanakan failover dan cuba semula permintaan dalam FastAPI.

FastAPI ialah rangka kerja web moden berdasarkan Python, yang menyediakan fungsi pemprosesan dan penghalaan permintaan yang mudah dan cekap. Ia menggunakan kaedah tak segerak secara dalaman untuk memproses permintaan, yang menjadikannya lebih mudah untuk melaksanakan pemulihan dan percubaan semula kegagalan.

Idea pelaksanaan pemulihan dan cuba semula kesalahan:
Sebelum melaksanakan fungsi pemulihan dan cuba semula kesalahan, kita perlu memahami beberapa konsep asas terlebih dahulu.

  1. Mod Pemutus Litar:
    Pemutus litar ialah mod reka bentuk yang boleh menghalang penyebaran kerosakan. Apabila perkhidmatan gagal, pemutus litar menutup sementara permintaan kepada perkhidmatan untuk tempoh masa tertentu dan mengembalikan permintaan secara terus. Ini mengelakkan beban lanjut pada perkhidmatan yang gagal dan memberi perkhidmatan sedikit masa untuk pulih. Apabila tiada kerosakan berlaku dalam tempoh masa tertentu, pemutus litar akan pulih secara automatik dan memajukan permintaan kepada perkhidmatan semula.
  2. Mekanisme cuba semula:
    Mekanisme cuba semula adalah untuk menghantar semula permintaan yang sama apabila permintaan gagal, biasanya menambah sedikit masa kelewatan. Mekanisme cuba semula boleh memastikan kebolehpercayaan permintaan dan menghantar semula permintaan selepas pemulihan kegagalan.

Berdasarkan idea di atas, kita boleh mencapai pemulihan kegagalan permintaan dan cuba semula dengan menggunakan mod pemutus litar dan mekanisme cuba semula.

Langkah pelaksanaan:
Contoh kod berikut menunjukkan cara melaksanakan request failover dan cuba semula dalam FastAPI:

from fastapi import FastAPI
import requests

app = FastAPI()

@app.get("/retry")
def retry():
    url = "http://example.com/api"  # 要请求的URL
    max_retries = 3  # 最大重试次数
    retry_interval = 1  # 重试间隔时间(秒)

    retries = 0
    while retries <= max_retries:
        try:
            response = requests.get(url)
            return response.json()
        except requests.exceptions.RequestException as error:
            print(f"Request failed: {error}")
            retries += 1
            time.sleep(retry_interval)

    return {"message": "Max retries exceeded"}

@app.get("/circuit-breaker")
def circuit_breaker():
    url = "http://example.com/api"  # 要请求的URL
    breaker = Breaker(url, max_failures=3, reset_timeout=10)

    try:
        response = breaker.execute(requests.get)
        return response.json()
    except BreakerOpenError:
        return {"message": "Service temporarily unavailable"}

class Breaker:
    def __init__(self, url, max_failures, reset_timeout):
        self.url = url
        self.max_failures = max_failures
        self.reset_timeout = reset_timeout
        self.failures = 0
        self.last_failure = None

    def execute(self, func):
        if self.failures >= self.max_failures:
            if self.last_failure and time.time() - self.last_failure < self.reset_timeout:
                raise BreakerOpenError()
            else:
                self.reset()

        try:
            response = func(self.url)
            self.failures = 0
            return response
        except requests.exceptions.RequestException as error:
            print(f"Request failed: {error}")
            self.failures += 1
            self.last_failure = time.time()

    def reset(self):
        self.failures = 0
        self.last_failure = None

class BreakerOpenError(Exception):
    pass

Dalam kod di atas, kami menggunakan kelas Pemutus Litar tersuai dengan menggunakan retrycircuit_breaker两个路由示例来实现请求的故障恢复和重试。retry路由示例使用一个while循环来进行重试,当请求失败时,会等待一段时间后重新发送请求。circuit_breakercontoh penghalaan, dalam Selepas bilangan kegagalan maksimum dicapai, pengecualian BreakerOpenError tersuai akan dilemparkan.

Kesimpulan:
Dalam artikel ini, kami mempelajari cara untuk melaksanakan failover dan mencuba semula permintaan dalam FastAPI. Dengan menggunakan corak pemutus litar dan mekanisme cuba semula, kami boleh meningkatkan kebolehpercayaan aplikasi dan pulih daripada kegagalan. Pada masa yang sama, kami juga menunjukkan cara melaksanakan pemulihan kegagalan dan mencuba semula fungsi dalam FastAPI melalui kod sampel. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca!

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan failover dan cuba semula permintaan dalam FastAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn