Tingkatkan skalabilitas untuk API stateless Amazon Rekognition menggunakan beberapa wilayah Intelijen Data PlatoBlockchain. Pencarian Vertikal. Ai.

Tingkatkan skalabilitas untuk API stateless Amazon Rekognition menggunakan beberapa wilayah

Di sebelumnya posting blog, kami menjelaskan solusi verifikasi identitas end-to-end di satu Wilayah AWS. Solusinya menggunakan Rekognisi Amazon Lebah Deteksi Wajah untuk deteksi wajah dan Bandingkan Wajah untuk perbandingan wajah. Kami menganggap API tersebut sebagai API tanpa kewarganegaraan karena tidak bergantung pada Amazon Rekognition koleksi wajah. Mereka juga idempoten, artinya panggilan berulang dengan parameter yang sama akan menghasilkan hasil yang sama. Mereka memberikan opsi fleksibel untuk mengirimkan gambar, baik melalui Layanan Penyimpanan Sederhana Amazon (Amazon S3) lokasi atau byte mentah.

Dalam posting ini, kami fokus Gambar Pengakuan Amazon API stateless, dan diskusikan dua opsi untuk meneruskan gambar dan kapan harus memilih salah satu dari yang lain dari sudut pandang arsitektur sistem. Kemudian kami membahas cara menskalakan API tanpa kewarganegaraan untuk mengatasi beberapa batasan Regional. Ketika berbicara tentang skalabilitas, kita sering mengacu pada transaksi maksimum per detik (TPS) yang dapat ditangani oleh solusi. Misalnya, saat menyelenggarakan acara besar yang menggunakan visi komputer untuk mendeteksi wajah atau label objek, Anda mungkin mengalami lonjakan lalu lintas, dan Anda tidak ingin sistem melambat. Itu berarti Anda terkadang perlu meningkatkan TPS dan bahkan melampaui kuota layanan Regional yang dimiliki Amazon Rekognition API. Posting ini mengusulkan solusi untuk meningkatkan TPS API stateless dengan menggunakan beberapa Wilayah.

API tanpa status Amazon Rekognition

Dari Amazon Rekognition Image API yang tersedia, Bandingkan Wajah, Deteksi Wajah, DeteksiLabel, DeteksiModerationLabels, Deteksi Peralatan Pelindung, DeteksiTeks, dan Kenali Selebriti tidak berkewarganegaraan. Mereka menyediakan opsi Amazon S3 dan byte mentah untuk meneruskan gambar. Misalnya, dalam sintaks permintaan dari DetectFaces API, ada dua opsi untuk diteruskan ke Image bidang: Bytes or S3Object.

Saat menggunakan S3Object pilihan, arsitektur khas adalah sebagai berikut.

Solusi ini memiliki alur kerja berikut:

  1. Aplikasi klien mengakses halaman web yang dihosting Amplifikasi AWS.
  2. Aplikasi klien diautentikasi dan diotorisasi dengan Amazon Kognito.
  3. Aplikasi klien mengunggah gambar ke bucket S3.
  4. Amazon S3 memicu AWS Lambda fungsi untuk memanggil Amazon Rekognition.
  5. Fungsi Lambda memanggil Amazon Rekognition API dengan opsi S3Object.
  6. Fungsi Lambda mempertahankan hasil ke Amazon DynamoDB tabel.

Pilih S3Object opsi dalam skenario berikut:

  • Gambar adalah file berformat PNG atau JPEG
  • Anda menerapkan seluruh tumpukan di Wilayah yang sama tempat Amazon Rekognition tersedia
  • Kuota layanan Regional Amazon Rekognition API memenuhi persyaratan sistem Anda

Ketika Anda tidak memenuhi semua persyaratan ini, Anda harus memilih Bytes .

Gunakan Amazon Rekognition Stateless API di Wilayah yang berbeda

Salah satu contoh penggunaan the Bytes adalah ketika Anda ingin menerapkan kasus penggunaan Anda di Wilayah di mana Amazon Rekognition tidak tersedia secara umum, misalnya, jika Anda memiliki kehadiran pelanggan di Amerika Selatan (sa-east-1) Wilayah. Untuk residensi data, bucket S3 yang Anda gunakan untuk menyimpan gambar pengguna harus ada sa-east-1, tetapi Anda ingin menggunakan Amazon Rekognition untuk solusi Anda meskipun tidak tersedia secara umum di sa-east-1. Salah satu solusinya adalah dengan menggunakan Bytes opsi untuk memanggil Amazon Rekognition di Wilayah lain tempat Amazon Rekognition tersedia, seperti us-east-1. Diagram berikut mengilustrasikan arsitektur ini.

Pengakuan di berbagai Wilayah

Setelah fungsi Lambda dipicu (Langkah 4), alih-alih memanggil Amazon Rekognition secara langsung dengan lokasi S3 gambar, fungsi tersebut perlu mengambil gambar dari bucket S3 (Langkah 5), lalu memanggil Amazon Rekognition dengan byte mentah gambar (Langkah 6). Berikut adalah cuplikan kode fungsi Lambda:

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

Perhatikan bahwa cuplikan kode sebelumnya berfungsi langsung untuk format JPEG atau PNG. Untuk format gambar lainnya, seperti BMP, diperlukan pemrosesan gambar tambahan untuk mengubahnya menjadi byte JPEG atau PNG sebelum dikirim ke Amazon Rekognition. Kode berikut mengonversi BMP ke byte JPEG:

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

Tingkatkan TPS API stateless dengan menyebarkan panggilan API ke beberapa Wilayah

Kasus penggunaan lain dari Bytes opsinya adalah Anda dapat meningkatkan TPS API stateless dengan menyebarkan panggilan API ke beberapa Wilayah. Dengan begitu, Anda tidak dibatasi oleh kuota layanan Regional API karena Anda bisa mendapatkan TPS tambahan dari Wilayah lain.

Dalam contoh berikut, fungsi Lambda dibuat untuk memanggil Amazon Rekognition DetectLabels API dengan Bytes pilihan. Untuk meningkatkan TPS maksimum, Anda dapat menyebarkan panggilan API ke beberapa Wilayah dengan bobot. TPS maksimum yang dapat Anda capai dihitung dengan: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, โ€ฆ region_n_max_tps/region_n_weight). Contoh berikut menggunakan us-east-1 dan us-west-2 Daerah.

menyebarkan lalu lintas Pengakuan

Cuplikan kode untuk memanggil DetectLabels APInya adalah sebagai berikut:

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)

Karena us-east-1 dan us-west-2 keduanya memiliki maksimum 50 TPS untuk Amazon Rekognition DetectFaces API, Anda dapat menyebarkan panggilan API secara merata dengan bobot 50/50 dengan menyetel variabel lingkungan REGION_1_TRAFFIC_PERCENTAGE hingga 50. Dengan cara ini, Anda dapat mencapai min(50/50%, 50/50%) = 100 TPS secara teori.

Untuk memvalidasi ide, fungsi Lambda diekspos sebagai REST API dengan Gerbang API Amazon. Kemudian JMeter digunakan untuk memuat pengujian API.

uji beban panggilan Rekognition API

REGION_1_TRAFFIC_PERCENTAGE pertama diatur ke 100, cara ini semua DetectFaces Panggilan API dikirim ke us-east-1 hanya. Secara teori, TPS maksimal yang bisa dicapai dibatasi oleh kuota layanan yang masuk us-east-1, yaitu 50 TPS. Muat pengujian pada titik akhir API khusus, dimulai dengan 50 utas bersamaan, secara bertahap menambahkan 5 utas hingga ProvisionedThroughputExceededException dikembalikan dari Amazon Rekognition diamati.

REGION_1_TRAFFIC_PERCENTAGE kemudian diatur ke 50, cara ini semua DetectLabels Panggilan API dikirim secara merata ke us-east-1 dan us-west-2. Secara teori, TPS maksimal yang bisa dicapai adalah kuota layanan yang digabungkan kedua Daerah, yaitu 100 TPS. Mulai uji beban lagi dari 100 utas untuk menemukan TPS maksimum.

Tabel berikut merangkum hasil pengujian beban.

Persentase Panggilan API DetectLabels ke us-east-1 Persentase Panggilan API DetectLabels ke us-west-2 TPS Maksimum dalam Teori Maksimum Bersamaan Berjalan tanpa DisediakanThroughputExceededException
100 0 50 70
50 50 100 145

Kesimpulan

Banyak pelanggan menggunakan API tanpa status Amazon Rekognition Image untuk berbagai kasus penggunaan, termasuk verifikasi identitas, moderasi konten, pemrosesan media, dan lainnya. Posting ini membahas dua opsi untuk meneruskan gambar dan cara menggunakan opsi raw byte untuk kasus penggunaan berikut:

  • Ketersediaan Amazon Rekognition Regional
  • Kediaman data pelanggan
  • Meningkatkan TPS Amazon Rekognition stateless API

Lihat bagaimana Amazon Rekognition digunakan kasus penggunaan visi komputer yang berbeda dan mulailah perjalanan inovasi Anda.


Tentang Penulis

Tingkatkan skalabilitas untuk API stateless Amazon Rekognition menggunakan beberapa wilayah Intelijen Data PlatoBlockchain. Pencarian Vertikal. Ai.Sharon Li adalah arsitek solusi di AWS, berbasis di area Boston, MA. Dia bekerja dengan pelanggan perusahaan, membantu mereka memecahkan masalah yang sulit dan membangun di AWS. Di luar pekerjaan, dia suka menghabiskan waktu bersama keluarganya dan menjelajahi restoran lokal.

Tingkatkan skalabilitas untuk API stateless Amazon Rekognition menggunakan beberapa wilayah Intelijen Data PlatoBlockchain. Pencarian Vertikal. Ai.Vaibhav Shah adalah Arsitek Solusi Senior dengan AWS dan senang membantu pelanggannya dengan semua cloud dan memungkinkan perjalanan adopsi cloud mereka. Di luar pekerjaan, dia suka bepergian, menjelajahi tempat dan restoran baru, memasak, mengikuti olahraga seperti kriket dan sepak bola, menonton film dan serial (penggemar Marvel), dan aktivitas petualangan seperti hiking, skydiving, dan masih banyak lagi.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS