Vị trí của Chức năng đám mây

Chức năng đám mây mang tính theo khu vực, tức là cơ sở hạ tầng chạy chức năng của bạn được đặt ở những khu vực cụ thể và do Google quản lý để có thể sử dụng dự phòng trên tất cả khu vực trong những khu vực đó.

Khi chọn khu vực để chạy hàm, bạn nên lưu ý đến độ trễ và khả năng hoạt động. Thường thì bạn có thể chọn những khu vực gần với người dùng, nhưng bạn cũng nên xem xét vị trí của các sản phẩm và dịch vụ khác mà ứng dụng của bạn sử dụng. Việc sử dụng các dịch vụ trên nhiều khu vực có thể ảnh hưởng đến độ trễ của ứng dụng, cũng như giá.

Theo mặc định, các hàm chạy trong vùng us-central1. Xin lưu ý rằng vùng này có thể khác với khu vực của một nguồn sự kiện, chẳng hạn như bộ chứa Cloud Storage. Tìm hiểu cách chỉ định khu vực chạy một hàm ở phần sau của trang này.

Các khu vực được hỗ trợ

Trong các danh sách ở phần này, biểu tượng energy_savings_leaf cho biết điện của khu vực này được sản xuất với lượng khí thải cacbon thấp. Để biết thêm thông tin, hãy xem bài viết Năng lượng không có cacbon cho các khu vực trên Google Cloud.

Chức năng đám mây được cung cấp ở những khu vực sau với giá Cấp 1:

  • asia-east1 (Đài Loan)
  • Chỉ asia-east2 (Hong Kong) thế hệ thứ 1
  • asia-northeast1 (Tokyo)
  • asia-northeast2 (Osaka)
  • europe-north1 (Phần Lan) energy_savings_leaf Chỉ dành cho thế hệ thứ 2
  • europe-west1 (Bỉ) energy_savings_leaf
  • Chỉ europe-west2 (London) thế hệ thứ 1
  • us-central1 (Iowa) energy_savings_leaf
  • us-east1 (Nam Carolina)
  • us-east4 (Bắc Virginia)
  • us-west1 (Oregon) energy_savings_leaf

Chức năng Cloud được cung cấp ở những khu vực sau với mức giá Cấp 2:

  • Chỉ asia-east2 (Hong Kong) thế hệ thứ 2
  • asia-northeast3 (Seoul)
  • asia-southeast1 (Singapore)
  • asia-southeast2 (Jakarta)
  • Chỉ asia-south1 (Mumbai) thế hệ thứ 2
  • australia-southeast1 (Sydney)
  • Chỉ australia-southeast2 (Melbourne) thế hệ thứ 2
  • europe-central2 (Waraw)
  • Chỉ europe-west2 (London) thế hệ thứ 2
  • europe-west3 (Frankfut)
  • europe-west6 (Zurich) energy_savings_leaf
  • northamerica-northeast1 (Montreal) energy_savings_leaf
  • northamerica-northeast2 (Toronto) energy_savings_leaf Chỉ dành cho thế hệ thứ 2
  • southamerica-east1 (Sao Paulo) energy_savings_leaf
  • Chỉ dành cho thế hệ thứ 2 của southamerica-west1 (suốt 3 thành phố, Chile)
  • us-west2 (Los Angeles)
  • us-west3 (Thành phố Salt Lake)
  • us-west4 (Las Vegas)

Các hàm ở một khu vực nhất định trong một dự án nhất định phải có tên duy nhất (không phân biệt chữ hoa chữ thường), nhưng các hàm trên các khu vực hoặc trong các dự án có thể bị trùng tên.

Các phương pháp hay nhất để xác định khu vực

Theo mặc định, các hàm chạy trong vùng us-central1. Xin lưu ý rằng vùng này có thể khác với khu vực của một nguồn sự kiện, chẳng hạn như bộ chứa Cloud Storage. Nếu bạn cần chỉ định khu vực chạy một hàm, hãy làm theo các đề xuất trong phần này cho từng loại điều kiện kích hoạt hàm.

Để đặt vùng chạy một hàm, hãy đặt tham số region trong phần định nghĩa hàm như sau:

Node.js

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

Python

# 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

Bạn có thể chỉ định nhiều khu vực bằng cách chuyển nhiều chuỗi khu vực được phân tách bằng dấu phẩy trong region. Ngoài ra, xin lưu ý rằng khi chỉ định một khu vực cho nhiều loại trình kích hoạt nền, bạn cần chỉ định bộ lọc sự kiện chính xác cùng với khu vực đó. Trong ví dụ trên, đây là document Cloud Firestore phát ra sự kiện. Đối với trình kích hoạt Cloud Storage, bộ lọc sự kiện có thể là bucket; đối với điều kiện kích hoạt Pub/Sub, bộ lọc sẽ là topic, v.v.

Xem nội dung thay đổi khu vực của một hàm để biết thêm thông tin về cách thay đổi khu vực cho một hàm đang xử lý lưu lượng truy cập thực tế.

Các hàm HTTP và ứng dụng có thể gọi

Đối với các hàm HTTP và hàm có thể gọi, trước tiên bạn nên đặt hàm của mình ở khu vực đích hoặc gần vị trí của khách hàng được mong đợi nhất, sau đó thay đổi hàm ban đầu để chuyển hướng yêu cầu HTTP của hàm đó sang hàm mới (các hàm này có thể cùng tên). Nếu ứng dụng khách của hàm HTTP hỗ trợ lệnh chuyển hướng, thì bạn chỉ cần thay đổi hàm ban đầu để trả về trạng thái chuyển hướng HTTP (301) cùng với URL của hàm mới. Nếu ứng dụng của bạn không xử lý tốt các lệnh chuyển hướng, bạn có thể uỷ quyền yêu cầu từ hàm gốc sang hàm mới bằng cách bắt đầu một yêu cầu mới từ hàm ban đầu đến hàm mới. Bước cuối cùng là đảm bảo rằng tất cả ứng dụng đều gọi hàm mới.

Lựa chọn vị trí phía máy khách cho các hàm có thể gọi

Về hàm có thể gọi, cách thiết lập lệnh gọi ứng dụng phải tuân theo các nguyên tắc giống như các hàm HTTP. Ứng dụng cũng có thể chỉ định một vùng và phải chỉ định như vậy nếu hàm chạy ở bất kỳ vùng nào khác ngoài us-central1.

Để đặt các vùng trên ứng dụng, hãy chỉ định vùng mong muốn khi khởi động:

Swift

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

Objective-C

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

Web


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

Hàm nền

Hàm nền sử dụng ngữ nghĩa phân phối sự kiện ít nhất một lần, nghĩa là trong một số trường hợp, các hàm này có thể nhận được các sự kiện trùng lặp. Vì vậy, bạn nên triển khai các hàm không thay đổi. Nếu hàm của bạn đã không có hiệu lực, thì bạn có thể triển khai lại hàm trong khu vực mới bằng cùng một điều kiện kích hoạt sự kiện và xoá hàm cũ sau khi xác minh rằng hàm mới nhận lưu lượng truy cập đúng cách. Trong quá trình chuyển đổi này, cả hai hàm sẽ nhận được sự kiện. Xem nội dung thay đổi vùng của một hàm để biết trình tự các lệnh được đề xuất nhằm thay đổi vùng cho hàm.

Nếu hàm của bạn hiện không giống nhau hoặc tính không thay đổi của hàm đó không mở rộng ra ngoài khu vực, thì trước tiên bạn nên triển khai tính không thay đổi trước khi di chuyển hàm đó.

Các đề xuất về khu vực tối ưu sẽ khác nhau tuỳ theo loại điều kiện kích hoạt sự kiện:

Loại trình kích hoạt Đề xuất về khu vực
Cloud Firestore Khu vực gần nhất với vị trí thực thể Cloud Firestore (xem phần tiếp theo)
Cơ sở dữ liệu theo thời gian thực Luôn luôn us-central1
Cloud Storage Khu vực gần nhất với vị trí bộ chứa Cloud Storage (xem phần tiếp theo)
Thiết bị khác Nếu bạn đang tương tác với một thực thể Cơ sở dữ liệu theo thời gian thực, thực thể Cloud Firestore hoặc một bộ chứa Cloud Storage bên trong hàm, thì khu vực đề xuất sẽ giống như khi bạn có một hàm được kích hoạt bởi một trong những tài nguyên đó. Nếu không, hãy sử dụng khu vực mặc định là us-central1. Các hàm được kết nối với tính năng Lưu trữ Firebase có thể ở bất kỳ khu vực nào, nhưng hãy xem tổng quan về dịch vụ lưu trữ không máy chủ để biết các đề xuất.

Chọn khu vực dựa trên vị trí Cloud Firestore và Cloud Storage

Các khu vực có sẵn cho hàm không phải lúc nào cũng khớp chính xác với các khu vực có sẵn trong cơ sở dữ liệu Cloud Firestore và bộ chứa Cloud Storage của bạn.

Xin lưu ý rằng nếu hàm và tài nguyên của bạn (phiên bản cơ sở dữ liệu hoặc bộ chứa Cloud Storage) nằm ở các vị trí khác nhau, thì độ trễ và chi phí thanh toán có thể sẽ cao hơn.

Sau đây là bản đồ ánh xạ các khu vực hỗ trợ hàm gần nhất cho Cloud Firestore và Cloud Storage, trong trường hợp cùng một khu vực không được hỗ trợ:

Khu vực/Đa khu vực đối với Cloud Firestore và Cloud Storage Khu vực gần nhất cho hàm
nam5 hoặc us-central (nhiều vùng) us-central1
eur3 hoặc europe-west (nhiều vùng) europe-west1
europe-west4 (Hà Lan) europe-west1
asia-south1 (Mumbai) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1