مکان های توابع ابری

Cloud Functions منطقه‌ای است، به این معنی که زیرساختی که عملکرد Cloud شما را اجرا می‌کند در مناطق خاصی قرار دارد و توسط Google مدیریت می‌شود تا به‌طور اضافی در همه مناطق در آن مناطق در دسترس باشد.

هنگام انتخاب مناطقی که توابع خود را در چه مناطقی اجرا کنید، ملاحظات اصلی شما باید تأخیر و در دسترس بودن باشد. به طور کلی می توانید مناطق نزدیک به کاربران خود را انتخاب کنید، اما باید مکان محصولات و خدمات دیگری را که برنامه شما استفاده می کند نیز در نظر بگیرید. استفاده از خدمات در چندین منطقه می تواند بر تأخیر برنامه شما و همچنین قیمت گذاری تأثیر بگذارد.

توابع ابری در مناطق زیر با قیمت سطح 1 در دسترس است:

  • us-central1 (آیووا)
  • us-east1 (کارولینای جنوبی)
  • us-east4 (ویرجینیای شمالی)
  • europe-west1 (بلژیک)
  • europe-west2 (لندن)
  • asia-east1 (تایوان)
  • asia-east2 (هنگ کنگ)
  • asia-northeast1 (توکیو)
  • asia-northeast2 (اوزاکا)

توابع ابری در مناطق زیر با قیمت‌گذاری سطح 2 در دسترس است:

  • us-west2 (لس آنجلس)
  • us-west3 (سالت لیک سیتی)
  • us-west4 (لاس وگاس)
  • northamerica-northeast1 (مونترال)
  • southamerica-east1 (سائوپائولو)
  • europe-west3 (فرانکفورت)
  • europe-west6 (زوریخ)
  • europe-central2 (ورشو)
  • australia-southeast1 (سیدنی)
  • asia-south1 (بمبئی)
  • asia-southeast1 (سنگاپور)
  • asia-southeast2 (جاکارتا)
  • asia-northeast3 (سئول)

توابع در یک منطقه معین در یک پروژه معین باید دارای نام‌های منحصربه‌فرد (غیرحساس به حروف کوچک) باشند، اما توابع در سراسر مناطق یا پروژه‌ها ممکن است یک نام داشته باشند.

بهترین روش ها برای تغییر منطقه

به طور پیش فرض، توابع در منطقه us-central1 اجرا می شوند. توجه داشته باشید که این ممکن است با منطقه یک منبع رویداد، مانند یک سطل ذخیره‌سازی ابری متفاوت باشد. اگر می‌خواهید ناحیه‌ای را که یک تابع در آن اجرا می‌شود تغییر دهید، توصیه‌های این بخش را برای هر نوع راه‌انداز عملکرد دنبال کنید.

برای تنظیم منطقه ای که یک تابع در آن اجرا می شود، پارامتر region را در تعریف تابع مطابق شکل تنظیم کنید:

exports.myStorageFunction = functions
    .region('europe-west1')
    .storage
    .object()
    .onFinalize((object) => {
      // ...
    });

می‌توانید چندین منطقه را با ارسال رشته‌های منطقه‌ای جدا شده با کاما در functions.region() مشخص کنید. برای اطلاعات بیشتر در مورد رویه های توصیه شده، به تغییر ناحیه یک تابع مراجعه کنید.

HTTP و توابع قابل فراخوانی مشتری

برای توابع HTTP و قابل فراخوانی، توصیه می‌کنیم ابتدا تابع خود را روی منطقه مقصد یا نزدیک‌ترین محل قرارگیری مشتریان مورد انتظار تنظیم کنید، و سپس عملکرد اصلی خود را تغییر دهید تا درخواست HTTP خود را به تابع جدید هدایت کنید (آنها می‌توانند همین کار را داشته باشند. نام). اگر کلاینت‌های تابع HTTP شما از ریدایرکت‌ها پشتیبانی می‌کنند، می‌توانید به سادگی تابع اصلی خود را تغییر دهید تا وضعیت تغییر مسیر HTTP (301) همراه با URL تابع جدید خود را بازگردانید. اگر مشتریان شما به خوبی از تغییر مسیرها استفاده نمی کنند، می توانید با شروع یک درخواست جدید از تابع اصلی به تابع جدید، درخواست را از تابع اصلی به تابع جدید پراکسی کنید. مرحله آخر این است که اطمینان حاصل شود که همه مشتریان در حال فراخوانی تابع جدید هستند.

انتخاب مکان سمت مشتری برای توابع قابل فراخوانی

در مورد تابع قابل فراخوانی، تنظیمات قابل فراخوانی مشتری باید از دستورالعمل های مشابه توابع HTTP پیروی کنند. کلاینت همچنین می تواند یک منطقه را مشخص کند، و اگر تابع در هر منطقه ای غیر از us-central1 اجرا شود باید این کار را انجام دهد.

برای تنظیم مناطق روی مشتری، ناحیه مورد نظر را در زمان اولیه مشخص کنید:

سریع

lazy var functions = Functions.functions(region:"europe-west1")

هدف-C

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];

وب


var functions = firebase.app().functions('europe-west1');

اندروید

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");

وحدت

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");

توابع پس زمینه

توابع پس زمینه حداقل یک بار معنایی تحویل رویداد را اتخاذ می کنند، به این معنی که تحت برخی شرایط ممکن است رویدادهای تکراری دریافت کنند. بنابراین، شما باید توابع را پیاده سازی کنید تا ناتوان باشید. اگر عملکرد شما از قبل ضعیف است، می‌توانید با همان ماشه رویداد، تابع را در منطقه جدید مجدداً مستقر کنید و پس از تأیید اینکه عملکرد جدید به درستی ترافیک دریافت می‌کند، عملکرد قدیمی را حذف کنید. در طول این انتقال، هر دو تابع رویدادها را دریافت خواهند کرد. برای دنباله دستورات توصیه شده برای تغییر ناحیه برای توابع، تغییر ناحیه یک تابع را ببینید.

اگر عملکرد شما در حال حاضر idempotent نیست، یا عدم توانایی آن فراتر از منطقه گسترش نمی یابد، توصیه می کنیم ابتدا قبل از انتقال تابع، idempotency را پیاده سازی کنید.

توصیه‌های منطقه بهینه براساس نوع ماشه رویداد متفاوت است:

نوع ماشه توصیه منطقه
Cloud Firestore نزدیکترین منطقه به مکان نمونه Cloud Firestore (به بخش بعدی مراجعه کنید)
پایگاه داده بیدرنگ همیشه us-central1
فضای ذخیره ابری نزدیکترین منطقه به مکان سطل ذخیره سازی ابری (به بخش بعدی مراجعه کنید)
دیگران اگر در حال تعامل با یک نمونه پایگاه داده بیدرنگ، یک نمونه Cloud Firestore یا یک سطل فضای ذخیره‌سازی ابری در داخل تابع هستید، منطقه پیشنهادی همان است که اگر یک تابع توسط یکی از آن منابع راه‌اندازی شده باشد. در غیر این صورت، از ناحیه پیش فرض us-central1 استفاده کنید. همچنین توجه داشته باشید که توابع متصل به میزبانی Firebase باید در us-central1 واقع شوند.

انتخاب مناطق بر اساس مکان‌های Cloud Firestore و Cloud Storage

مناطق موجود برای توابع همیشه دقیقاً با مناطق موجود برای پایگاه داده Cloud Firestore و سطل های Cloud Storage شما مطابقت ندارند.

توجه داشته باشید که اگر عملکرد و منبع شما (نمونه پایگاه داده یا سطل فضای ذخیره‌سازی ابری) در مکان‌های متفاوتی قرار دارند، به‌طور بالقوه می‌توانید تاخیر و هزینه‌های صورت‌حساب را افزایش دهید.

در اینجا نقشه‌ای از نزدیک‌ترین مناطق پشتیبانی‌شده از توابع برای Cloud Firestore و Cloud Storage، برای مواردی که همان منطقه پشتیبانی نمی‌شود ، آمده است:

منطقه/چند منطقه برای Cloud Firestore و Cloud Storage نزدیکترین منطقه برای توابع
nam5 یا us-central (چند منطقه ای) us-central1
eur3 یا europe-west (چند منطقه) europe-west1
asia-south1 (بمبئی) asia-east2