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

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

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

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

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

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

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

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

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

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

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 فرانکفورت نسل اول، نسل دوم برگ_صرفه_جویی_انرژی
europe-west6 زوریخ نسل اول، نسل دوم برگ_صرفه_جویی_انرژی
europe-west10 برلین فقط نسل دوم
europe-west12 تورین فقط نسل دوم
me-central1 دوحه فقط نسل دوم
me-central2 دمام فقط نسل دوم
northamerica-northeast1 مونترال نسل اول، نسل دوم برگ_صرفه_جویی_انرژی
northamerica-northeast2 تورنتو فقط نسل دوم برگ_صرفه_جویی_انرژی
southamerica-east1 سائو پائولو نسل اول، نسل دوم برگ_صرفه_جویی_انرژی
southamerica-west1 سانتیاگو، شیلی فقط نسل دوم
us-west2 لس آنجلس نسل اول، نسل دوم
us-west3 سالت لیک سیتی نسل اول، نسل دوم
us-west4 لاس وگاس نسل اول، نسل دوم

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

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

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

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

نود جی اس

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 ، چندین ناحیه را مشخص کنید. همچنین توجه داشته باشید که هنگام مشخص کردن یک ناحیه برای انواع مختلف تریگر پس‌زمینه، باید فیلتر رویداد صحیح را به همراه ناحیه مشخص کنید. در مثال بالا، این document Cloud Firestore است که رویداد را منتشر می‌کند. برای یک تریگر Cloud Storage ، فیلتر رویداد می‌تواند bucket باشد؛ برای یک تریگر Pub/Sub، می‌تواند topic باشد و به همین ترتیب ادامه یابد.

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

HTTP و توابع قابل فراخوانی توسط کلاینت

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

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

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

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

سویفت

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

هدف-سی

@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");

سی++

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

وحدت

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 تعامل دارید، ناحیه توصیه شده همان ناحیه‌ای است که اگر تابعی توسط یکی از آن منابع فعال شده باشد، در نظر گرفته می‌شود. در غیر این صورت، از ناحیه پیش‌فرض us-central1 استفاده کنید. توابع متصل به Firebase Hosting می‌توانند در هر ناحیه‌ای باشند، اما برای توصیه‌ها به مرور کلی serverless در 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