مکان‌های Cloud Functions

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

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

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

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

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

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

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

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

منطقه مکان نسخه‌های پشتیبانی‌شده محصول انتشار CO2
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 در مناطق زیر با قیمت‌گذاری سطح ۲ دردسترس است:

منطقه مکان نسخه‌های پشتیبانی‌شده محصول انتشار CO2
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 (301) را به‌همراه نشانی وب تابع جدیدتان برگرداند. اگر مشتریانتان بازهدایت‌ها را به‌خوبی مدیریت نمی‌کنند، می‌توانید با شروع درخواست جدیدی از تابع اصلی به تابع جدید، درخواست را از تابع اصلی به تابع جدید پراکسی کنید. مرحله نهایی این است که مطمئن شوید همه کلاینت‌ها تابع جدید را فراخوانی می‌کنند.

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

درباره تابع قابل‌فراخوانی، تنظیمات قابل‌فراخوانی کارخواه باید از همان رهنمودهای توابع 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 bucket) در مکان‌های مختلفی باشند، ممکن است با افزایش تأخیر و هزینه‌های صورت‌حساب مواجه شوید.

در اینجا نگاشتی از نزدیک‌ترین مناطق پشتیبانی‌شده از توابع برای 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