Birden fazla bölgeyi kullanarak Amazon Rekognition durum bilgisi olmayan API'lerin ölçeklenebilirliğini iyileştirin PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Birden çok bölge kullanan Amazon Rekognition durum bilgisiz API'leri için ölçeklenebilirliği iyileştirin

Önceki blog yazısı, tek bir AWS Bölgesinde uçtan uca bir kimlik doğrulama çözümü tanımladık. Çözüm, Amazon Rekognisyon API'ler Yüzleri Algıla yüz algılama için ve KarşılaştırYüzler yüz karşılaştırması için Bu API'leri, bir Amazon Rekognition'a bağlı olmadıkları için durum bilgisi olmayan API'ler olarak düşünüyoruz. yüz koleksiyonu. Ayrıca idempotenttirler, yani aynı parametrelerle tekrarlanan çağrılar aynı sonucu döndürür. Görüntülerin geçişinde esnek seçenekler sunarlar. Amazon Basit Depolama Hizmeti (Amazon S3) konum veya ham bayt.

Bu yazıda odaklanıyoruz Amazon Tanıma Görüntüsü durum bilgisi olmayan API'ler ve sistem mimarisi bakış açısından iki görüntü aktarma seçeneğini ve ne zaman birinin diğerine tercih edileceğini tartışın. Ardından, bazı Bölgesel sınırlamaların üstesinden gelmek için durum bilgisiz API'lerin nasıl ölçeklendirileceğini tartışıyoruz. Ölçeklenebilirlikten bahsederken genellikle çözümün kaldırabileceği saniye başına maksimum işlem sayısını (TPS) kastederiz. Örneğin, yüzleri veya nesne etiketlerini algılamak için bilgisayar görüşünü kullanan büyük bir etkinliğe ev sahipliği yaparken, bir trafik artışıyla karşılaşabilir ve sistemin kısılmasını istemeyebilirsiniz. Bu, bazen TPS'yi artırmanız ve hatta Amazon Rekognition API'lerinin sahip olduğu Bölgesel hizmet kotasını aşmanız gerektiği anlamına gelir. Bu gönderi, birden çok Bölge kullanarak durum bilgisiz API'lerin TPS'sini artırmak için bir çözüm önerir.

Amazon Rekognition durum bilgisiz API'leri

Mevcut Amazon Rekognition Image API'lerinden, KarşılaştırYüzler, Yüzleri Algıla, Algılama Etiketleri, AlgılamaDenetleme Etiketleri, Koruyucu Ekipman Tespiti, Metin Algıla, ve Ünlüleri Tanıyın vatansızdır. Görüntüleri iletmek için hem Amazon S3 hem de ham bayt seçenekleri sunarlar. Örneğin, istek söz diziminde DetectFaces API'ye geçmek için iki seçenek vardır. Image alan: Bytes or S3Object.

Kullanıldığı zaman S3Object seçeneği, tipik bir mimari aşağıdaki gibidir.

Bu çözüm aşağıdaki iş akışına sahiptir:

  1. İstemci uygulaması, barındırılan bir web sayfasına erişir. AWS Yükseltme.
  2. İstemci uygulaması ile kimlik doğrulaması yapılır ve yetkilendirilir Amazon Cognito'su.
  3. İstemci uygulaması bir görüntüyü bir S3 klasörüne yükler.
  4. Amazon S3 bir AWS Lambda Amazon Rekognition'ı çağırmak için işlev.
  5. Lambda işlevi, S3Object seçeneğiyle Amazon Rekognition API'lerini çağırır.
  6. Lambda işlevi, sonucu bir Amazon DinamoDB tablo.

Seçin S3Object Aşağıdaki senaryolarda seçenek:

  • Görüntü, PNG veya JPEG biçimli bir dosyadır
  • Tüm yığını, Amazon Rekognition'ın kullanılabildiği aynı Bölgede dağıtırsınız
  • Amazon Rekognition API'nin Bölgesel hizmet kotası, sistem gereksinimlerinizi karşılar

Tüm bu gereksinimleri karşılamadığınızda, Bytes seçeneği.

Amazon Rekognition Stateless API'lerini farklı bir Bölgede kullanın

kullanımına bir örnek Bytes seçeneği, kullanım örneğinizi Amazon Rekognition'ın genel olarak kullanılamadığı bir Bölgede dağıtmak istediğinizde, örneğin Güney Amerika'da müşteri varlığınız varsa (sa-east-1) Bölge. Veri yerleşimi için, kullanıcıların resimlerini depolamak için kullandığınız S3 klasörünün içinde olması gerekir. sa-east-1, ancak genel olarak mevcut olmasa da çözümünüz için Amazon Rekognition'ı kullanmak istiyorsunuz. sa-east-1. Çözümlerden biri, Bytes gibi Amazon Rekognition'ın kullanılabildiği farklı bir Bölgede Amazon Rekognition'ı arama seçeneği us-east-1. Aşağıdaki diyagram bu mimariyi göstermektedir.

Farklı Bölgede Tanıma

Lambda işlevi tetiklendikten sonra (Adım 4), doğrudan görüntünün S3 konumuyla Amazon Rekognition'ı çağırmak yerine, işlevin görüntüyü S3 klasöründen alması (Adım 5), ardından görüntünün ham baytlarıyla Amazon Rekognition'ı çağırması gerekir (Adım 6). Lambda işlevinin bir kod parçacığı aşağıdadır:

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))

Önceki kod parçacığının doğrudan JPEG veya PNG biçimleri için çalıştığını unutmayın. BMP gibi diğer görüntü formatlarını Amazon Rekognition'a göndermeden önce JPEG veya PNG baytlarına dönüştürmek için ek görüntü işleme gerekir. Aşağıdaki kod BMP'yi JPEG baytlarına dönüştürür:

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'])

API çağrılarını birden çok Bölgeye yayarak durum bilgisiz API'lerin TPS'sini ölçeklendirin

Başka bir kullanım durumu Bytes seçenek, API çağrılarını birden çok Bölgeye yayarak durum bilgisi olmayan API'lerin TPS'sini ölçeklendirebilmenizdir. Bu şekilde, diğer Bölgelerden ek TPS kazanabileceğiniz için API'nin Bölgesel hizmet kotasıyla sınırlı kalmazsınız.

Aşağıdaki örnekte, Amazon Rekognition'ı çağırmak için bir Lambda işlevi oluşturulmuştur. DetectLabels API ile Bytes seçenek. Maksimum TPS'yi ölçeklendirmek için API çağrılarını ağırlıklarla birden çok Bölgeye yayabilirsiniz. Ulaşabileceğiniz maksimum TPS şu şekilde hesaplanır: min(region_1_max_tps/region_1_weight, zone_2_max_tps/region_2_weight, … zone_n_max_tps/region_n_weight). Aşağıdaki örnek kullanır us-east-1 ve us-west-2 Bölgeler.

Tanıma trafiğini yayma

Çağırılacak kod parçacığı DetectLabels API'si aşağıdaki gibidir:

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)

Çünkü us-east-1 ve us-west-2 her ikisi de Amazon Rekognition DetectFaces API için maksimum 50 TPS'ye sahiptir, ortam değişkenini ayarlayarak API çağrılarını 50/50 ağırlıklı olarak eşit şekilde dağıtabilirsiniz REGION_1_TRAFFIC_PERCENTAGE 50'ye kadar. Bu şekilde teorik olarak min(50/50%, 50/50%) = 100 TPS elde edebilirsiniz.

Fikri doğrulamak için, Lambda işlevi bir REST API'si olarak gösterilir. Amazon API Ağ Geçidi. Sonra JMeter API'yi test etmek için kullanılır.

yük testi Rekognition API çağrıları

REGION_1_TRAFFIC_PERCENTAGE ilk önce 100'e ayarlandı, bu şekilde hepsi DetectFaces API çağrıları şu adrese gönderilir: us-east-1 sadece. Teorik olarak, elde edilebilecek maksimum TPS, hizmet kotası ile sınırlıdır. us-east-150 TPS'dir. Eşzamanlı 50 iş parçacığı ile başlayarak, şu ana kadar artımlı olarak 5 iş parçacığı ekleyerek özel API uç noktasında yük testi ProvisionedThroughputExceededException Amazon'dan iade edilen Rekognition gözlemlenir.

REGION_1_TRAFFIC_PERCENTAGE daha sonra 50'ye ayarlanır, bu şekilde tümü DetectLabels API çağrıları eşit olarak gönderilir us-east-1 ve us-west-2. Teorik olarak, elde edilebilecek maksimum TPS, iki Bölgenin birleştirdiği hizmet kotası olan 100 TPS'dir. Maksimum TPS'yi bulmak için yük testini 100 iş parçacığından yeniden başlatın.

Aşağıdaki tablo, yük testinin sonuçlarını özetlemektedir.

us-east-1'e yapılan DetectLabels API Çağrılarının Yüzdesi us-west-2'ye yapılan DetectLabels API Çağrılarının Yüzdesi Teoride Maksimum TPS Olmadan Maksimum Eşzamanlı Çalıştırma ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Sonuç

Birçok müşteri, kimlik doğrulama, içerik denetleme, medya işleme ve daha fazlası dahil olmak üzere çeşitli kullanım durumları için Amazon Rekognition Image durum bilgisiz API'leri kullanıyor. Bu gönderi, görüntüleri aktarmanın iki seçeneğini ve aşağıdaki kullanım durumları için ham bayt seçeneğinin nasıl kullanılacağını tartıştı:

  • Amazon Rekognition Bölgesel kullanılabilirliği
  • Müşteri verileri yerleşimi
  • Amazon Rekognition durum bilgisiz API'lerinin TPS'sini büyütme

Amazon Rekognition'ın nasıl kullanıldığını kontrol edin farklı bilgisayar görüşü kullanım durumları ve inovasyon yolculuğunuza başlayın.


Yazarlar Hakkında

Birden fazla bölgeyi kullanarak Amazon Rekognition durum bilgisi olmayan API'lerin ölçeklenebilirliğini iyileştirin PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Şaron Li Boston, MA bölgesinde bulunan AWS'de bir çözüm mimarıdır. Kurumsal müşterilerle çalışarak zor sorunları çözmelerine ve AWS'yi geliştirmelerine yardımcı oluyor. İş dışında ailesiyle vakit geçirmeyi ve yerel restoranları keşfetmeyi seviyor.

Birden fazla bölgeyi kullanarak Amazon Rekognition durum bilgisi olmayan API'lerin ölçeklenebilirliğini iyileştirin PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Vaibhav Şah AWS'de Kıdemli Çözüm Mimarı ve müşterilerine bulutla ilgili her konuda yardımcı olmayı ve bulutu benimseme yolculuklarını etkinleştirmeyi seviyor. İş dışında seyahat etmeyi, yeni yerler ve restoranlar keşfetmeyi, yemek yapmayı, kriket ve futbol gibi sporları takip etmeyi, film ve dizi izlemeyi (Marvel hayranı) ve yürüyüş, paraşütle atlama gibi maceralı aktiviteleri sever ve liste uzayıp gider.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi