بهبود مقیاس‌پذیری برای APIهای بدون حالت شناسایی آمازون با استفاده از هوش داده پلاتوبلاکچین در مناطق مختلف. جستجوی عمودی Ai.

بهبود مقیاس پذیری برای API های بدون حالت شناسایی آمازون با استفاده از چندین منطقه

در گذشته پست های وبلاگ، ما یک راه حل تأیید هویت انتها به انتها را در یک منطقه AWS توضیح دادیم. راه حل استفاده می کند شناسایی آمازون رابط های برنامه کاربردی ردیابی برای تشخیص چهره و مقایسه چهره ها برای مقایسه چهره ما آن APIها را به عنوان APIهای بدون حالت در نظر می گیریم زیرا به شناسایی آمازون وابسته نیستند. مجموعه چهره. آنها همچنین idempotent هستند، به این معنی که تماس های مکرر با پارامترهای یکسان، همان نتیجه را نشان می دهد. آنها گزینه های انعطاف پذیری را برای ارسال تصاویر، چه از طریق یک، ارائه می دهند سرویس ذخیره سازی ساده آمازون مکان (Amazon S3) یا بایت های خام.

در این پست بر روی تصویر شناسایی آمازون API های بدون حالت، و درباره دو گزینه ارسال تصاویر و زمان انتخاب یکی از روی دیگری از دیدگاه معماری سیستم بحث کنید. سپس در مورد چگونگی مقیاس بندی API های بدون حالت برای غلبه بر برخی محدودیت های منطقه ای بحث می کنیم. هنگامی که در مورد مقیاس پذیری صحبت می کنیم، اغلب به حداکثر تراکنش در ثانیه (TPS) اشاره می کنیم که راه حل می تواند انجام دهد. به عنوان مثال، هنگام میزبانی یک رویداد بزرگ که از دید کامپیوتری برای شناسایی چهره ها یا برچسب های اشیا استفاده می کند، ممکن است با افزایش ترافیک مواجه شوید و نمی خواهید سیستم دریچه گاز را کاهش دهد. این بدان معناست که گاهی اوقات نیاز به افزایش TPS و حتی فراتر از سهمیه خدمات منطقه ای آمازون Rekognition API دارید. این پست راه حلی را برای افزایش TPS API های بدون حالت با استفاده از چندین منطقه پیشنهاد می کند.

API های بدون حالت شناسایی آمازون

از میان APIهای تصویر شناسایی آمازون موجود، مقایسه چهره ها, ردیابی, DetectLabels, DetectModerationLabels, DetectProtectiveEquipment, متن ردیابیو افراد مشهور را بشناسید بی تابعیت هستند آنها هر دو گزینه Amazon S3 و بایت خام را برای ارسال تصاویر ارائه می دهند. به عنوان مثال، در دستور درخواست از DetectFaces API، دو گزینه برای ارسال به آن وجود دارد Image رشته: Bytes or S3Object.

هنگام استفاده از S3Object گزینه، یک معماری معمولی به شرح زیر است.

این راه حل دارای گردش کار زیر است:

  1. برنامه مشتری به یک صفحه وب میزبانی شده با AWS تقویت کنید.
  2. برنامه مشتری با احراز هویت و مجاز است Cognito آمازون.
  3. برنامه مشتری یک تصویر را در یک سطل S3 آپلود می کند.
  4. آمازون S3 یک را راه اندازی می کند AWS لامبدا تابعی برای فراخوانی آمازون Rekognition.
  5. تابع Lambda API های شناسایی آمازون را با گزینه S3Object فراخوانی می کند.
  6. تابع لامبدا نتیجه را تا یک ادامه می دهد آمازون DynamoDB جدول.

انتخاب S3Object گزینه در سناریوهای زیر:

  • تصویر با فرمت PNG یا JPEG است
  • شما کل پشته را در همان منطقه ای که Amazon Rekognition در دسترس است مستقر می کنید
  • سهمیه خدمات منطقه ای آمازون Rekognition API نیاز سیستم شما را برآورده می کند

وقتی همه این الزامات را ندارید، باید آن را انتخاب کنید Bytes گزینه.

از API های بدون حالت شناسایی آمازون در منطقه ای متفاوت استفاده کنید

یک نمونه از استفاده از Bytes گزینه زمانی است که می‌خواهید مورد استفاده خود را در منطقه‌ای مستقر کنید که شناسایی آمازون به طور کلی در دسترس نیست، به عنوان مثال، اگر مشتری در آمریکای جنوبی حضور دارید (sa-east-1) منطقه. برای اقامت داده ها، سطل S3 که برای ذخیره تصاویر کاربران استفاده می کنید باید در آن باشد sa-east-1، اما شما می خواهید از شناسایی آمازون برای راه حل خود استفاده کنید حتی اگر به طور کلی در دسترس نیست sa-east-1. یکی از راه حل ها استفاده از Bytes گزینه ای برای فراخوانی آمازون Rekognition در منطقه دیگری که آمازون Rekognition در دسترس است، مانند us-east-1. نمودار زیر این معماری را نشان می دهد.

شناخت در مناطق مختلف

پس از فعال شدن تابع Lambda (مرحله 4)، به جای فراخوانی مستقیم آمازون Rekognition با مکان S3 تصویر، تابع باید تصویر را از سطل S3 بازیابی کند (مرحله 5)، سپس آمازون Rekognition را با بایت های خام تصویر فراخوانی کند (مرحله). 6). کد زیر یک قطعه کد از تابع 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))

توجه داشته باشید که قطعه کد قبلی مستقیماً برای فرمت‌های JPEG یا PNG کار می‌کند. برای سایر فرمت‌های تصویر، مانند BMP، پردازش تصویر اضافی برای تبدیل آن به بایت‌های JPEG یا PNG قبل از ارسال به آمازون Rekognition مورد نیاز است. کد زیر BMP را به بایت 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'])

با گسترش فراخوانی های API در چندین منطقه، TPS API های بدون حالت را افزایش دهید

مورد استفاده دیگر از Bytes گزینه این است که می‌توانید TPS APIهای بدون حالت را با پخش کردن فراخوان‌های API در چندین منطقه افزایش دهید. به این ترتیب، شما توسط سهمیه خدمات منطقه ای API محدود نمی شوید زیرا می توانید TPS اضافی را از مناطق دیگر بدست آورید.

در مثال زیر، یک تابع Lambda برای فراخوانی آمازون Rekognition ایجاد شده است DetectLabels API با Bytes گزینه. برای افزایش حداکثر TPS، می‌توانید تماس‌های API را در چندین منطقه با وزن پخش کنید. حداکثر TPSی که می توانید به دست آورید با این موارد محاسبه می شود: min (region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). مثال زیر استفاده می کند us-east-1 و us-west-2 مناطق

گسترش ترافیک شناسایی

قطعه کد برای فراخوانی DetectLabels API به شرح زیر است:

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)

زیرا us-east-1 و us-west-2 هر دو دارای حداکثر 50 TPS برای Amazon Rekognition DetectFaces API هستند، می توانید با تنظیم متغیر محیطی، تماس های API را با وزن 50/50 به طور مساوی پخش کنید. REGION_1_TRAFFIC_PERCENTAGE به 50. به این ترتیب، شما می توانید حداقل (50/50٪، 50/50%) = 100 TPS در تئوری به دست آورید.

برای تایید این ایده، تابع Lambda به عنوان یک REST API با نمایش داده می شود دروازه API آمازون. سپس JMeter برای بارگذاری تست API استفاده می شود.

تست بارگیری فراخوانی های API Rekognition

REGION_1_TRAFFIC_PERCENTAGE ابتدا روی 100 تنظیم شده است، به این ترتیب همه DetectFaces تماس های API به ارسال می شود us-east-1 فقط. در تئوری، حداکثر TPSی که می توان به دست آورد با سهمیه خدمات در محدود می شود us-east-1که 50 TPS است. بارگذاری آزمایش در نقطه پایانی API سفارشی، با 50 رشته همزمان شروع می شود، به تدریج 5 رشته را اضافه می کند تا اینکه ProvisionedThroughputExceededException بازگشت از آمازون Rekognition مشاهده می شود.

REGION_1_TRAFFIC_PERCENTAGE سپس روی 50 تنظیم می شود، به این ترتیب همه DetectLabels تماس های API به طور یکنواخت ارسال می شوند us-east-1 و us-west-2. در تئوری، حداکثر TPS که می توان به دست آورد، سهمیه خدماتی است که دو منطقه با هم ترکیب می کنند، که 100 TPS است. تست بار را دوباره از 100 رشته شروع کنید تا حداکثر TPS را بیابید.

جدول زیر نتایج آزمایش بار را خلاصه می کند.

درصد تماس‌های DetectLabels API با us-east-1 درصد تماس‌های DetectLabels API با us-west-2 حداکثر TPS در تئوری حداکثر اجراهای همزمان بدون ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

نتیجه

بسیاری از مشتریان از APIهای بدون حالت آمازون Rekognition Image برای موارد استفاده مختلف از جمله تأیید هویت، تعدیل محتوا، پردازش رسانه و موارد دیگر استفاده می کنند. در این پست دو گزینه ارسال تصاویر و نحوه استفاده از گزینه بایت خام برای موارد استفاده زیر مورد بحث قرار گرفته است:

  • در دسترس بودن منطقه ای شناسایی آمازون
  • اقامت داده های مشتری
  • افزایش TPS API های بدون حالت آمازون Rekognition

نحوه استفاده از آمازون Rekognition را بررسی کنید موارد مختلف استفاده از بینایی کامپیوتر و سفر نوآوری خود را آغاز کنید.


درباره نویسنده

بهبود مقیاس‌پذیری برای APIهای بدون حالت شناسایی آمازون با استفاده از هوش داده پلاتوبلاکچین در مناطق مختلف. جستجوی عمودی Ai.شارون لی یک معمار راه حل در AWS، مستقر در منطقه بوستون، MA است. او با مشتریان سازمانی کار می کند و به آنها کمک می کند تا مشکلات دشوار را حل کنند و بر اساس AWS بسازند. خارج از محل کار، او دوست دارد با خانواده اش وقت بگذراند و رستوران های محلی را کشف کند.

بهبود مقیاس‌پذیری برای APIهای بدون حالت شناسایی آمازون با استفاده از هوش داده پلاتوبلاکچین در مناطق مختلف. جستجوی عمودی Ai.وایباواه شاه یک معمار ارشد راه حل با AWS است و می‌خواهد به مشتریان خود در امور ابری کمک کند و سفر پذیرش ابری آنها را فعال کند. خارج از محل کار، او عاشق سفر، کاوش در مکان‌ها و رستوران‌های جدید، آشپزی، دنبال کردن ورزش‌هایی مانند کریکت و فوتبال، تماشای فیلم و سریال (طرفدار مارول) و فعالیت‌های ماجراجویانه مانند پیاده‌روی، چتربازی است و این فهرست ادامه دارد.

تمبر زمان:

بیشتر از آموزش ماشین AWS