Cloud Functions در مقابل Cloud Run
Cloud Functions یک پلتفرم serverless سبک برای اجرای توابع تکی و رویدادمحور با کد محدود به یک زبان و runtime مشخص است؛ Cloud Run یک پلتفرم serverless مبتنی بر container است که هر تصویر Docker دلخواه (با هر زبان یا فریمورک) را اجرا میکند و انعطافپذیری بسیار بیشتری میدهد.
| ویژگی | Cloud Functions | Cloud 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.
