Quản lý chức năng


Bạn có thể triển khai, xóa và sửa đổi các hàm bằng lệnh Firebase CLI hoặc bằng cách đặt các tùy chọn thời gian chạy trong mã nguồn hàm của mình.

Triển khai chức năng

Để triển khai các chức năng, hãy chạy lệnh Firebase CLI này:

firebase deploy --only functions

Theo mặc định, Firebase CLI triển khai tất cả các chức năng bên trong nguồn của bạn cùng một lúc. Nếu dự án của bạn chứa nhiều hơn 5 hàm, chúng tôi khuyên bạn nên sử dụng cờ --only với tên hàm cụ thể để chỉ triển khai các hàm mà bạn đã chỉnh sửa. Triển khai các chức năng cụ thể theo cách này sẽ tăng tốc quá trình triển khai và giúp bạn tránh bị áp dụng hạn mức triển khai. Ví dụ:

firebase deploy --only functions:addMessage,functions:makeUppercase

Khi triển khai số lượng lớn chức năng, bạn có thể vượt quá hạn ngạch tiêu chuẩn và nhận được thông báo lỗi HTTP 429 hoặc 500. Để giải quyết vấn đề này, hãy triển khai các chức năng theo nhóm từ 10 người trở xuống.

Xem tài liệu tham khảo Firebase CLI để biết danh sách đầy đủ các lệnh có sẵn.

Theo mặc định, Firebase CLI tìm mã nguồn trong thư mục functions/ . Nếu muốn, bạn có thể sắp xếp các hàm trong cơ sở mã hoặc nhiều bộ tệp.

Xóa chức năng

Bạn có thể xóa các chức năng đã triển khai trước đó theo những cách sau:

  • rõ ràng trong Firebase CLI với functions:delete
  • rõ ràng trong bảng điều khiển Google Cloud .
  • ngầm bằng cách loại bỏ chức năng khỏi nguồn trước khi triển khai.

Tất cả các thao tác xóa đều nhắc bạn xác nhận trước khi xóa chức năng khỏi sản xuất.

Việc xóa hàm rõ ràng trong Firebase CLI hỗ trợ nhiều đối số cũng như các nhóm hàm và cho phép bạn chỉ định một hàm đang chạy trong một vùng cụ thể. Ngoài ra, bạn có thể ghi đè lời nhắc xác nhận.

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
# Delete more than one function
firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group.
firebase functions:delete groupA
# Bypass the confirmation prompt.
firebase functions:delete myFunction --force

Với tính năng xóa hàm ngầm, firebase deploy sẽ phân tích nguồn của bạn và xóa khỏi quá trình sản xuất bất kỳ hàm nào đã bị xóa khỏi tệp.

Sửa đổi tên, vùng hoặc trình kích hoạt của chức năng

Nếu bạn đang đổi tên hoặc thay đổi vùng hoặc kích hoạt các chức năng đang xử lý lưu lượng truy cập sản xuất, hãy làm theo các bước trong phần này để tránh mất sự kiện trong quá trình sửa đổi. Trước khi bạn làm theo các bước này, trước tiên hãy đảm bảo rằng hàm của bạn là idempotent , vì cả phiên bản mới và phiên bản cũ của hàm sẽ chạy cùng lúc trong quá trình thay đổi.

Đổi tên một chức năng

Để đổi tên một hàm, hãy tạo một phiên bản đã đổi tên mới của hàm trong nguồn của bạn rồi chạy hai lệnh triển khai riêng biệt. Lệnh đầu tiên triển khai hàm mới được đặt tên và lệnh thứ hai sẽ xóa phiên bản đã triển khai trước đó. Ví dụ: nếu bạn có một webhook được kích hoạt HTTP mà bạn muốn đổi tên, hãy sửa lại mã như sau:

Node.js

// before
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhook = onRequest((req, res) => {
    res.send("Hello");
});

// after
const {onRequest}  = require('firebase-functions/v2/https');

exports.webhookNew = onRequest((req, res) => {
    res.send("Hello");
});

Python

# before
from firebase_functions import https_fn

@https_fn.on_request()
def webhook(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

# after
from firebase_functions import https_fn

@https_fn.on_request()
def webhook_new(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

Sau đó chạy các lệnh sau để triển khai chức năng mới:

# Deploy new function
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both functions are running

# Delete webhook
firebase functions:delete webhook

Thay đổi vùng hoặc các vùng của hàm

Nếu bạn đang thay đổi các vùng được chỉ định cho một chức năng đang xử lý lưu lượng sản xuất, bạn có thể ngăn ngừa mất sự kiện bằng cách thực hiện các bước sau theo thứ tự:

  1. Đổi tên hàm và thay đổi vùng hoặc các vùng của nó theo ý muốn.
  2. Triển khai hàm đã được đổi tên, dẫn đến việc tạm thời chạy cùng một mã ở cả hai nhóm vùng.
  3. Xóa chức năng trước đó.

Ví dụ: nếu bạn có một hàm được kích hoạt bởi Cloud Firestore hiện nằm trong vùng hàm mặc định của us-central1 và bạn muốn di chuyển nó sang asia-northeast1 thì trước tiên bạn cần sửa đổi mã nguồn của mình để đổi tên hàm và sửa lại khu vực.

Node.js

// before
exports.firestoreTrigger = onDocumentCreated(
  "my-collection/{docId}",
  (event) => {},
);

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

Mã cập nhật phải chỉ định bộ lọc sự kiện chính xác (trong trường hợp này là document ) cùng với khu vực. Xem vị trí của Cloud Functions để biết thêm thông tin.

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

Sau đó triển khai bằng cách chạy:

firebase deploy --only functions:firestoreTriggerAsia

Hiện tại có hai hàm giống hệt nhau đang chạy: firestoreTrigger đang chạy trong us-central1firestoreTriggerAsia đang chạy trong asia-northeast1 .

Sau đó, xóa firestoreTrigger :

firebase functions:delete firestoreTrigger

Bây giờ chỉ có một chức năng - firestoreTriggerAsia , đang chạy ở asia-northeast1 .

Thay đổi loại kích hoạt của hàm

Khi phát triển Chức năng đám mây để triển khai Firebase theo thời gian, bạn có thể cần thay đổi loại trình kích hoạt của chức năng vì nhiều lý do. Ví dụ: bạn có thể muốn thay đổi từ một loại sự kiện Cơ sở dữ liệu thời gian thực Firebase hoặc Cloud Firestore sang loại khác.

Không thể thay đổi loại sự kiện của hàm chỉ bằng cách thay đổi mã nguồn và chạy firebase deploy . Để tránh lỗi, hãy thay đổi loại trình kích hoạt của hàm bằng quy trình sau:

  1. Sửa đổi mã nguồn để bao gồm một hàm mới với loại trình kích hoạt mong muốn.
  2. Triển khai chức năng, dẫn đến việc chạy tạm thời cả chức năng cũ và chức năng mới.
  3. Xóa rõ ràng chức năng cũ khỏi sản xuất bằng cách sử dụng Firebase CLI.

Ví dụ: nếu bạn có một hàm được kích hoạt khi một đối tượng bị xóa, nhưng sau đó bạn đã bật lập phiên bản đối tượng và thay vào đó muốn đăng ký sự kiện lưu trữ, thì trước tiên hãy đổi tên hàm và chỉnh sửa nó để có loại trình kích hoạt mới.

Node.js

// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");

exports.objectDeleted = onObjectDeleted((event) => {
    // ...
});

// after
const {onObjectArchived} = require("firebase-functions/v2/storage");

exports.objectArchived = onObjectArchived((event) => {
    // ...
});

Python

# before
from firebase_functions import storage_fn

@storage_fn.on_object_deleted()
def object_deleted(event):
  # ...

# after 
from firebase_functions import storage_fn

@storage_fn.on_object_archived()
def object_archived(event):
  # ...

Sau đó chạy các lệnh sau để tạo hàm mới trước khi xóa hàm cũ:

# Create new function objectArchived
firebase deploy --only functions:objectArchived

# Wait until deployment is done; now both objectDeleted and objectArchived are running

# Delete objectDeleted
firebase functions:delete objectDeleted

Đặt tùy chọn thời gian chạy

Cloud Functions cho Firebase cho phép bạn chọn các tùy chọn thời gian chạy như phiên bản thời gian chạy Node.js và thời gian chờ cho mỗi chức năng, phân bổ bộ nhớ và các phiên bản hàm tối thiểu/tối đa.

Cách tốt nhất là bạn nên đặt các tùy chọn này (ngoại trừ phiên bản Node.js) trên đối tượng cấu hình bên trong mã hàm. Đối tượng RuntimeOptions này là nguồn thông tin chính xác cho các tùy chọn thời gian chạy của hàm của bạn và sẽ ghi đè các tùy chọn được đặt thông qua bất kỳ phương thức nào khác (chẳng hạn như qua bảng điều khiển Google Cloud hoặc gcloud CLI).

Nếu quy trình phát triển của bạn liên quan đến việc cài đặt thủ công các tùy chọn thời gian chạy thông qua bảng điều khiển Google Cloud hoặc gcloud CLI và bạn không muốn các giá trị này bị ghi đè trong mỗi lần triển khai, hãy đặt tùy chọn preserveExternalChanges thành true . Với tùy chọn này được đặt thành true , Firebase sẽ hợp nhất các tùy chọn thời gian chạy được đặt trong mã của bạn với cài đặt của phiên bản hàm hiện được triển khai với mức độ ưu tiên sau:

  1. Tùy chọn được đặt trong mã chức năng: ghi đè các thay đổi bên ngoài.
  2. Tùy chọn được đặt thành RESET_VALUE trong mã chức năng: ghi đè các thay đổi bên ngoài bằng giá trị mặc định.
  3. Tùy chọn không được đặt trong mã chức năng, nhưng được đặt trong chức năng hiện được triển khai: sử dụng tùy chọn được chỉ định trong chức năng được triển khai.

Việc sử dụng tùy chọn preserveExternalChanges: true không được khuyến nghị cho hầu hết các trường hợp vì mã của bạn sẽ không còn là nguồn chính xác đầy đủ cho các tùy chọn thời gian chạy cho các hàm của bạn nữa. Nếu bạn sử dụng nó, hãy kiểm tra bảng điều khiển Google Cloud hoặc sử dụng gcloud CLI để xem cấu hình đầy đủ của chức năng.

Đặt phiên bản Node.js

SDK Firebase dành cho Chức năng đám mây cho phép lựa chọn thời gian chạy Node.js. Bạn có thể chọn chạy tất cả các chức năng trong một dự án riêng trên môi trường thời gian chạy tương ứng với một trong các phiên bản Node.js được hỗ trợ sau:

  • Node.js 20 (xem trước)
  • Node.js 18
  • Node.js 16
  • Node.js 14

Để đặt phiên bản Node.js:

Bạn có thể đặt phiên bản trong trường engines trong tệp package.json được tạo trong thư mục functions/ trong quá trình khởi tạo. Ví dụ: để chỉ sử dụng phiên bản 18, hãy chỉnh sửa dòng này trong package.json :

  "engines": {"node": "18"}

Nếu bạn đang sử dụng trình quản lý gói Sợi hoặc có các yêu cầu cụ thể khác cho trường engines , thay vào đó, bạn có thể đặt thời gian chạy cho SDK Firebase cho Chức năng đám mây trong firebase.json :

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
    }
  }

CLI sử dụng giá trị được đặt trong firebase.json thay vì bất kỳ giá trị hoặc phạm vi nào mà bạn đặt riêng trong package.json .

Nâng cấp thời gian chạy Node.js của bạn

Để nâng cấp thời gian chạy Node.js của bạn:

  1. Đảm bảo dự án của bạn nằm trong gói định giá Blaze .
  2. Đảm bảo bạn đang sử dụng Firebase CLI v11.18.0 trở lên.
  3. Thay đổi giá trị engines trong tệp package.json được tạo trong thư mục functions/ của bạn trong quá trình khởi tạo. Ví dụ: nếu bạn đang nâng cấp từ phiên bản 16 lên phiên bản 18, mục nhập sẽ có dạng như sau: "engines": {"node": "18"}
  4. Theo tùy chọn, hãy kiểm tra các thay đổi của bạn bằng Bộ mô phỏng cục bộ Firebase .
  5. Triển khai lại tất cả các chức năng.

Đặt phiên bản Python

SDK Firebase dành cho Cloud Functions phiên bản 12.0.0 trở lên cho phép lựa chọn thời gian chạy Python. Đặt phiên bản thời gian chạy trong firebase.json như được hiển thị:

  {
    "functions": {
      "runtime": "python310" // or python311
    }
  }

Kiểm soát hành vi mở rộng quy mô

Theo mặc định, Cloud Functions cho Firebase chia tỷ lệ số lượng phiên bản đang chạy dựa trên số lượng yêu cầu đến, có khả năng giảm tỷ lệ xuống 0 phiên bản trong thời gian lưu lượng truy cập giảm. Tuy nhiên, nếu ứng dụng của bạn yêu cầu giảm độ trễ và bạn muốn giới hạn số lần khởi động nguội, thì bạn có thể thay đổi hành vi mặc định này bằng cách chỉ định số lượng phiên bản vùng chứa tối thiểu để được giữ ấm và sẵn sàng phân phát yêu cầu.

Tương tự, bạn có thể đặt số lượng tối đa để giới hạn tỷ lệ phiên bản nhằm đáp ứng các yêu cầu đến. Sử dụng cài đặt này như một cách để kiểm soát chi phí của bạn hoặc để giới hạn số lượng kết nối tới dịch vụ hỗ trợ, chẳng hạn như cơ sở dữ liệu.

Bằng cách sử dụng các cài đặt này cùng với cài đặt đồng thời theo từng phiên bản (mới ở thế hệ 2), bạn có thể kiểm soát và điều chỉnh hành vi điều chỉnh tỷ lệ cho các hàm của mình. Bản chất của ứng dụng và chức năng của bạn sẽ xác định cài đặt nào hiệu quả nhất về mặt chi phí và sẽ mang lại hiệu suất tốt nhất.

Đối với một số ứng dụng có lưu lượng truy cập thấp, tùy chọn CPU thấp hơn không có tính năng đa đồng thời là tối ưu. Đối với những trường hợp khác, nơi khởi động nguội là một vấn đề nghiêm trọng, việc đặt phiên bản tối thiểu và đồng thời cao có nghĩa là một tập hợp phiên bản luôn được giữ ấm để xử lý lưu lượng truy cập tăng đột biến lớn.

Đối với các ứng dụng có quy mô nhỏ hơn nhận được rất ít lưu lượng truy cập, việc đặt phiên bản tối đa thấp với độ đồng thời cao có nghĩa là ứng dụng có thể xử lý các đợt lưu lượng truy cập mà không phải chịu chi phí quá cao. Tuy nhiên, hãy nhớ rằng khi số lượng phiên bản tối đa được đặt quá thấp, các yêu cầu có thể bị loại bỏ khi đạt đến mức trần.

Cho phép yêu cầu đồng thời

Trong Cloud Functions cho Firebase (thế hệ 1), mỗi phiên bản có thể xử lý một yêu cầu cùng một lúc, do đó, hành vi chia tỷ lệ chỉ được đặt với cài đặt phiên bản tối thiểu và tối đa. Ngoài việc kiểm soát số lượng phiên bản, trong Cloud Functions cho Firebase (thế hệ 2), bạn có thể kiểm soát số lượng yêu cầu mà mỗi phiên bản có thể phân phát cùng lúc bằng tùy chọn concurrency thời. Giá trị mặc định cho đồng thời là 80, nhưng bạn có thể đặt nó thành bất kỳ số nguyên nào trong khoảng từ 1 đến 1000.

Các chức năng có cài đặt đồng thời cao hơn có thể hấp thụ lưu lượng tăng đột biến mà không cần khởi động nguội vì mỗi phiên bản có thể có một số khoảng trống. Nếu một phiên bản được cấu hình để xử lý tối đa 50 yêu cầu đồng thời nhưng hiện chỉ xử lý 25 yêu cầu, thì phiên bản đó có thể xử lý lượng tăng đột biến 25 yêu cầu bổ sung mà không yêu cầu một phiên bản mới để khởi động nguội. Ngược lại, với cài đặt đồng thời chỉ là 1, số yêu cầu tăng đột biến đó có thể dẫn đến 25 lần khởi động nguội.

Kịch bản đơn giản hóa này thể hiện tiềm năng đạt được hiệu quả của việc sử dụng đồng thời. Trong thực tế, hành vi mở rộng quy mô để tối ưu hóa hiệu quả và giảm thiểu khởi động nguội bằng tính năng đồng thời phức tạp hơn. Tính đồng thời trong Chức năng đám mây cho Firebase thế hệ thứ 2 được cung cấp bởi Cloud Run và tuân theo các quy tắc tự động điều chỉnh phiên bản vùng chứa của Cloud Run.

Khi thử nghiệm cài đặt đồng thời cao hơn trong Chức năng đám mây cho Firebase (thế hệ 2), hãy ghi nhớ những điều sau:

  • Cài đặt đồng thời cao hơn có thể yêu cầu CPU và RAM cao hơn để có hiệu suất tối ưu cho đến khi đạt đến giới hạn thực tế. Ví dụ: một chức năng xử lý hình ảnh hoặc video nặng có thể thiếu tài nguyên để xử lý 1000 yêu cầu đồng thời, ngay cả khi cài đặt CPU và RAM của nó được tối đa hóa.
  • Vì Cloud Functions cho Firebase (thế hệ 2) được cung cấp bởi Cloud Run nên bạn cũng có thể tham khảo hướng dẫn của Google Cloud để tối ưu hóa tính đồng thời .
  • Đảm bảo kiểm tra kỹ lưỡng tính đa đồng thời trong môi trường thử nghiệm trước khi chuyển sang đa đồng thời trong sản xuất.

Giữ ấm một số lượng tối thiểu các trường hợp

Bạn có thể đặt số phiên bản tối thiểu cho một hàm trong mã nguồn. Ví dụ: hàm này đặt tối thiểu 5 trường hợp để giữ ấm:

Node.js

const { onCall } = require("firebase-functions/v2/https");

exports.getAutocompleteResponse = onCall(
  {
    // Keep 5 instances warm for this latency-critical function
    minInstances: 5,
  },
  (event) => {
    // Autocomplete user’s search term
  }
);

Python

@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:

Dưới đây là một số điều cần cân nhắc khi đặt giá trị phiên bản tối thiểu:

  • Nếu Cloud Functions cho Firebase mở rộng quy mô ứng dụng của bạn cao hơn cài đặt của bạn, thì bạn sẽ gặp phải tình trạng khởi động nguội cho từng phiên bản trên ngưỡng đó.
  • Khởi động nguội có ảnh hưởng nghiêm trọng nhất đối với các ứng dụng có lưu lượng truy cập tăng đột biến. Nếu ứng dụng của bạn có lưu lượng truy cập tăng đột biến và bạn đặt giá trị đủ cao để giảm số lần khởi động nguội mỗi lần tăng lưu lượng truy cập, thì bạn sẽ thấy độ trễ giảm đáng kể. Đối với các ứng dụng có lưu lượng truy cập liên tục, khởi động nguội không có khả năng ảnh hưởng nghiêm trọng đến hiệu suất.
  • Việc đặt các phiên bản tối thiểu có thể có ý nghĩa đối với môi trường sản xuất nhưng thường nên tránh trong môi trường thử nghiệm. Để mở rộng quy mô về 0 trong dự án thử nghiệm nhưng vẫn giảm thời gian khởi động nguội trong dự án sản xuất, bạn có thể đặt giá trị phiên bản tối thiểu trong cấu hình được tham số hóa của mình:

    Node.js

    const functions = require('firebase-functions');
    const { defineInt, defineString } = require('firebase-functions/params');
    
    // Define some parameters
    const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
    const welcomeMessage = defineString('WELCOME_MESSAGE');
    
    // To use configured parameters inside the config for a function, provide them 
    // directly. To use them at runtime, call .value() on them.
    export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
      (req, res) => {
        res.send(`${welcomeMessage.value()}! I am a function.`);
      }
    );
    

    Python

    MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES")
    WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE")
    
    @https_fn.on_request(min_instances=MIN_INSTANCES.value())
    def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response:
        return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
    

Giới hạn số lượng phiên bản tối đa cho một hàm

Bạn có thể đặt giá trị cho các phiên bản tối đa trong mã nguồn hàm. Ví dụ: hàm này đặt giới hạn 100 phiên bản để không làm quá tải cơ sở dữ liệu kế thừa giả định:

Node.js

const { onMessagePublished } = require("firebase-functions/v2/pubsub");

exports.mirrorevents = onMessagePublished(
  { topic: "topic-name", maxInstances: 100 },
  (event) => {
    // Connect to legacy database
  }
);

Python

@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
#  Connect to legacy database

Nếu một hàm HTTP được mở rộng đến giới hạn phiên bản tối đa, các yêu cầu mới sẽ được xếp hàng đợi trong 30 giây và sau đó bị từ chối với mã phản hồi là 429 Too Many Requests nếu lúc đó không có phiên bản nào.

Để tìm hiểu thêm về các phương pháp hay nhất để sử dụng cài đặt phiên bản tối đa, hãy xem các phương pháp hay nhất này để đặt phiên bản tối đa .

Đặt thời gian chờ và phân bổ bộ nhớ

Trong một số trường hợp, các hàm của bạn có thể có các yêu cầu đặc biệt về giá trị thời gian chờ dài hoặc phân bổ bộ nhớ lớn. Bạn có thể đặt các giá trị này trong bảng điều khiển Google Cloud hoặc trong mã nguồn hàm (chỉ Firebase).

Để đặt phân bổ bộ nhớ và thời gian chờ trong mã nguồn hàm, hãy sử dụng các tùy chọn chung cho bộ nhớ và số giây hết thời gian chờ để tùy chỉnh máy ảo đang chạy các hàm của bạn. Ví dụ: chức năng Lưu trữ đám mây này sử dụng 1GiB bộ nhớ và hết thời gian chờ sau 300 giây:

Node.js

exports.convertLargeFile = onObjectFinalized({
  timeoutSeconds: 300,
  memory: "1GiB",
}, (event) => {
  // Do some complicated things that take a lot of memory and time
});

Python

@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.

Giá trị tối đa cho số giây hết thời gian chờ là 540 hoặc 9 phút.

Để đặt phân bổ bộ nhớ và thời gian chờ trong bảng điều khiển Google Cloud:

  1. Trong bảng điều khiển Google Cloud, chọn Chức năng đám mây cho Firebase từ menu bên trái.
  2. Chọn một chức năng bằng cách nhấp vào tên của nó trong danh sách chức năng.
  3. Nhấp vào biểu tượng Chỉnh sửa ở menu trên cùng.
  4. Chọn phân bổ bộ nhớ từ menu thả xuống có nhãn Bộ nhớ được phân bổ .
  5. Nhấp vào Thêm để hiển thị các tùy chọn nâng cao và nhập số giây vào hộp văn bản Hết giờ .
  6. Nhấn Lưu để cập nhật chức năng.

Ghi đè mặc định của CPU

Bộ nhớ được phân bổ tối đa 2GB, mỗi chức năng trong Cloud Functions cho Firebase (thế hệ 2) mặc định là một CPU, sau đó tăng lên 2 CPU cho 4 và 8GB. Lưu ý rằng điều này khác biệt đáng kể so với hành vi mặc định thế hệ 1 theo những cách có thể dẫn đến chi phí cao hơn một chút cho các chức năng có bộ nhớ thấp như được trình bày trong bảng sau:

RAM được phân bổ CPU mặc định phiên bản 1 (phân số) CPU mặc định phiên bản 2 Giá tăng mỗi ms
128MB 12/1 1 10,5 lần
256MB 1/6 1 5,3 lần
512MB 1/3 1 2,7 lần
1GB 12/7 1 1,6 lần
2GB 1 1 1x
4GB 2 2 1x
8GB 2 2 1x
16GB không có 4 không có

Nếu bạn thích hành vi thế hệ thứ nhất cho các chức năng thế hệ thứ 2 của mình, hãy đặt mặc định thế hệ thứ nhất làm tùy chọn chung:

Node.js

// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });

Python

# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")

Đối với các chức năng sử dụng nhiều CPU, thế hệ thứ 2 mang lại sự linh hoạt trong việc định cấu hình CPU bổ sung. Bạn có thể tăng CPU trên cơ sở từng chức năng như sau:

Node.js

// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
  // computer vision goes here
});

Python

# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here