Langsamer Geschäftsverkehr

Manchmal müssen wir langsame Geschäftsaktivitäten bewältigen, um zu vermeiden, dass sie die Verarbeitung anderer Anfragen von webman beeinträchtigen. Je nach Bedarf können diese Aktivitäten mit verschiedenen Ansätzen behandelt werden.

Verwendung von Warteschlangen

Siehe Redis Warteschlange und Stomp-Warteschlange.

Vorteile

Es können plötzliche Anfragen zur Verarbeitung großer Geschäftsvolumina bewältigt werden.

Nachteile

Es ist nicht möglich, die Ergebnisse direkt an den Client zurückzugeben. Für die Ergebnisbereitstellung muss mit anderen Diensten zusammengearbeitet werden, z. B. die Verwendung von webman/push zum Versenden der Verarbeitungsergebnisse.

Hinzufügen eines HTTP-Ports

Hinweis:
Diese Funktion erfordert webman-framework>=1.4

Durch das Hinzufügen eines HTTP-Ports können langsame Anfragen über diesen Port von einer bestimmten Gruppe von Prozessen verarbeitet werden, und die Ergebnisse werden direkt an den Client zurückgegeben.

Vorteile

Die Daten können direkt an den Client zurückgegeben werden.

Nachteile

Es ist nicht möglich, auf plötzliche Anfragen zur Verarbeitung großer Volumina zu reagieren.

Implementierungsschritte

Fügen Sie die folgende Konfiguration zur Datei config/process.php hinzu.

return [
    // ... Andere Konfigurationen hier ausgelassen ...

    'task' => [
        'handler' => \Webman\App::class,
        'listen' => 'http://0.0.0.0:8686',
        'count' => 8, // Anzahl der Prozesse
        'user' => '',
        'group' => '',
        'reusePort' => true,
        'constructor' => [
            'request_class' => \support\Request::class, // Einstellung der Request-Klasse
            'logger' => \support\Log::channel('default'), // Instanz des Protokolls
            'app_path' => app_path(), // Position des app-Verzeichnisses
            'public_path' => public_path() // Position des public-Verzeichnisses
        ]
    ]
];

Auf diese Weise können langsame Schnittstellen über die Gruppe von Prozessen unter http://127.0.0.1:8686/ ausgeführt werden, ohne die Verarbeitung anderer Prozesse zu beeinträchtigen.

Um sicherzustellen, dass der Front-End-Benutzer keine Unterschiede beim Port spürt, kann ein Proxy zum 8686-Port in nginx hinzugefügt werden. Angenommen, die Pfade der langsamen Schnittstellen beginnen alle mit /task, dann wäre eine ähnliche nginx-Konfiguration wie folgt:

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

# Hinzufügen eines 8686 Upstreams
upstream task {
    server 127.0.0.1:8686;
    keepalive 10240;
}

server {
    server_name webman.com;
    listen 80;
    access_log off;
    root /path/webman/public;

    # Anfragen, die mit /task beginnen, werden zum 8686-Port geroutet. Bitte passen Sie den /task-Pfad entsprechend Ihren Anforderungen an.
    location /task {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://task;
    }

    # Andere Anfragen werden über den originalen 8787-Port geroutet
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        if (!-f $request_filename){
            proxy_pass http://webman;
        }
    }
}

Auf diese Weise werden Anfragen, die mit domain.com/tast/xxx beginnen, über den separaten 8686-Port verarbeitet, ohne die Verarbeitung der Anfragen über den 8787-Port zu beeinträchtigen.