فایربیس برای دادههایی که در پایگاه داده خود ذخیره میکنید و تمام ترافیک شبکه خروجی در لایه جلسه (لایه ۵) مدل OSI، صورتحساب صادر میکند. هزینه ذخیرهسازی برای هر گیگابایت در ماه ۵ دلار است که روزانه ارزیابی میشود. صورتحساب تحت تأثیر موقعیت مکانی پایگاه داده شما قرار نمیگیرد. ترافیک خروجی شامل سربار اتصال و رمزگذاری از تمام عملیات پایگاه داده و دادههای دانلود شده از طریق خواندن پایگاه داده است. هم خواندن و هم نوشتن پایگاه داده میتواند منجر به هزینههای اتصال در صورتحساب شما شود. تمام ترافیک به و از پایگاه داده شما، از جمله عملیاتی که توسط قوانین امنیتی رد میشوند، منجر به هزینههای قابل پرداخت میشود.
برخی از نمونههای رایج ترافیک دارای صورتحساب عبارتند از:
- دانلود دادهها: وقتی کاربران از پایگاه داده شما داده دریافت میکنند، فایربیس برای دادههای دانلود شده هزینه دریافت میکند. معمولاً این بخش عمدهای از هزینههای پهنای باند شما را تشکیل میدهد، اما تنها عامل در صورتحساب شما نیست.
- سربار پروتکل: برای ایجاد و نگهداری یک جلسه، مقداری ترافیک اضافی بین سرور و کلاینتها ضروری است. بسته به پروتکل زیربنایی، این ترافیک ممکن است شامل موارد زیر باشد: سربار پروتکل بلادرنگ پایگاه داده Firebase Realtime، سربار WebSocket و سربار هدر HTTP. هر بار که اتصال برقرار میشود، این سربار، همراه با هرگونه سربار رمزگذاری SSL، به هزینههای اتصال کمک میکند. اگرچه این پهنای باند برای یک درخواست واحد زیاد نیست، اما اگر بارهای داده شما کوچک باشند یا اتصالات کوتاه و مکرر برقرار کنید، میتواند بخش قابل توجهی از صورتحساب شما را تشکیل دهد.
- سربار رمزگذاری SSL: هزینهای مرتبط با سربار رمزگذاری SSL لازم برای اتصالات ایمن وجود دارد. به طور متوسط، این هزینه تقریباً 3.5 کیلوبایت برای handshake اولیه و تقریباً دهها بایت برای هدرهای رکورد TLS در هر پیام خروجی است. برای اکثر برنامهها، این درصد کمی از صورتحساب شما را تشکیل میدهد. با این حال، اگر مورد خاص شما به تعداد زیادی handshake SSL نیاز داشته باشد، این میتواند به درصد زیادی تبدیل شود. به عنوان مثال، دستگاههایی که از بلیطهای جلسه TLS پشتیبانی نمیکنند، ممکن است به تعداد زیادی handshake اتصال SSL نیاز داشته باشند.
- دادههای کنسول Firebase : اگرچه این معمولاً بخش قابل توجهی از هزینههای Realtime Database نیست، فایربیس برای دادههایی که از کنسول Firebase میخوانید و مینویسید، هزینه دریافت میکند.
میزان مصرف صورتحساب خود را تخمین بزنید
برای مشاهده اتصالات فعلی Realtime Database و میزان مصرف داده، به تب Usage در کنسول Firebase مراجعه کنید. میتوانید میزان مصرف را در دوره صورتحساب فعلی، 30 روز گذشته یا 24 ساعت گذشته بررسی کنید.
فایربیس آمار استفاده را برای معیارهای زیر نشان میدهد:
- اتصالات: تعداد اتصالات همزمان، در حال حاضر باز و بلادرنگ به پایگاه داده شما. این شامل اتصالات بلادرنگ زیر میشود: WebSocket، long polling و رویدادهای ارسال شده از سرور HTML. این شامل درخواستهای RESTful نمیشود.
- فضای ذخیرهسازی: چه مقدار داده در پایگاه داده شما ذخیره میشود. این شامل میزبانی فایربیس یا دادههای ذخیره شده از طریق سایر محصولات فایربیس نمیشود.
- دانلودها: تمام بایتهای دانلود شده از پایگاه داده شما، شامل سربار پروتکل و رمزگذاری.
- بارگذاری: این نمودار نشان میدهد که چه مقدار از پایگاه داده شما در حال استفاده است و درخواستها را در یک بازه زمانی ۱ دقیقهای پردازش میکند. ممکن است با نزدیک شدن پایگاه داده به ۱۰۰٪، مشکلات عملکردی را مشاهده کنید.
بهینه سازی مصرف
چند راهکار برتر وجود دارد که میتوانید برای بهینهسازی استفاده از پایگاه داده و هزینههای پهنای باند خود به کار بگیرید.
- از SDK های بومی استفاده کنید: هر زمان که ممکن است، به جای REST API از SDK هایی که با پلتفرم برنامه شما مطابقت دارند استفاده کنید. SDK ها اتصالات باز را حفظ می کنند و هزینه های رمزگذاری SSL را که معمولاً با REST API اضافه می شود، کاهش می دهند.
- بررسی اشکالات: اگر هزینههای پهنای باند شما به طور غیرمنتظرهای بالا است، تأیید کنید که برنامه شما دادههای بیشتری را همگامسازی نمیکند یا بیشتر از آنچه در ابتدا در نظر داشتید، همگامسازی انجام نمیدهد. برای شناسایی مشکلات، از ابزار پروفایلر برای اندازهگیری عملیات خواندن خود استفاده کنید و گزارشگیری اشکالزدایی را در SDKهای اندروید ، Objective-C و وب فعال کنید. فرآیندهای پسزمینه و همگامسازی را در برنامه خود بررسی کنید تا مطمئن شوید همه چیز طبق برنامه شما کار میکند.
- کاهش اتصالات: در صورت امکان، سعی کنید پهنای باند اتصال خود را بهینه کنید. درخواستهای مکرر و کوچک REST میتوانند پرهزینهتر از یک اتصال واحد و مداوم با استفاده از SDK بومی باشند. اگر از REST API استفاده میکنید، استفاده از HTTP keep-alive یا رویدادهای ارسال شده توسط سرور را در نظر بگیرید که میتواند هزینههای ناشی از SSL handshake را کاهش دهد.
- استفاده از بلیطهای جلسه TLS: با صدور بلیطهای جلسه TLS، هزینههای سربار رمزگذاری SSL را در اتصالات از سر گرفته شده کاهش دهید. این امر به ویژه در صورتی که به اتصالات مکرر و ایمن به پایگاه داده نیاز دارید، مفید است.
- کوئریهای ایندکسشده: ایندکس کردن دادههای شما، کل پهنای باند مورد استفاده برای کوئریها را کاهش میدهد، که این مزیت دوگانه را دارد: کاهش هزینهها و افزایش عملکرد پایگاه داده شما. از ابزار profiler برای یافتن کوئریهای ایندکسنشده در پایگاه داده خود استفاده کنید.
- بهینهسازی شنوندههای خود: کوئریهایی اضافه کنید تا دادههایی را که عملیاتهای شنود شما برمیگردانند محدود کنید و از شنوندههایی استفاده کنید که فقط بهروزرسانیهای دادهها را دانلود میکنند - برای مثال، به جای
once()on()() استفاده کنید. علاوه بر این، شنوندههای خود را تا جایی که میتوانید در مسیر قرار دهید تا میزان دادههایی که همگامسازی میکنند محدود شود. - کاهش هزینههای ذخیرهسازی: کارهای پاکسازی دورهای را انجام دهید و هرگونه داده تکراری را در پایگاه داده خود کاهش دهید.
- استفاده از قوانین: از هرگونه عملیات غیرمجاز و پرهزینه بالقوه در پایگاه داده خود جلوگیری کنید. به عنوان مثال، استفاده از Firebase Realtime Database Security Rules میتواند از سناریویی که در آن یک کاربر مخرب بارها و بارها کل پایگاه داده شما را دانلود میکند، جلوگیری کند. درباره استفاده از قوانین پایگاه داده Firebase Realtime بیشتر بدانید.
بهترین برنامه بهینهسازی برای برنامه شما به مورد استفاده خاص شما بستگی دارد. اگرچه این لیست کاملی از بهترین شیوهها نیست، میتوانید توصیهها و نکات بیشتری را از متخصصان Firebase در کانال Slack یا Stack Overflow بیابید.