«محاسبه بر اساس ثانیه» از آن عبارتهایی است که کامل به نظر میرسد ولی نیست. پشت آن چند تصمیم هست که مبلغ پرداختی شما را تغییر میدهد: چه چیزی اندازهگیری میشود، شمارش کی شروع و کی متوقف میشود، آیا حداقلی وجود دارد، کسرهای سنت چطور مدیریت میشوند، و پول دقیقاً کی از موجودیتان کم میشود.
این نوشته پاسخهای ما را، همراه با محاسبات، برای سندباکسهای کد ثبت میکند. هدف این است که پیش از اجرای هر چیزی بتوانید صورتحساب را تا سنت پیشبینی کنید، و نقطهای را تشخیص دهید که صورتحساب ثانیهای مدل نادرستی برای بار کاری شماست.
واحد: vCPU و RAM رزروشده
قیمت سندباکس، قیمت منابعی است که تعرفهٔ آن رزرو میکند:
- $0.040 برای هر vCPU-ساعت
- $0.013 برای هر GiB رم در ساعت
بنابراین تعرفهٔ small (0.5 vCPU، 1 GB) ساعتی 0.5 × 0.040 + 1 × 0.013 = $0.033 هزینه دارد، یعنی حدود $0.0000092 در ثانیه. بزرگترین تعرفه، max (8 vCPU، 16 GB)، ساعتی $0.528 است.
ما رزرو را اندازه میگیریم، نه مصرف را. سندباکسی که منتظر دستور بعدی است بهازای هر ثانیه همانقدر هزینه دارد که سندباکسی که پروژهای را کامپایل میکند. اندازهگیری CPU واقعی روی کاغذ منصفانهتر به نظر میرسید، اما دانستن قیمت از پیش را غیرممکن میکرد، و ظرفیت در هر حال برای شما نگه داشته میشود. ترافیک خروجی هزینه ندارد.
شمارش: از ساخت تا حذف
سندباکس موقت از لحظهٔ ساخت تا لحظهٔ حذف هزینه دارد. این شامل زمانی هم میشود که بیکار میماند تا مهلت بیکاری آن را حذف کند؛ این مهلت بهطور پیشفرض ۳۰۰ ثانیه است.
بیشتر غافلگیریها از همینجا میآید. اسکریپتی دو دقیقهای، در سندباکسی که کسی حذفش نمیکند، هفت دقیقه هزینه دارد: دو دقیقه کار و پنج دقیقه انتظار برای مهلت. راهحل کسلکننده است: وقتی کارتان تمام شد سندباکس را حذف کنید (بلوک with در SDK این کار را برایتان انجام میدهد) یا مهلت بیکاری را کم کنید.
حداقل: ۶۰ ثانیه برای هر سندباکس
هر سندباکس موقت دستکم برای ۶۰ ثانیه از عمرش هزینه دارد. راهاندازی یک microVM، وصل کردن دیسک و شبکهٔ آن و دوباره جمع کردن همهچیز، هزینهٔ یکسانی دارد، چه کد داخلش یک ثانیه اجرا شود چه پنجاه ثانیه.
| عمر | تعرفه | محاسبهشده | هزینه |
|---|---|---|---|
| ۲۰ ث | small | ۶۰ ث | $0.00055 |
| ۶۱ ث | small | ۶۱ ث | $0.00056 |
| ۱۰ د | small | ۶۰۰ ث | $0.0055 |
| ۳ س | standard | ۱۰٬۸۰۰ ث | $0.198 |
حداقل فقط یک بار اعمال میشود، وقتی سندباکس تمام میشود، و فقط اگر کل عمرش کمتر از ۶۰ ثانیه بوده باشد. هیچ حداقل اضافهای بهازای ساعت یا دستور وجود ندارد.
انباشت و کسر: میکرودلار و سنت کامل
این بخشی است که «ثانیهای» معمولاً به شما نمیگوید. میزبان سندباکسها مصرف را در بازههای ساعتی ثبت میکند، یکی برای هر سندباکس. کار صورتحساب هر دقیقه یک بار بازههای بستهشده را جمع میکند، قیمتگذاری میکند و از موجودی کسر میکند.
قیمتگذاری به یکمیلیونیم دلار انجام میشود و کسر به سنت کامل. هرچه کمتر از یک سنت بماند در حساب شما باقی میماند و به کسر بعدی اضافه میشود؛ نه بهازای سندباکس گرد میشود و نه بهازای ساعت.
در مقیاس کوچک این مهم است. صد سندباکس ۲۰ ثانیهای 100 × $0.00055 = $0.055 انباشته میکنند. پنج سنت از شما کسر میشود و نیم سنت منتظر دستهٔ بعدی میماند. اگر هر سندباکس به یک سنت گرد میشد، همین کار یک دلار هزینه داشت.
دو ویژگی دیگر هم ارزش دانستن دارد:
- هر بازه دقیقاً یک بار هزینه میشود. رکورد مصرف و کسر در یک تراکنش پایگاه داده نوشته میشوند، با کلید سندباکس و ساعت. اجرای دوباره یا تأیید گمشده نمیتواند دو بار هزینه کم کند.
- قطعیها کسر را عقب میاندازند، نه گم میکنند و نه تکرار. اگر بخش صورتحساب نتواند به میزبان سندباکسها برسد، چیزی تأیید نمیشود، بازهها منتظر میمانند و وقتی اتصال برگشت هزینه میشوند.
نتیجه این است که داشبورد ممکن است تا یک ساعت از عدد زنده عقب باشد. برای عدد زنده، GET /sandboxes/{id}/usage مقدار billed_usd و estimated_total_usd آن سندباکس را تا این لحظه برمیگرداند.
سندباکسهای persistent: بهازای هر ساعت آغازشده، با سقف
سندباکسهای persistent دیسک خود را بین نشستها نگه میدارند، تا ۳۰ روز. هزینهٔ آنها بهازای هر ساعت آغازشده است: ۶۱ دقیقه یعنی دو ساعت. در عوض، یک ماه تقویمی (UTC) هرگز بیشتر از ۷۳۰ ساعت منهای ۲۵٪ هزینه ندارد.
برای تعرفهٔ standard این سقف بهجای $48.18 ماهانه $36.14 است. وقتی سندباکس persistent متوقف (pause) است، اصلاً هزینهای ندارد.
وقتی موجودی تمام میشود
موجودی هرگز زیر صفر نمیرود. سندباکسهای جدید با 402 insufficient_balance رد میشوند. سندباکسهای موقتی که در حال اجرا هستند در مهلت بیکاری یا TTL خود تمام میشوند. سندباکسهای persistent پس از ۲۴ ساعت بدون شارژ متوقف میشوند و وقتی موجودی اضافه کنید خودشان ادامه میدهند. اسنپشاتهای متوقف ۱۴ روز نگه داشته میشوند. پس از آن سندباکس حذف میشود و شناسهاش 410 sandbox_deleted برمیگرداند.
اگر یک عامل هوش مصنوعی برایتان سندباکس میسازد، سقف روزانه و ماهانه تعیین کنید. رسیدن به سقف 429 budget_exceeded را همراه با زمان بازنشانی برمیگرداند، چیزی که یک برنامه میتواند بر اساس آن عمل کند.
صورتحساب ثانیهای کجا میبازد
صورتحساب ثانیهای برای کاری که با ثانیه و دقیقه سنجیده میشود عالی است. هرچه کار طولانیتر شود، بدتر میشود.
| بار کاری | سندباکس ثانیهای | جایگزین |
|---|---|---|
| تست ۲ دقیقهای | $0.0011 (small) | ماشینی که ساعتی حساب میشود کل ساعت را میگیرد |
| کار دستهای ۳ ساعته | $0.198 (standard) | تقریباً همان |
| سرویس ۲۴/۷ | ماهانه $36.14 (standard، سقف persistent) | VPS AI agent: 4 vCPU، 4 GB، ماهانه $10 |
نقطهٔ تلاقی تقریباً جایی است که بار کاری بیش از چند ساعت در روز اجرا شود. از آن به بعد برای انعطافی پول میدهید که از آن استفاده نمیکنید، و سروری که ماهانه اجاره شده بهازای هر ساعت بهمراتب ارزانتر است. نگاه منصفانه به صورتحساب ثانیهای این است که آن را بهای برنامهریزی نکردن ظرفیت بدانیم، نه تخفیف.
روشی سریع برای برآورد
قیمت ساعتی تعرفه × تعداد ثانیههایی که سندباکس وجود خواهد داشت ÷ ۳۶۰۰، با کف ۶۰ ثانیه. اگر خودتان حذفش نمیکنید، مهلت بیکاری را اضافه کنید. برای سندباکسهای persistent هر نشست را به ساعت کامل گرد کنید و در سقف ماهانه متوقف شوید.
همهٔ قوانین، سهمیهها و API بودجه در محدودیتها و صورتحساب سندباکسها است؛ فراخوانیهای بالا در مرجع SDK. اگر میخواهید بدانید بهازای هر ثانیه دقیقاً چه چیزی اجاره میکنید، Firecracker microVM به زبان ساده توضیحش میدهد، و عاملهای هوش مصنوعی واقعاً چه چیزی از زیرساخت لازم دارند نشان میدهد چرا وقتی ماشینها را نرمافزار میسازد و نه انسان، مدل صورتحساب اینقدر مهم است.
نظرات
هنوز نظری نیست. اولین نفر باشید.