همه پست‌ها

انتساب وقتی مالک وب‌سایت نیستید

یادداشت‌های بک‌اند از Elevista — ردیابی جاسازی‌شده، Kafka، PostgreSQL به همراه MongoDB، و Temporal برای فلوهایی که از یک درخواست HTTP فراتر می‌روند.

  • Kafka
  • Temporal
  • NestJS
  • event-driven
  • PostgreSQL
  • MongoDB
لوله انتساب رویداد Kafka و Temporal

Elevista به سازندگان بابت نتایج ارجاع پول می‌دهد — ثبت‌نام‌ها، خریدها، مشکل انتساب معمول. یک تبلیغ‌کننده اسکریپتی را در سایتی که Elevista کنترل نمی‌کند قرار می‌دهد. رویدادها با کد ارجاع، شاید URL صفحه، و اغلب هنوز بدون کاربر وارد شده ظاهر می‌شوند.

من روی بک‌اند با قرارداد مستقیم با تیم لندن کار کردم. NestJS، PostgreSQL، MongoDB، Kafka، Temporal. حجم در زمان من متوسط بود — حدود صد تعامل در روز — اما محصول نیاز به فضا برای رشد بدون بازنویسی داشت.

سریع نگه داشتن endpoint دریافت

اسکریپت ردیابی رویدادها را ارسال می‌کند. API آنها را سریع اعتبارسنجی و نرمال‌سازی می‌کند، سپس کنار می‌رود. ThumbmarkJS کمک کرد تا جلسات ناشناس قبل از ایجاد حساب ترکیب شوند — مفید وقتی انتساب چندین بازدید را در بر می‌گیرد.

حذف تکرار، ارزیابی قوانین و تجمیع‌های گزارش‌دهی پشت Kafka قرار دارند تا دریافت وقتی مصرف‌کنندگان عقب می‌مانند پاسخگو بماند. انتشار در لبه handlerهای HTTP را ساده نگه داشت، که دقیقاً همان چیزی است که در لبه می‌خواهید.

PostgreSQL برای پول، MongoDB برای رویدادها

PostgreSQL حساب‌ها، کمپین‌ها، قوانین پاداش و موجودیت‌های مرتبط با پرداخت را نگه می‌دارد — هر چیزی که به تراکنش‌ها و محدودیت‌ها نیاز دارد. MongoDB ترافیک حجیم رویدادگونه برای تحلیل و گزارش‌دهی سری زمانی را مدیریت می‌کند.

می‌توانستیم همه رویدادها را در جداول رابطه‌ای بگنجانیم. مدتی جواب می‌داد و بعداً آسیب می‌زد. می‌توانستیم تنظیمات مالی را در اسناد بگذاریم. این بلافاصله آسیب می‌زد. تقسیم‌بندی با نحوه خواندن واقعی محصول از داده‌ها مطابقت داشت، نه با ظاهر یک نمودار در ارائه.

فلوهای ویدیویی که از یک درخواست فراتر می‌روند

برخی فلوهای سازنده قطعه‌ای از ویدیو را برش می‌دهند، به یک ترنکودر خارجی تحویل می‌دهند، لینک اشتراک‌گذاری ایجاد می‌کنند و تعامل را ردیابی می‌کنند. این یک چرخه درخواست/پاسخ نیست. Temporal مراحل و تلاش‌های مجدد را هماهنگ کرد تا یک ترنکود ناموفق زمینه ارجاع را یتیم نکند.

یک صف به همراه مصرف‌کننده ایدمپوتنت برای محصولات زیادی کافی است. این یکی از آنها نبود — سیستم‌های خارجی، تلاش‌های مجدد و تأخیرهای قابل مشاهده کاربر بخشی از فلو بودند.

قوانین کسب‌وکار را کجا قرار دادیم

قوانین کمپین به صورت داده زندگی می‌کردند جایی که می‌توانستیم بدون استقرار مجدد آنها را تغییر دهیم. منطق حذف تکرار صریح و آزمایش شده باقی ماند — جایی که محصولات انتساب اگر بی‌دقت باشید به شما دروغ می‌گویند.

Kafka در لبه، handlerهای ساده، فلوها فقط جایی که سیستم‌های خارجی و تلاش‌های مجدد بخشی از سفر کاربر هستند. هیچ چیز هوشمندانه بی‌دلیل.