تسجيل واجهة برمجة تطبيقات دفق Twitter باستخدام Windows Azure و F#

StackOverflow https://stackoverflow.com/questions/3699912

  •  02-10-2019
  •  | 
  •  

سؤال

قبل شهر حاولت استخدام وكلاء F# لمعالجة وتسجيل بيانات Twitter DreamingApi هنا. كتمرين صغير أحاول نقل الكود إلى Windows Azure.

حتى الآن لدي دوران:

  • دور عامل واحد (ناشر) يضع الرسائل (رسالة هي JSON من تغريدة) إلى قائمة انتظار.

  • دور عامل واحد (المعالج) الذي يقرأ الرسائل من قائمة الانتظار ، يفكّر JSON ويقوم بتفريغ البيانات في جدول سحابة.

مما يؤدي إلى الكثير من الأسئلة:

  • هل من المقبول التفكير في دور العامل كعامل؟
  • في الممارسة العملية ، يمكن أن تكون الرسالة أكبر من 8 كيلو بايت ، لذا سأحتاج إلى استخدام تخزين Blob وتمرير رسالة إلى الإشارة إلى النقطة (أو هل هناك طريقة أخرى؟) ، هل سيؤثر هذا على الأداء؟
  • هل من الصحيح القول أنه إذا لزم الأمر ، يمكنني زيادة عدد حالات دور عامل المعالج ، وسيتم معالجة قائمة الانتظار بشكل سحري بشكل أسرع؟

آسف لقصف كل هذه الأسئلة ، أتمنى ألا تمانع ،

شكرًا جزيلاً!

هل كانت مفيدة؟

المحلول

هل من المقبول التفكير في دور العامل كعامل؟

نعم بالتأكيد.

في الممارسة العملية ، يمكن أن تكون الرسالة أكبر من 8 كيلو بايت ، لذا سأحتاج إلى استخدام تخزين Blob وتمرير رسالة إلى الإشارة إلى النقطة (أو هل هناك طريقة أخرى؟) ، هل سيؤثر هذا على الأداء؟

نعم ، باستخدام التقنية التي تتحدث عنها (إنقاذ JSON لتخزين blob باسم "JSONMESSAGE-1" ثم إرسال رسالة إلى قائمة انتظار مع محتويات "jsonmessage-1") يبدو أنها الطريقة القياسية تمرير الرسائل في أزور أكبر من 8 كيلو بايت. أثناء قيامك بإجراء 4 مكالمات إلى Azure Storage بدلاً من 2 (1 للحصول على رسالة قائمة الانتظار ، 1 للحصول على محتويات blob ، 1 لحذف من قائمة الانتظار ، 1 لحذف النقطة) سيكون أبطأ. هل سيكون أبطأ بشكل ملحوظ؟ على الاغلب لا. إذا كان هناك عدد كبير من الرسائل سيكون أصغر من 8 كيلو بايت عند ترميز BASE64 (هذا هو مسكات في مكتبة StorageClient) ، فيمكنك وضع بعض المنطق لتحديد كيفية إرسالها.

هل من الصحيح القول أنه إذا لزم الأمر ، يمكنني زيادة عدد حالات دور عامل المعالج ، وسيتم معالجة قائمة الانتظار بشكل سحري بشكل أسرع؟

طالما أنك كتبت دور العامل الخاص بك بحيث يتم احتوائها ذاتيا والحالات لا تحصل على بعضها البعض ، ثم نعم ، زيادة عدد المثيلات ستزيد من خلال وضع. إذا كان الدور هو مجرد قراءة والكتابة للتخزين ، فقد تستفيد من خلال تعدد دور العامل أولاً ، قبل زيادة عدد المثيلات مما سيوفر المال.

نصائح أخرى

هناك مكتبة OpenSource تدعى Lokad.Cloud والتي يمكنها معالجة رسالة كبيرة بشفافية ، يمكنك التحقق من ذلك http://code.google.com/p/lokad-cloud/

هل من المقبول التفكير في دور العامل كعامل؟

هذه هي الطريقة المثالية للتفكير في الأمر. تخيل العمال في ماكدونالدز. كل عامل لديه مهام معينة ويتواصلون مع بعضهم البعض عبر الرسائل (تحدث).

في الممارسة العملية ، يمكن أن تكون الرسالة أكبر من 8 كيلو بايت ، لذا سأحتاج إلى استخدام تخزين Blob وتمرير رسالة إلى الإشارة إلى النقطة (أو هل هناك طريقة أخرى؟) ، هل سيؤثر هذا على الأداء؟

طالما أن الرسالة غير قابلة للتغيير ، فهذه هي أفضل طريقة للقيام بذلك. يمكن أن تكون السلاسل كبيرة جدًا وبالتالي يتم تخصيصها للكومة. نظرًا لأنهم غير قابل للتغيير ، فإن مراجع الإشارات ليست مشكلة.

هل من الصحيح القول أنه إذا لزم الأمر ، يمكنني زيادة عدد حالات دور عامل المعالج ، وسيتم معالجة قائمة الانتظار بشكل سحري بشكل أسرع؟

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top