Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Mẹo và thủ thuật

Tài liệu này mô tả các phương pháp hay nhất để thiết kế, triển khai, thử nghiệm và triển khai Chức năng đám mây.

Tính đúng đắn

Phần này mô tả các phương pháp hay nhất chung để thiết kế và triển khai các Chức năng đám mây.

Viết hàm iđêan

Các hàm của bạn phải tạo ra cùng một kết quả ngay cả khi chúng được gọi nhiều lần. Điều này cho phép bạn thử lại một lời gọi nếu lệnh gọi trước đó không thành công trong quá trình mã của bạn. Để biết thêm thông tin, hãy xem thử lại các chức năng nền .

Không bắt đầu các hoạt động nền

Hoạt động nền là bất kỳ điều gì xảy ra sau khi chức năng của bạn chấm dứt. Một lệnh gọi hàm kết thúc khi hàm trả về hoặc báo hiệu hoàn thành, chẳng hạn như bằng cách gọi đối số callback trong các hàm nền Node.js. Bất kỳ mã nào chạy sau khi chấm dứt hợp lệ đều không thể truy cập vào CPU và sẽ không đạt được tiến bộ nào.

Ngoài ra, khi một lời gọi tiếp theo được thực thi trong cùng một môi trường, hoạt động nền của bạn sẽ tiếp tục, ảnh hưởng đến lời gọi mới. Điều này có thể dẫn đến hành vi không mong muốn và các lỗi khó chẩn đoán. Việc truy cập mạng sau khi một chức năng kết thúc thường dẫn đến việc các kết nối được đặt lại (mã lỗi ECONNRESET ).

Hoạt động nền thường có thể được phát hiện trong nhật ký từ các lệnh gọi riêng lẻ, bằng cách tìm bất kỳ thứ gì được ghi lại sau dòng nói rằng lệnh gọi đã hoàn tất. Hoạt động nền đôi khi có thể được chôn sâu hơn trong mã, đặc biệt là khi các hoạt động không đồng bộ như lệnh gọi lại hoặc bộ định thời có mặt. Xem lại mã của bạn để đảm bảo tất cả các hoạt động không đồng bộ kết thúc trước khi bạn chấm dứt chức năng.

Luôn xóa các tệp tạm thời

Ổ đĩa cục bộ lưu trữ trong thư mục tạm thời là một hệ thống tệp trong bộ nhớ. Các tệp bạn ghi tiêu tốn bộ nhớ có sẵn cho chức năng của bạn và đôi khi vẫn tồn tại giữa các lần gọi. Không xóa rõ ràng các tệp này cuối cùng có thể dẫn đến lỗi hết bộ nhớ và khởi động nguội sau đó.

Bạn có thể xem bộ nhớ được sử dụng bởi một chức năng riêng lẻ bằng cách chọn bộ nhớ đó trong danh sách các chức năng trong Bảng điều khiển GCP và chọn biểu đồ Sử dụng bộ nhớ .

Không cố gắng ghi bên ngoài thư mục tạm thời và đảm bảo sử dụng các phương pháp độc lập với nền tảng / hệ điều hành để tạo đường dẫn tệp.

Bạn có thể giảm yêu cầu bộ nhớ khi xử lý các tệp lớn hơn bằng cách sử dụng pipelining. Ví dụ: bạn có thể xử lý một tệp trên Cloud Storage bằng cách tạo một luồng đọc, chuyển nó qua một quy trình dựa trên luồng và ghi luồng đầu ra trực tiếp vào Cloud Storage.

Công cụ

Phần này cung cấp hướng dẫn về cách sử dụng các công cụ để triển khai, kiểm tra và tương tác với Chức năng đám mây.

Phát triển địa phương

Việc triển khai hàm mất một chút thời gian, vì vậy việc kiểm tra cục bộ mã của hàm của bạn thường nhanh hơn.

Các nhà phát triển Firebase có thể sử dụng Trình mô phỏng chức năng đám mây CLI của Firebase .

Sử dụng Sendgrid để gửi email

Chức năng đám mây không cho phép các kết nối đi trên cổng 25, vì vậy bạn không thể tạo kết nối không an toàn với máy chủ SMTP. Cách được đề xuất để gửi email là sử dụng SendGrid . Bạn có thể tìm thấy các tùy chọn khác để gửi email trong Gửi email từ hướng dẫn Phiên bản dành cho Google Compute Engine.

Hiệu suất

Phần này mô tả các phương pháp hay nhất để tối ưu hóa hiệu suất.

Sử dụng phụ thuộc một cách khôn ngoan

Bởi vì các hàm là không trạng thái, môi trường thực thi thường được khởi tạo từ đầu (trong thời gian được gọi là khởi động nguội ). Khi khởi động nguội xảy ra, bối cảnh chung của hàm được đánh giá.

Nếu các chức năng của bạn nhập mô-đun, thời gian tải cho các mô-đun đó có thể thêm vào độ trễ yêu cầu trong khi khởi động nguội. Bạn có thể giảm độ trễ này, cũng như thời gian cần thiết để triển khai chức năng của mình, bằng cách tải các phần phụ thuộc một cách chính xác và không tải các phần phụ thuộc mà hàm của bạn không sử dụng.

Sử dụng các biến toàn cục để sử dụng lại các đối tượng trong các lệnh gọi trong tương lai

Không có gì đảm bảo rằng trạng thái của Chức năng đám mây sẽ được duy trì cho các lần gọi trong tương lai. Tuy nhiên, các Hàm đám mây thường tái chế môi trường thực thi của một lệnh gọi trước đó. Nếu bạn khai báo một biến trong phạm vi toàn cục, giá trị của nó có thể được sử dụng lại trong các lần gọi tiếp theo mà không cần phải tính lại.

Bằng cách này, bạn có thể lưu vào bộ nhớ cache các đối tượng có thể tốn kém để tạo lại trên mỗi lần gọi hàm. Di chuyển các đối tượng như vậy từ phần thân chức năng sang phạm vi toàn cầu có thể dẫn đến cải thiện hiệu suất đáng kể. Ví dụ sau chỉ tạo một đối tượng nặng một lần cho mỗi phiên bản hàm và chia sẻ nó trên tất cả các lệnh gọi hàm đến phiên bản đã cho:

console.log('Global scope');
const perInstance = heavyComputation();
const functions = require('firebase-functions');

exports.function = functions.https.onRequest((req, res) => {
    console.log('Function invocation');
    const perFunction = lightweightComputation();

    res.send(`Per instance: ${perInstance}, per function: ${perFunction}`);
});

Điều đặc biệt quan trọng là lưu trữ các kết nối mạng, tham chiếu thư viện và các đối tượng khách API trong phạm vi toàn cầu. Xem Tối ưu hóa mạng để biết ví dụ.

Khởi tạo lười biếng các biến toàn cục

Nếu bạn khởi tạo các biến trong phạm vi toàn cục, mã khởi tạo sẽ luôn được thực thi thông qua lệnh khởi động nguội, làm tăng độ trễ của hàm của bạn. Nếu một số đối tượng không được sử dụng trong tất cả các đường dẫn mã, hãy xem xét việc khởi tạo chúng một cách lười biếng theo yêu cầu:

const functions = require('firebase-functions');
let myCostlyVariable;

exports.function = functions.https.onRequest((req, res) => {
    doUsualWork();
    if(unlikelyCondition()){
        myCostlyVariable = myCostlyVariable || buildCostlyVariable();
    }
    res.status(200).send('OK');
});

Điều này đặc biệt quan trọng nếu bạn xác định một số hàm trong một tệp và các hàm khác nhau sử dụng các biến khác nhau. Trừ khi bạn sử dụng khởi tạo lười biếng, bạn có thể lãng phí tài nguyên trên các biến được khởi tạo nhưng không bao giờ được sử dụng.

Tài nguyên bổ sung

Tìm hiểu thêm về cách tối ưu hóa hiệu suất trong video "Google Cloud Performance Atlas" Chức năng đám mây Thời gian khởi động nguội .