GH GambleHub

توابع Serverless و شروع سرد

1) شروع سرد چیست و چرا رخ می دهد

شروع سرد - تأخیر اضافی هنگام ایجاد یک جداسازی اجرایی جدید (sandbox/container/micro-VM) قبل از پردازش رویداد. نوار نقاله معمولی:

1. تخصیص متوسط (ظرف/میکرو VM، بارگذاری در زمان اجرا).

2. VPC/ENI priming، اسرار، فایل ها، پیکربندی.

3. مقدار دهی اولیه کد (واردات ماژول ها، اتصال به پایگاه داده، بارگذاری مدل ها).

4. اعدام دستيار دار.

شروع گرم (استفاده مجدد) پرش مراحل 1-3. احتمال شروع سرد در قله افزایش می یابد، پس از خرابی، با افزایش موازی و با به روز رسانی کد/پیکربندی.

2) چگونه اندازه گیری و هدف (SLO)

معیارها: «init _ duration» (مقداردهی اولیه)، «duration _ total»، «share of cold starts»، تأخیر p95/p99، خطای اتصال به وابستگیها پس از خرابی.
حذف تله متری: سیاهههای مربوط به پلت فرم + برچسب های خود (به عنوان مثال، 'سرد = درست/نادرست' اگر یک 'context وجود دارد. «ColdStart» یا پرچم خود را در بسته شدن استاتیک).
اهداف SLO (به عنوان مثال): API «ورود» p95 ≤ 200 ms، سهم سرد ≤ 3٪ ؛ مشاغل پس زمینه - p95 ≤ 1. برای مسیرهای «پول» - جداگانه، دقیق تر.

3) اهرم های اصلی کاهش شروع سرد

3. 1 کنترل مختصر و گرمایش

فراهم همزمانی/حداقل موارد: دارای N محیط های گرم. برای گرفتن بحرانی استفاده کنید.
Warmers/warm-up: تماس های برنامه ریزی شده (cron/scheduler) برای گرم نگه داشتن کارگران. این کار را عاقلانه انجام دهید (منطقه، زمان، بار).
بافر پشت سر هم: افزایش حد همزمانی در پیش قبل از قله انتظار می رود.

3. 2 بسته بندی و وابستگی

کوچک استقرار مصنوع: درخت تکان دادن، '-- فقط تولید' وابستگی، لایه (AWS لایه) برای libs بزرگ است.
Lazy-init: ماژول های سنگین را در اولین دسترسی وارد کنید. اتصالات تنبل باز است.
منابع گرم: SDK حافظه پنهان/مشتریان اتصال در محدوده جهانی برای استفاده مجدد در شروع گرم.

3. 3 شبکه و VPC

بدون VPC برای توابع که نیازی به حریم خصوصی ندارند (در غیر این صورت ENI-attach ده ها تا صدها میلی ثانیه را اضافه می کند).
در صورت نیاز به VPC، از حالت اقتصادی VPC ارائه دهنده (استخرهای ENI/بهینه سازی)، پروکسی پایگاه داده (RDS Proxy/Cloud SQL Auth Proxy) و جمع آوری اتصال استفاده کنید.

3. 4 زبان و زمان اجرا

گره ها JS/برو شروع سریع ترین; پایتون - معمولا سریع اما حساس به واردات بزرگ ؛ جاوا/دات نت بدون GraalVM/AOT و پروفایل سازی سنگین تر است.
برای JVM، SnapStart/CRaC/Graal Native را در نظر بگیرید ؛ برای. NET - کمرنگ خود شامل.

3. 5 راه اندازی و دولت

مقداردهی اولیه گران قیمت را در قلاب مقداردهی اولیه (init phase) قرار دهید و نه در مسیر درخواست.
استفاده از بارگذاری بر روی تقاضا از configs/secrets با حافظه پنهان محلی (TTL).
وضعیت کاربر را در حافظه ذخیره نکنید - فقط سیگنال ها/اتصالات کش.

4) الگوهای معماری که تاثیر شروع سرد را کاهش می دهد

4. 1 Asynchron و صف

ما درخواست → validate → قرار دادن آن در صف/اتوبوس (ذخیره سازی SQS/PubSub/صف) → پاسخ 202/Accepted → پردازش آن را با پس زمینه.
مناسب برای عملیات غیر تعاملی (پرداخت، گزارش، محاسبات سنگین).

4. 2 پیش محاسبه/پیش کش

تولید دسترسی/دایرکتوری ها/ویژگی های پرچم در پیش توسط عوامل (CRON/رویدادها) و ذخیره سازی در KV/کش/لبه.

4. 3 فن/فن در

ما یک عملیات طولانی را به چندین عملکرد کوتاه تقسیم می کنیم (Map/Reduce-like) → خطر کمتری از وقفه و تکرار سرما.

4. 4 لبه بارگیری

ساده ترین چک ها (JWT/HMAC، geo-redirect، antiboot) در لبه (Workers/Functions @ Edge) انجام می شود تا RTT را ذخیره کرده و منبع را تخلیه کند.

5) تمرین: پیکربندی و تکنیک ها

5. 1 AWS لامبدا (ارائه شده + RDS پروکسی)

hcl
Terraform sketch: enable provisioned concurrency on the sales version of the resource "aws_lambda_provisioned_concurrency_config" "api" {
function_name = aws_lambda_function. api. function_name qualifier   = aws_lambda_alias. prod. name provisioned_concurrent_executions = 20
}

RDS Proxy for connection pool "aws_db_proxy" "rds_proxy" {
name          = "pg-proxy"
engine_family     = "POSTGRESQL"
idle_client_timeout  = 1800 require_tls      = true
}
گره ها js (مقدار دهی اولیه تنبل و استفاده مجدد):
js let pgClient ;//reuse between warm runs let cold = true;

exports. handler = async (event, ctx) => {
const isCold = cold; cold = false;
if (!pgClient) {
const { Client } = await import('pg');     // lazy import pgClient = new Client({ host: process. env. PG_PROXY, ssl: true });
await pgClient. connect();
}
const t0 = Date. now();
const data = await pgClient. query('select 1');
return {
statusCode: 200,
headers: { 'x-cold-start': String(isCold), 'x-elapsed-ms': String(Date. now()-t0) },
body: JSON. stringify({ ok: true })
};
};

5. 2 GCP ابر اجرا/توابع ابر (دقیقه موارد)

yaml
Cloud Run service. yaml apiVersion: serving. knative. dev/v1 kind: Service metadata: { name: api }
spec:
template:
metadata:
annotations:
autoscaling. knative. dev/minScale: "5" # keep warm run containers. googleapis. com/cpu-throttling: "false"
spec:
containerConcurrency: 80 containers:
- image: gcr. io/proj/api:latest env:
- { name: DB_HOST, value: "10. 0. 0. 5" }

5. 3 توابع لاجوردی (AlwaysOn/PreWarm)

برنامه های حق بیمه/الاستیک با AlwaysOn ؛ نمونه های پیش گرم شده ≥ پیش بینی همزمان p95.

6) زمان، عقب نشینی، مهلت

مهلت کلی (سمت مشتری) را از طریق هدر ('x-deadline-ms '/' grpc-timeout') منتقل کنید، زمان «per-hop timeout» را در داخل تابع کوتاه کنید.
تکرار فقط برای عملیات idempointent ؛ استفاده از Idempotency-کلید و deduplication.
برای API جلو - مصون سازی (درخواست تکراری پس از P90) و قطع کننده مدار برای وابستگی های از راه دور.

7) کار با پایگاه های داده/کش/اسرار

استخر/پروکسی (RDS پروکسی/ابر SQL پروکسی/pgBouncer) به جای هزاران نفر از اتصالات کوتاه.
راز TTL کوتاه + در حافظه پنهان با به روز رسانی پس زمینه.
Cache (Redis/Memcached/KV): بارگذاری دایرکتوری های «سنگین» در init، اما با محدودیت زمانی.

8) سازمان کد و مونتاژ

گرداننده های جداگانه برای موارد استفاده باریک ؛ یک «ضخیم» بسته نرم افزاری = init طولانی.
ESBuild/Rollup: استفاده نشده را حذف کنید، فقط بحرانی را ترکیب کنید.
لایه ها/افزونه ها - برای libs های بزرگ (مدل های OpenSSL، SDK) برای استفاده مجدد از حافظه پنهان ارائه دهنده.

9) تست و شبیه سازی پیک

مصنوعی «سرد» شروع می شود: به زور خاموش موارد دقیقه و رانندگی ترافیک موازی در مراحل.
A/B: مقایسه سهم سرد، p95، خطای اتصال به DB/اسرار، هزینه ها.
GameDay: حداکثر بار × 2 از تمام وقت بالا، گرم کردن.

10) هزینه (FinOps)

Min instances/provisioned concurrency cost money - فقط برای مسیرهای داغ فعال است.
کاهش زمان اجرا: کش، زمان کوتاه، اجتناب از SDK های غیر ضروری.
در نظر بگیرید خروج (تماس با API های خارجی) و ورود به سیستم (حجم سیاهههای مربوط به سرعت در قله سرد رشد می کند).

11) ضد گلوله

یک گرداننده یکپارچه با دهها مگابایت وابستگی.
اتصال اجباری به پایگاه داده در هر تماس (بدون استفاده مجدد/پروکسی).
VPC برای تمام توابع «فقط در مورد».
زمانهای طولانی و عقب نشینی های کور → «دم» و نوشتن فانتوم.
گرم کردن «همه چیز در یک ردیف» در اطراف ساعت.
مقدار اولیه مخفی در مسیر درخواست (lentice init> 100 ms - انتقال به init/cache).

12) مشخصات iGaming/امور مالی

مسیرهای پول (سپرده ها/برداشت ها): موارد ارائه شده/دقیقه، SLO های جداگانه، محدودیت دقیق زمان و تکرار (idempotency اجباری است).
KYC/PSP: API های خارجی ناپایدار - بسته بندی در صف + کارگر، در جلو - 202/نظرسنجی/webhook.
تنظیم مقررات و ممیزی: سیاهههای مربوط تغییر ناپذیر (WORM)، ورود رویداد ورودی با 'Idempotency-Key'، همبستگی 'trace _ id'.
اقامت داده ها: استقرار توابع که PII را در حساب ها/پروژه های منطقه ای پردازش می کنند ؛ بدون مخزن لبه با PII.

13) تولید لیست آمادگی

  • SLI/SLO تعریف شده: p95/p99، کسر سرد، اهداف مسیر.
  • موارد ارائه شده/دقیقه در توابع بحرانی فعال می شوند ؛ پیش بینی مختصر.
  • بسته نرم افزاری به حداقل می رسد ؛ چهره های سنگین به لایه ها منتقل می شوند ؛ lazy-import/مقداردهی اولیه.
  • استفاده مجدد از مشتریان SDK/DB ؛ RDS/SQL پروکسی پیکربندی شده است. استخر اتصال
  • VPC فقط در صورت لزوم ؛ ENI/پروکسی بهینه سازی شده ؛ اسرار از طریق مدیر + کش TTL محلی.
  • زمان بندی/مهلت/عقب نشینی: عقب نشینی + jitter ؛ فقط تکرار میشود.
  • Synthetics «سرد» + آزمون بار ؛ هشدار برای رشد در سهم سرد و p99.
  • Runbooks: چگونه به افزایش provisioned، چگونه به تغییر minScale، چگونه به شامل تخریب.
  • برای iGaming: جداگانه SLO/داشبورد «راه پول»، Idempotency-کلید، حسابرسی WORM.

14) TL ؛ دکتر متخصص

شروع سرد اجتناب ناپذیر است، اما قابل کنترل است: موارد گرم را در جایی که مهم است نگه دارید، بسته نرم افزاری را کاهش دهید، اتصالات تنبل و استفاده مجدد را اعمال کنید، از VPC غیر ضروری اجتناب کنید، عملیات سنگین را در خط/کارگران انجام دهید و از لبه برای قوانین آسان استفاده کنید. برای مسیرهای مالی بحرانی - SLO های جداگانه، idempointency و timeouts دقیق ؛ سهم سرما را اندازه گیری کنید و گرم شدن را فقط در جایی که پرداخت می شود، روشن کنید.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.