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 |