Zen Eddin Allaham نشر 22 أغسطس أرسل تقرير نشر 22 أغسطس فرضاً انا كنت عم اشتغل على مشروع وليكن شبيه ب threads.com وكما نعلم منصات تواصل اجتماعي تحتاج خوارزميات عرض هل ممكن تحقيق خوارزميات العرض من خلال NestJS فقط ام ساضطر ال بناء Microservices ودمج به خدمة Python لتحقيق ذالك وبالنسبة ل مكتبة BullMQ هل هي فقط صممت ل تحسين وتسريع زمن الاستجابة ام يوجد وظيفة اخرى لها 1 اقتباس
0 Mustafa Suleiman نشر 22 أغسطس أرسل تقرير نشر 22 أغسطس يجب تحديد الهدف من المشروع، وبالطبع هو لبناء معرض أعمالك، بالتالي الأنسب لك هو التركيز على NestJS كـ Modular Monolith وإتقانها، مع إظهار فهمك لـ System Design باستخدام BullMQ و Redis، بايثون و Microservices لا حاجة إليك بها الآن. المشاريع في بداياتها لا تحتاج Microservices، واستخدامها سيضيف عليك تعقيدات Distributed Systems problems مثل كيف تتعامل مع فشل الشبكة بين الخدمتين؟ كيف تضمن توافق البيانات Eventual Consistency؟ وإن لم تكن مستعداً للإجابة على الأسئلة بعمق، فسوف تنقلب ضدك في المقابلة. التحدي هو تصميم الـ Feed (System Design)، اشرح في ملف الـ README وفي المقابلة كيف قمت بحل مشكلة الـ Feed. استخدم Redis كـ Cache لتخزين الـ Feeds، وBullMQ لتطبيق نمط Fan-out on Write عندما ينشر المستخدم منشوراً، يقوم Worker بتوزيعه على متابعيه في الخلفية بدلاً من عمل Query معقد. اقتباس
0 محمد عاطف25 نشر 23 أغسطس أرسل تقرير نشر 23 أغسطس إن بناء مشروع بحجم Threads يمثل تحدي هندسي كبير والإجابة المختصرة هى أنه يمكنك البدء ب NestJS فقط ولكن للوصول إلى مستوى التخصيص والذكاء الموجود في منصات مثل Threads ستحتاج إلى دمج خدمات Python لاحقا. وخوارزميات العرض (Feed Algorithms) تنقسم عادة إلى مستويين، ولكل منهما أدواته المناسبة: فإذا كانت خوارزمية العرض لديك تعتمد على قواعد رياضية ومنطقية مباشرة فإن NestJS و Node.js قادران تماما على أدائها ويشمل ذلك: الترتيب الزمني : عرض أحدث المنشورات من الأشخاص الذين يتابعهم المستخدم. نظام النقاط البسيط : إعطاء وزن معين للتفاعلات وترتيب المنشورات بناءً على المجموع باستخدام استعلامات SQL أو NoSQL معقدة. والنتيجة: أداء ممتاز وسريع دون الحاجة لتعقيد البنية التحتية. ومنصات التواصل الاجتماعي الكبرى لا تعتمد على القواعد البسيطة بل تعتمد على تعلم الآلة (Machine Learning) والذكاء الاصطناعي لفهم سلوك المستخدم بدقة وهنا تتفوق Python وستحتاج إليها من أجل: التوصيات المخصصة : تحليل سجل تفاعلات المستخدم وتوقع المنشورات التي ستبقيه أطول فترة ممكنة في التطبيق. معالجة اللغات الطبيعية (NLP): فهم محتوى المنشورات النصية وتصنيفها لاقتراحها للمهتمين. الاعتماد على مكتبات الذكاء الاصطناعي: بيئة Python تمتلك الأدوات الأقوى في هذا المجال مثل TensorFlow و PyTorch و Scikit-Learn ومحاولة محاكاة ذلك في Node.js ستكون غير مناسبة . اقتباس
0 بلال زيادة نشر 24 أغسطس أرسل تقرير نشر 24 أغسطس نعم، NestJS وحده يكفي لمعظم خوارزميات العرض، لكن Python يدخل عندما تريد ذكاء اصطناعي متقدم (Machine Learning). للمنصات الناشئة والمتوسطة، يمكنك بناء خوارزمية عرض قوية في NestJS باستخدام // مثال: خوارزمية timeline بسيطة مع ترتيب زمني + تفاعل async function getFeed(userId: string, page: number) { return this.postRepository .createQueryBuilder('post') .leftJoin('follows', 'f', 'f.followingId = post.userId') .where('f.followerId = :userId', { userId }) .orderBy( `post.createdAt * 0.3 + post.likesCount * 0.4 + post.commentsCount * 0.3`, 'DESC' ) .take(20) .skip(page * 20) .getMany(); } Python يصبح ضرورياً عندما تريد Deep Learning لتحليل محتوى الصور/الفيديو NLP متقدم لفهم سياق المنشورات Real-time recommendations مع نماذج تتعلم من سلوك المستخدم A/B testing مع نماذج إحصائية معقدة BullMQ هي مكتبة إدارة مهام (Job Queue) وليست مجرد أداة أداء. دورها أعمق بكثير الوظائف الأساسية لـ BullMQ هي: Background Processing Job Scheduling Retry Logic Rate Limiting Job Prioritization Delayed Jobs Repeatable Jobs كيف تستخدم BullMQ في خوارزمية العرض // feed.processor.ts import { Processor, Process } from '@nestjs/bull'; import { Job } from 'bull'; @Processor('feed') export class FeedProcessor { @Process('calculate-feed') async handleCalculateFeed(job: Job<{ userId: string }>) { const { userId } = job.data; // 1. جلب المنشورات الجديدة const newPosts = await this.getNewPosts(userId); // 2. حساب النقاط لكل منشور const scoredPosts = newPosts.map(post => ({ ...post, score: this.calculateScore(post, userId) })); // 3. ترتيب وحفظ في Redis await this.redisClient.zadd( `feed:${userId}`, ...scoredPosts.flatMap(p => [p.score, p.id]) ); // 4. الاحتفاظ بآخر 500 منشور فقط await this.redisClient.zremrangebyrank(`feed:${userId}`, 0, -501); } } // feed.service.ts @Injectable() export class FeedService { constructor( @InjectQueue('feed') private feedQueue: Queue, private redisClient: Redis ) {} // عند نشر منشور جديد async onNewPost(post: Post) { // أضف مهمة لحساب feed لكل متابع const followers = await this.getFollowers(post.userId); for (const follower of followers) { await this.feedQueue.add('calculate-feed', { userId: follower.id }, { priority: follower.isActive ? 1 : 5, // أولوية للمستخدمين النشطين delay: 1000, // انتظر ثانية لتجنب الضغط attempts: 3, // أعد المحاولة 3 مرات إذا فشل backoff: 5000 // انتظر 5 ثوانٍ بين كل محاولة }); } } // جلب feed المستخدم (سريع جداً من Redis) async getUserFeed(userId: string, page: number) { const postIds = await this.redisClient.zrevrange( `feed:${userId}`, page * 20, (page + 1) * 20 - 1 ); return this.postRepository.findByIds(postIds); } } ابدأ بـ NestJS + PostgreSQL + Redis + BullMQ. هذا المكدس يمكنه التعامل مع ملايين المستخدمين. لا تعقد بنية النظام من البداية. أضف Python كـ microservice فقط عندما يثبت لك أن المنطق البرمجي في NestJS غير كافٍ لتحقيق التوصيات المطلوبة. اقتباس
السؤال
Zen Eddin Allaham
فرضاً انا كنت عم اشتغل على مشروع وليكن شبيه ب threads.com وكما نعلم منصات تواصل اجتماعي تحتاج خوارزميات عرض
هل ممكن تحقيق خوارزميات العرض من خلال NestJS فقط ام ساضطر ال بناء Microservices ودمج به خدمة Python لتحقيق ذالك
وبالنسبة ل مكتبة BullMQ هل هي فقط صممت ل تحسين وتسريع زمن الاستجابة ام يوجد وظيفة اخرى لها
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.