CodeShot

Cloud Functions در مقابل Cloud Run

Cloud Functions یک پلتفرم serverless سبک برای اجرای توابع تکی و رویدادمحور با کد محدود به یک زبان و runtime مشخص است؛ Cloud Run یک پلتفرم serverless مبتنی بر container است که هر تصویر Docker دلخواه (با هر زبان یا فریم‌ورک) را اجرا می‌کند و انعطاف‌پذیری بسیار بیشتری می‌دهد.

ویژگیCloud FunctionsCloud Run
واحد استقرارتابع تکیایمیج Docker کامل
انعطاف runtimeمحدود به runtimeهای پشتیبانی‌شدههر زبان/فریم‌ورکی که در container جا شود
Triggerرویدادمحور (Storage، Pub/Sub، HTTP)HTTP یا رویدادمحور (با Eventarc)
مناسب برایتوابع کوچک تک‌منظورهوب‌سرویس‌های کامل و پیچیده

کِی از Cloud Functions استفاده کنیم؟

برای توابع کوچک و تک‌منظوره که به یک رویداد پاسخ می‌دهند (مثل تغییر در Cloud Storage یا پیام Pub/Sub) و نیازی به کنترل محیط اجرا ندارید، از Cloud Functions استفاده کنید.

کِی از Cloud Run استفاده کنیم؟

وقتی برنامه شما یک وب‌سرویس کامل است، به runtime یا کتابخانه‌های سیستمی خاصی نیاز دارد یا می‌خواهید همان container را بین محیط‌های مختلف (لوکال، staging، production) یکسان اجرا کنید، از Cloud Run استفاده کنید.

مثال Cloud Functions

import functions_framework

@functions_framework.cloud_event
def process_upload(cloud_event):
    file_name = cloud_event.data["name"]
    resize_image(file_name)

مثال Cloud Run

FROM node:20-slim
COPY . .
RUN npm install
CMD ["node", "server.js"]
# Deploy: gcloud run deploy my-api --source .

اشتباه رایج

تلاش برای اجرای یک برنامه پیچیده چندسرویسی یا با وابستگی‌های سیستمی خاص روی Cloud Functions که محدودیت‌های runtime آن اجازه نمی‌دهد؛ در مقابل، استفاده از Cloud Run برای یک تابع بسیار ساده و تک‌رویدادی، سربار ساخت و نگه‌داری Dockerfile را بدون دلیل کافی اضافه می‌کند.

جمع‌بندی

تابع ساده و رویدادمحور بدون نیاز به container سفارشی → Cloud Functions؛ هر برنامه‌ای که در یک container دلخواه جا می‌شود → Cloud Run.