Web3DSurvey با ماهی ۳ دلار میچرخه
خلاصهٔ کاملتر
Web3DSurvey یه سرویس عمومیه که دادههای واقعی پشتیبانی WebGL، WebGL 2، WebGPU و WebXR رو از مرورگرها جمع میکنه تا توسعهدهندههای سهبعدی وب بهجای حدسزدن، بر اساس نرخ پشتیبانی اندازهگیریشده تصمیم بگیرن. نویسنده تو این پست سراغ سؤالی رفته که مدام ازش میپرسن: چرخوندن این سایت چقدر خرج برمیداره؟ جوابش برای آوریل ۲۰۲۶ حدود ۳ دلار کاناداست، اون هم با نزدیک ۵۰۰ هزار درخواست در ماه.
جمعآوری داده با یه اسکریپت کوچیک انجام میشه که سایتهای میزبان اونو داخل یه iframe یکدریک پیکسلی میذارن؛ اینجوری هم به صفحهٔ میزبان دسترسی نداره و هم کندش نمیکنه. نکتهٔ جالبتر اینه که نمونه اول با GET فرستاده میشه و فقط اگه نشد سراغ POST میره: یه POST از مبدأ متفاوت اول به یه درخواست preflight از نوع OPTIONS نیاز داره، پس تعداد درخواستها دو برابر میشه. خودِ داده هم gzip و base64 میشه و توی کوئریاسترینگ میره.
نمونهها بهصورت دستههای دهتایی وارد BigQuery میشن و توی پنج جدول پارتیشنبندیشده بر اساس روز میشینن که هر پارتیشن بعد از ۱۲۰ روز خودکار پاک میشه. کل داده الان حدود ۶.۲ گیگابایته و چون زیر سقف رایگان ۱۰ گیگابایتیه، ذخیرهسازی صفر دلار درمیاد. نویسنده میگه قبلاً آنالیتیکس رو روی PostgreSQL امتحان کرده، ولی تحلیلهای سنگین روی یه جدول رویداد درحالرشد گرون و کند میشه.
سمت گزارشگیری یه سرویس جداست تا شلوغی یکی اونیکی رو از پا درنیاره. بهجای یه کوئری غولپیکر، دهها کوئری کوچیک موازی اجرا میشن و جمعبندی نهایی توی جاوااسکریپت انجام میشه؛ هر کوئری حدود ۵۰۰ میلیثانیه طول میکشه و فقط پنجرهٔ ۷ روز آخر رو میخونه:
SELECT
platform.name AS platformName,
browser.name AS browserName,
COUNTIF(extensions.EXT_color_buffer_float = TRUE) AS supported
FROM web3dsurvey.stats_v4.webgl
WHERE DATE(createdAt) >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY platformName, browserNameبرای اینکه هر بازدید دهها کوئری راه نندازه، یه لایهٔ کش جلوی BigQuery نشسته: نتیجه اول توی حافظه و بعد بهشکل یه فایل JSON توی Cloud Storage با عمر دو روز ذخیره میشه و نسخهٔ منقضی فوراً سرو و پشتصحنه تازه میشه. سایت هم اول پوستهٔ صفحه رو رندر میکنه و آمار بعداً سمت کلاینت میاد. صورتحساب آوریل هم این شکلیه: Cloud Run حدود ۲.۳۰ دلار، Cloud DNS ۰.۵۵، BigQuery ۰.۱۸ و Cloud Storage ۰.۰۱ دلار.
نکات کلیدی:
- ماهی حدود ۵۰۰ هزار نمونه و نزدیک ۳۰۰ میلیون داده، با صورتحسابی حدود ۳ دلار کانادا
- گزارش با GET بهجای POST، یعنی حذف درخواست preflight و نصفشدن تعداد درخواستها
- پارتیشن روزانه با انقضای ۱۲۰ روزه، داده رو زیر سقف رایگان ۱۰ گیگابایتی BigQuery نگه میداره
- کش JSON دوروزه بار کوئری رو از «بهازای هر بازدید» به حدود ۱۵ بار در ماه میرسونه
- مسیر جمعآوری و مسیر گزارشگیری جدا هستن تا شلوغی یکی اونیکی رو از کار ننداره




