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 |