مکان‌های Cloud Functions

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

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

به‌طور پیش‌فرض، «خط فرمان Firebase» توابع را براساس پیکربندی پروژه شما در منطقه‌ای مستقر می‌کند. برای توابع رویدادمحور، معمولاً در منطقه‌ای در منطقه منبع داده راه‌انداز (مثل پایگاه داده Cloud Firestore یا مخزن Cloud Storage) مستقر می‌شود و به‌عنوان پشتیبان در us-central1 مستقر می‌شود.

پس‌از استقرار، می‌توانید منطقه را در کنسول Firebase یا با اجرای firebase functions:list درستی‌سنجی کنید. اگر می‌خواهید تابع شما در منطقه دیگری اجرا شود، می‌توانید منطقه آن را تغییر دهید.

مناطق پشتیبانی‌شده

در فهرست‌های این بخش، نماد energy_savings_leaf نشان می‌دهد که برق این منطقه با انتشار کربن پایین تولید می‌شود. برای اطلاعات بیشتر، انرژی بدون کربن برای مناطق Google Cloud را ببینید.

قیمت‌گذاری گروه ۱

‫Cloud Functions در مناطق زیر با قیمت‌گذاری سطح ۱ دردسترس است:

منطقه مکان نسخه‌های پشتیبانی‌شده محصول انتشار کربن۲
africa-south1 ژوهانسبورگ فقط نسل دوم
asia-east1 تایوان نسل اول، نسل دوم
asia-east2 هنگ کنگ فقط نسل اول
asia-northeast1 توکیو نسل اول، نسل دوم
asia-northeast2 اوزاکا نسل اول، نسل دوم
europe-north1 فنلاند فقط نسل دوم energy_savings_leaf
europe-southwest1 مادرید فقط نسل دوم
europe-west1 بلژیک نسل اول، نسل دوم energy_savings_leaf
europe-west4 هلند فقط نسل دوم
europe-west8 میلان فقط نسل دوم
europe-west9 پاریس فقط نسل دوم energy_savings_leaf
me-west1 تل‌آویو فقط نسل دوم
europe-west2 لندن فقط نسل اول
us-central1 آیووا نسل اول، نسل دوم energy_savings_leaf
us-east1 کارولینای جنوبی نسل اول، نسل دوم
us-east4 ویرجینیای شمالی نسل اول، نسل دوم
us-east5 کلومبوس فقط نسل دوم
us-south1 دالاس فقط نسل دوم
us-west1 اورگان نسل اول، نسل دوم energy_savings_leaf

قیمت‌گذاری سطح ۲

‫Cloud Functions در مناطق زیر با قیمت‌گذاری سطح ۲ دردسترس است:

منطقه مکان نسخه‌های پشتیبانی‌شده محصول انتشار کربن۲
asia-east2 هنگ کنگ فقط نسل دوم
asia-northeast3 سئول نسل اول، نسل دوم
asia-southeast1 سنگاپور نسل اول، نسل دوم
asia-southeast2 جاکارتا نسل اول، نسل دوم
asia-south1 بمبئی فقط نسل دوم
asia-south2 دهلی، هند فقط نسل دوم
australia-southeast1 سیدنی نسل اول، نسل دوم
australia-southeast2 ملبورن فقط نسل دوم
europe-central2 ورشو نسل اول، نسل دوم
europe-west2 لندن فقط نسل دوم
europe-west3 فرانکفورت نسل اول، نسل دوم energy_savings_leaf
europe-west6 زوریخ نسل اول، نسل دوم energy_savings_leaf
europe-west10 برلین فقط نسل دوم
europe-west12 تورین فقط نسل دوم
me-central1 دوحه فقط نسل دوم
me-central2 دمام فقط نسل دوم
northamerica-northeast1 مونترال نسل اول، نسل دوم energy_savings_leaf
northamerica-northeast2 تورنتو فقط نسل دوم energy_savings_leaf
southamerica-east1 سائوپائولو نسل اول، نسل دوم energy_savings_leaf
southamerica-west1 سانتیاگو، شیلی فقط نسل دوم
us-west2 لوس انجلس نسل اول، نسل دوم
us-west3 سالت لیک سیتی نسل اول، نسل دوم
us-west4 لاس وگاس نسل اول، نسل دوم

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

روال‌های مطلوب برای مشخص کردن منطقه

به‌طور پیش‌فرض، «خط فرمان Firebase» توابع را براساس پیکربندی پروژه شما در منطقه‌ای مستقر می‌کند. برای توابع رویدادمحور، معمولاً در منطقه‌ای در منطقه منبع داده راه‌انداز (مثل پایگاه داده Cloud Firestore یا مخزن Cloud Storage) مستقر می‌شود و به‌عنوان پشتیبان در us-central1 مستقر می‌شود.

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

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

Node.js

exports.firestoreAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

پایتون

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

می‌توانید چندین منطقه را با ارسال چندین رشته منطقه جداشده با کاما در region مشخص کنید. همچنین توجه داشته باشید که هنگام مشخص کردن منطقه برای بسیاری از انواع راه‌انداز پس‌زمینه، باید فیلتر رویداد صحیح را همراه با منطقه مشخص کنید. در مثال بالا، این Cloud Firestore document رویداد را منتشر می‌کند. برای Cloud Storage، فیلتر رویداد می‌تواند bucket باشد؛ برای راه‌انداز Pub/Sub، فیلتر رویداد می‌تواند topic باشد، و غیره.

برای اطلاعات بیشتر درباره تغییر منطقه تابع که ترافیک تولید را مدیریت می‌کند، تغییر منطقه تابع را ببینید.

توابع HTTP و توابع فراخوان‌شدنی کارخواه

برای توابع HTTP و فراخوان‌پذیر، توصیه می‌کنیم ابتدا تابع خود را روی منطقه مقصد یا نزدیک‌ترین منطقه به جایی که اکثر مشتریان موردانتظار شما در آن قرار دارند تنظیم کنید و سپس تابع اصلی خود را تغییر دهید تا درخواست HTTP آن را به تابع جدید هدایت کند (می‌توانند نام یکسانی داشته باشند). اگر کارخواه‌های تابع HTTP شما از تغییر مسیر پشتیبانی می‌کنند، می‌توانید به‌سادگی تابع اصلی‌تان را تغییر دهید تا وضعیت تغییر مسیر HTTP ‏ (۳۰۱) را به‌همراه نشانی وب تابع جدیدتان برگرداند. اگر کارخواه‌های شما بازفرست‌ها را به‌خوبی مدیریت نمی‌کنند، می‌توانید درخواست را از تابع اصلی به تابع جدید با شروع درخواست جدید از تابع اصلی به تابع جدید پراکسی کنید. آخرین مرحله این است که مطمئن شوید همه مشتریان تابع جدید را فرا می‌خوانند.

انتخاب مکان سمت کارخواه برای توابع فراخواندنی

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

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

Swift

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

Objective-C

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

وب


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

Android

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

C++‎

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

Unity

firebase.Functions.FirebaseFunctions functions;

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

عملکردهای پس‌زمینه

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

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

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

نوع راه‌انداز توصیه منطقه
Cloud Firestore نزدیک‌ترین منطقه به مکان نمونه Cloud Firestore (بخش بعدی را ببینید)
Realtime Database همان منطقه نمونه Realtime Database
Cloud Storage نزدیک‌ترین منطقه به مکان Cloud Storage مخزن (بخش بعدی را ببینید)
موارد دیگر اگر با نمونه Realtime Database، نمونه Cloud Firestore، یا مخزن Cloud Storage در داخل تابع تعامل دارید، منطقه توصیه‌شده همانند زمانی است که تابع شما توسط یکی از آن منابع راه‌اندازی شده باشد. توابع متصل به Firebase Hosting می‌تواند در هر منطقه‌ای باشد، اما برای توصیه‌ها، نمای کلی میزبانی بدون سرور را ببینید.

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

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

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

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

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