أقوم بتشغيل منتج صغير للتنبيه الوظيفي يسمى Upwork Scout. يقوم المستخدمون بتعيين المرشحات، ويصفون أنفسهم مرة واحدة، ويرسل إليهم عبر البريد الإلكتروني فقط وظائف Upwork التي تناسب ملفهم الشخصي بالفعل. خطوة بسيطة. الجزء المثير للاهتمام هو القيد الذي قدمته لنفسي في اليوم الأول: يجب أن تظل تكلفة الاستخلاص ثابتة تقريبًا بغض النظر عن عدد الأشخاص الذين قاموا بالتسجيل. إليكم كيفية تصميمه بحيث لا تكلفني إضافة مستخدم شيئًا تقريبًا، بالإضافة إلى عدد قليل من القرارات الهندسية المملة التي انتهى بها الأمر إلى أهمية أكثر من القرارات المبهرجة.
الطريقة الواضحة لإنشاء أداة تنبيه للوظائف هي تكرار المستخدمين، وإجراء بحثهم على المصدر لكل واحد منهم وإرسال النتائج إليهم عبر البريد الإلكتروني. إنه يعمل بشكل رائع مع عشرة مستخدمين. إنه يفلسك بهدوء بمبلغ عشرة آلاف، لأن فاتورة الكشط الخاصة بك تنمو بشكل خطي مع الاشتراكات. يصبح كل مستخدم جديد بمثابة تكلفة متكررة جديدة، ويعتبر الاستخلاص أغلى شيء يفعله التطبيق على الإطلاق.
لم أكن أرغب في عمل يكون النمو فيه بمثابة عبء. لذا، قبل أن أكتب محرك المسح، قمت بقلب النموذج.
الإدراك الذي جعل الأمر برمته قابلاً للتطبيق: معظم المستخدمين ليسوا فريدين إلى هذا الحد. يبحث اثنان من العاملين المستقلين الذين يريدون عمل "أتمتة الذكاء الاصطناعي" عن نفس الوظائف تقريبًا. لذلك، بدلًا من المسح لكل مستخدم، أقوم بالمسح لكل فئة.
الفئة عبارة عن بحث منطقي واحد في Upwork محدد في الكود. في كل دورة، يبحث المحرك عن الفئات التي تحتوي على مشترك نشط واحد على الأقل، ويتخلص منها فقط، ويخزن المهام الجديدة مرة واحدة في Firestore، ثم يطابق كل مستخدم مع تدفق المهام المشترك في الذاكرة.
والنتيجة هي أن تكلفة الاستخراج الخاصة بي تتتبع عدد الفئات النشطة، وليس عدد المستخدمين. هناك حد أقصى صارم للفئات، لذلك هناك سقف صارم للإنفاق. لقد كلفني مائتان مستخدم مشترك في نفس الفئات الثلاث نفس تكلفة المسح تمامًا مثل اثنين من المستخدمين المشتركين في هذه الفئات الثلاث. تعد المطابقة داخل الذاكرة مجانية بشكل أساسي بالمقارنة، لذا توقف الجزء المكلف من خط الأنابيب عن التوسع مع النمو.