Verbessern Sie die Skalierbarkeit für zustandslose Amazon Rekognition-APIs mithilfe mehrerer Regionen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Verbessern Sie die Skalierbarkeit für zustandslose Amazon Rekognition-APIs mit mehreren Regionen

In früheren Blog-Posthaben wir eine End-to-End-Lösung zur Identitätsprüfung in einer einzelnen AWS-Region beschrieben. Die Lösung verwendet die Amazon-Anerkennung APIs Gesichter erkennen zur Gesichtserkennung u Gesichter vergleichen zum Gesichtsvergleich. Wir betrachten diese APIs als zustandslose APIs, da sie nicht von Amazon Rekognition abhängen Gesichtssammlung. Sie sind auch idempotent, was bedeutet, dass wiederholte Aufrufe mit denselben Parametern dasselbe Ergebnis zurückgeben. Sie bieten flexible Optionen zum Weitergeben von Bildern, entweder durch eine Amazon Simple Storage-Service (Amazon S3) Speicherort oder Rohbytes.

In diesem Beitrag konzentrieren wir uns auf Amazon Rekognition-Bild zustandslose APIs und erörtern zwei Optionen zum Übergeben von Bildern und wann aus Sicht der Systemarchitektur eine der beiden vorzuziehen ist. Dann besprechen wir, wie die zustandslosen APIs skaliert werden, um einige regionale Einschränkungen zu überwinden. Wenn wir über Skalierbarkeit sprechen, beziehen wir uns oft auf die maximalen Transaktionen pro Sekunde (TPS), die die Lösung verarbeiten kann. Wenn Sie beispielsweise eine große Veranstaltung veranstalten, bei der Computer Vision zur Erkennung von Gesichtern oder Objektbezeichnungen verwendet wird, kann es zu einer Verkehrsspitze kommen, und Sie möchten nicht, dass das System gedrosselt wird. Das bedeutet, dass Sie manchmal die TPS erhöhen und sogar über das regionale Servicekontingent der Amazon Rekognition-APIs hinausgehen müssen. Dieser Beitrag schlägt eine Lösung vor, um die TPS der zustandslosen APIs durch die Verwendung mehrerer Regionen zu erhöhen.

Zustandslose Amazon Rekognition-APIs

Von den verfügbaren Amazon Rekognition Image APIs Gesichter vergleichen, Gesichter erkennen, DetectLabels, DetectModerationLabels, Schutzausrüstung erkennen, Text erkennen und Erkennen Sie Prominente sind staatenlos. Sie bieten sowohl Amazon S3- als auch Raw-Byte-Optionen zum Übergeben von Bildern. Beispielsweise in der Anforderungssyntax der DetectFaces API gibt es zwei Möglichkeiten, an die zu übergeben Image Feld: Bytes or S3Object.

Bei Verwendung der S3Object Option ist eine typische Architektur wie folgt.

Diese Lösung hat den folgenden Workflow:

  1. Die Clientanwendung greift auf eine gehostete Webseite zu AWS verstärken.
  2. Die Client-Anwendung wird mit authentifiziert und autorisiert Amazon Cognito.
  3. Die Clientanwendung lädt ein Bild in einen S3-Bucket hoch.
  4. Amazon S3 löst eine aus AWS Lambda Funktion zum Aufrufen von Amazon Rekognition.
  5. Die Lambda-Funktion ruft Amazon Rekognition-APIs mit der S3Object-Option auf.
  6. Die Lambda-Funktion speichert das Ergebnis in einer Amazon DynamoDB Tabelle.

Wähle die S3Object Option in den folgenden Szenarien:

  • Das Bild ist entweder eine Datei im PNG- oder JPEG-Format
  • Sie stellen den gesamten Stack in derselben Region bereit, in der Amazon Rekognition verfügbar ist
  • Das regionale Dienstkontingent der Amazon Rekognition-API entspricht Ihren Systemanforderungen

Wenn Sie nicht alle diese Anforderungen erfüllen, sollten Sie die wählen Bytes .

Verwenden Sie die zustandslosen Amazon Rekognition-APIs in einer anderen Region

Ein Beispiel für die Verwendung von Bytes Option ist, wenn Sie Ihren Anwendungsfall in einer Region bereitstellen möchten, in der Amazon Rekognition nicht allgemein verfügbar ist, z. B. wenn Sie eine Kundenpräsenz in Südamerika haben (sa-east-1) Region. Für die Datenspeicherung muss sich der S3-Bucket befinden, in dem Sie die Bilder der Benutzer speichern sa-east-1, aber Sie möchten Amazon Rekognition für Ihre Lösung verwenden, obwohl es in nicht allgemein verfügbar ist sa-east-1. Eine Lösung ist die Verwendung der Bytes Option zum Aufrufen von Amazon Rekognition in einer anderen Region, in der Amazon Rekognition verfügbar ist, wie z us-east-1. Das folgende Diagramm veranschaulicht diese Architektur.

Anerkennung in verschiedenen Regionen

Nachdem die Lambda-Funktion ausgelöst wurde (Schritt 4), muss die Funktion, anstatt Amazon Rekognition direkt mit dem S3-Speicherort des Bilds aufzurufen, das Bild aus dem S3-Bucket abrufen (Schritt 5) und dann Amazon Rekognition mit den Rohbytes des Bilds aufrufen (Schritt 6). Das Folgende ist ein Code-Snippet der Lambda-Funktion:

rekognition_region = os.getenv("REKOGNITION_REGION")
s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name=rekognition_region)

def handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(
    event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    s3_res = s3.get_object(Bucket=bucket, Key=key)
    rekognition_res = rekognition.detect_faces(Image={"Bytes": s3_res['Body'].read()}, Attributes=['ALL'])
    print(json.dumps(rekognition_res))

Beachten Sie, dass das vorhergehende Code-Snippet direkt für JPEG- oder PNG-Formate funktioniert. Für andere Bildformate wie BMP ist eine zusätzliche Bildverarbeitung erforderlich, um sie vor dem Senden an Amazon Rekognition in JPEG- oder PNG-Bytes zu konvertieren. Der folgende Code konvertiert BMP in JPEG-Bytes:

import io
from PIL import Image

s3_res = s3.get_object(Bucket=bucket, Key=key)
bmp_img = Image.open(io.BytesIO(s3_res['Body'].read()))
buffered = io.BytesIO()
rgb_img = bmp_img.convert('RGB')
rgb_img.save(buffered, format="JPEG")
rekognition_res = rekognition.detect_faces(Image={"Bytes": buffered.getvalue()}, Attributes=['ALL'])

Skalieren Sie den TPS von zustandslosen APIs, indem Sie API-Aufrufe auf mehrere Regionen verteilen

Ein weiterer Anwendungsfall des Bytes Option ist, dass Sie den TPS der zustandslosen APIs skalieren können, indem Sie die API-Aufrufe auf mehrere Regionen verteilen. Auf diese Weise sind Sie nicht durch das regionale Dienstkontingent der API eingeschränkt, da Sie zusätzliche TPS aus anderen Regionen erhalten können.

Im folgenden Beispiel wird eine Lambda-Funktion erstellt, um Amazon Rekognition aufzurufen DetectLabels API mit dem Bytes Möglichkeit. Um den maximalen TPS zu skalieren, können Sie die API-Aufrufe mit Gewichtungen auf mehrere Regionen verteilen. Die maximale TPS, die Sie erreichen können, wird berechnet mit: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Das folgende Beispiel verwendet us-east-1 und us-west-2 Regionen.

Erkennungsverkehr verbreiten

Das Code-Snippet zum Aufrufen der DetectLabels API ist wie folgt:

region_1 = os.getenv("REKOGNITION_REGION_1")
region_2 = os.getenv("REKOGNITION_REGION_2")
region_1_traffic_percentage = int(os.getenv("REGION_1_TRAFFIC_PERCENTAGE"))

# randomly generate a number between 1, 100
random_num = random.randint(1, 100)
region = region_1 if random_num <= region_1_traffic_percentage else region_2
rekognition = boto3.client('rekognition', region_name=region)
response = rekognition.detect_labels(Image={"Bytes": image_bytes})
print(response)

Parce que us-east-1 und us-west-2 beide haben maximal 50 TPS für die Amazon Rekognition DetectFaces-API, Sie können die API-Aufrufe gleichmäßig mit einer Gewichtung von 50/50 verteilen, indem Sie die Umgebungsvariable festlegen REGION_1_TRAFFIC_PERCENTAGE auf 50. Auf diese Weise können Sie theoretisch min(50/50%, 50/50%) = 100 TPS erreichen.

Um die Idee zu validieren, wird die Lambda-Funktion als REST-API mit verfügbar gemacht Amazon API-Gateway. Dann JMeter wird verwendet, um die API zu testen.

Lasttest Rekognition-API-Aufrufe

REGION_1_TRAFFIC_PERCENTAGE wird zunächst auf 100 gesetzt, auf diese Weise alle DetectFaces API-Aufrufe werden an gesendet us-east-1 nur. Theoretisch ist die maximal erreichbare TPS durch das Servicekontingent in begrenzt us-east-1, das sind 50 TPS. Lasttest auf dem benutzerdefinierten API-Endpunkt, beginnend mit 50 gleichzeitigen Threads, schrittweises Hinzufügen von 5 Threads bis ProvisionedThroughputExceededException von Amazon Rekognition zurückgegeben wird, beobachtet.

REGION_1_TRAFFIC_PERCENTAGE wird dann auf 50 gesetzt, auf diese Weise alle DetectLabels API-Aufrufe werden gleichmäßig an gesendet us-east-1 und us-west-2. Theoretisch ist die maximal erreichbare TPS das Servicekontingent der beiden Regionen, das 100 TPS beträgt. Starten Sie den Lasttest erneut ab 100 Threads, um die maximale TPS zu finden.

Die folgende Tabelle fasst die Ergebnisse der Belastungstests zusammen.

Prozentsatz der DetectLabels-API-Aufrufe an us-east-1 Prozentsatz der DetectLabels-API-Aufrufe an us-west-2 Maximale TPS in der Theorie Maximale gleichzeitige Läufe ohne ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Zusammenfassung

Viele Kunden verwenden zustandslose APIs von Amazon Rekognition Image für verschiedene Anwendungsfälle, einschließlich Identitätsprüfung, Inhaltsmoderation, Medienverarbeitung und mehr. In diesem Beitrag wurden die beiden Optionen zum Übergeben von Bildern und die Verwendung der Raw-Bytes-Option für die folgenden Anwendungsfälle besprochen:

  • Regionale Verfügbarkeit von Amazon Rekognition
  • Kundendatenresidenz
  • Hochskalieren des TPS der zustandslosen APIs von Amazon Rekognition

Sehen Sie sich an, wie Amazon Rekognition in verwendet wird verschiedene Computer-Vision-Anwendungsfälle und starten Sie Ihre Innovationsreise.


Über die Autoren

Verbessern Sie die Skalierbarkeit für zustandslose Amazon Rekognition-APIs mithilfe mehrerer Regionen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Sharon Lic ist Lösungsarchitekt bei AWS mit Sitz in der Gegend von Boston, MA. Sie arbeitet mit Unternehmenskunden zusammen und hilft ihnen, schwierige Probleme zu lösen und auf AWS aufzubauen. Außerhalb der Arbeit verbringt sie gerne Zeit mit ihrer Familie und erkundet lokale Restaurants.

Verbessern Sie die Skalierbarkeit für zustandslose Amazon Rekognition-APIs mithilfe mehrerer Regionen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Vaibhav Schah ist Senior Solutions Architect bei AWS und hilft seinen Kunden gerne bei allem, was mit der Cloud zu tun hat, und unterstützt sie bei der Einführung der Cloud. Außerhalb der Arbeit liebt er es zu reisen, neue Orte und Restaurants zu erkunden, zu kochen, Sportarten wie Cricket und Fußball nachzugehen, Filme und Serien anzusehen (Marvel-Fan) und abenteuerliche Aktivitäten wie Wandern, Fallschirmspringen und die Liste geht weiter.

Zeitstempel:

Mehr von AWS Maschinelles Lernen