مرة واحدة بالضبط ليست هي نفسها: تحليل المقالة

مقدمة


قررت تحليل مقال يصف بعض التفاصيل المثيرة للاهتمام لمعالجة الدفق مرة واحدة بالضبط: مرة واحدة بالضبط . الحقيقة هي أن بعض المؤلفين يفهمون المصطلحات بغرابة. سيسمح لنا تحليل المقال بتوضيح تفاصيل أكثر عمقًا ، لأنه يسمح لك التعرف على التناقضات والأوجه الغريبة بتجربة المفاهيم والمعنى بشكل كامل.


دعنا نبدأ.


التحليل


كل شيء يبدأ بشكل جيد للغاية:


أصبحت معالجة دفق الأحداث الموزعة موضوعًا متزايد الأهمية في مجال البيانات الضخمة. تشمل محركات معالجة التدفق البارزة (SPEs) Apache Storm و Apache Flink و Heron و Apache Kafka (Kafka Streams) و Apache Spark (Spark Streaming). واحدة من أبرز ميزات SPEs والتي تمت مناقشتها على نطاق واسع هي دلالات المعالجة الخاصة بها ، مع كون "مرة واحدة بالضبط" واحدة من أكثر العناصر المرغوبة بعد ذلك وتدعي العديد من SPEs أنها تقدم دلالات معالجة "لمرة واحدة".

أي أن معالجة البيانات مهمة للغاية ، وما إلى ذلك ، والموضوع قيد المناقشة هو مرة واحدة بالضبط. دعونا نناقش ذلك.


هناك الكثير من سوء الفهم والغموض ، ومع ذلك ، يحيط ما هو بالضبط "مرة واحدة" بالضبط ، وما ينطوي عليه ، وما يعنيه حقًا عندما تدعي SPEs الفردية توفيرها.

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


سأناقش كيف تختلف دلالات المعالجة "لمرة واحدة بالضبط" عبر العديد من SPEs الشائعة ولماذا يمكن وصف "مرة واحدة بالضبط" بشكل أفضل بأنها ذات مرة واحدة بشكل فعال

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


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



بعد ذلك ، هناك وصف للدلالات:


  • مرة واحدة على الأكثر ، أي لا أكثر من مرة. مع الوضوح الواضح ، من الصعب للغاية ضمان مثل هذا السلوك في سيناريوهات على مستوى الحدود مثل الأعطال ، وتعطيل اتصال الشبكة ، والمزيد. ولكن بالنسبة للمؤلف كل شيء بسيط:


  • مرة واحدة على الأقل ، أي مرة واحدة على الأقل. المخطط أكثر تعقيدًا. ويمكن جمع أشعل النار أكثر:


  • مرة واحدة بالضبط. ما هو بالضبط مرة واحدة؟

يتم ضمان معالجة الأحداث "مرة واحدة بالضبط" من قبل جميع المشغلين في تطبيق التدفق ، حتى في حالة حدوث أعطال مختلفة.

على سبيل المثال إن ضمان المعالجة لمرة واحدة هو بالضبط عند حدوث المعالجة "لمرة واحدة بالضبط".


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


فيما يلي وصف لكيفية تنفيذ مثل هذه الدلالات. وهنا أود أن أسهب في مزيد من التفاصيل.


عادة ما يتم استخدام آليتين شائعتين لتحقيق دلالات معالجة "لمرة واحدة".
  1. توزيع نقطية / حالة موزعة
  2. تسليم حدث مرة واحدة على الأقل بالإضافة إلى إلغاء تكرار الرسائل

إذا كانت الآلية الأولى المتعلقة باللقطات ونقاط التفتيش لا تثير أسئلة جيدة ، باستثناء بعض التفاصيل مثل الكفاءة ، فهناك مشاكل صغيرة مع الثانية التي تجاهلها المؤلف.


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


ومع ذلك ، ننتقل إلى ألذ:


هو بالضبط مرة واحدة حقا؟



الآن دعونا نعيد النظر في ما تضمنه دلالات المعالجة "لمرة واحدة" حقًا للمستخدم النهائي. التسمية "لمرة واحدة" مضللة في وصف ما تم عمله مرة واحدة بالضبط.

ويقال أن الوقت قد حان لإعادة النظر في هذا المفهوم ، مثل هناك بعض التناقضات.


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

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


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


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


يوضح رمز المثال في المقالة عدم فهم كيفية كتابة معالجات:


Map (Event event) { Print "Event ID: " + event.getId() Return event } 

القارئ مدعو لإعادة كتابة التعليمات البرمجية بشكل مستقل حتى لا يكرر أخطاء كاتب المقال.


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

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


لمزيد من المعلومات ، يمكنك قراءة مقالتي بإيجاز: معالجة البيانات التنافسية غير المتجانسة في الوقت الفعلي بدقة مرة واحدة .


بمعنى آخر ، يمكن أن تتم معالجة الحدث أكثر من مرة ولكن تأثير هذه المعالجة لا ينعكس إلا مرة واحدة في متجر الحالة الخلفية المتين.

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


هنا في Streamlio ، قررنا أنه لمرة واحدة هو أفضل مصطلح لوصف دلالات المعالجة هذه.

مثال نموذجي على المدخلات الغبية للمفاهيم: سنكتب بعض الأمثلة والحجج المطولة لفقرة كاملة ، وفي النهاية سنضيف أن "نحدد هذا المفهوم". تتسبب دقة التعريفات ووضوحها في استجابة عاطفية حية حقًا.


الاستنتاجات


يؤدي سوء فهم جوهر التجريد إلى تشويه المعنى الأصلي للمفاهيم الموجودة والخلق اللاحق للمصطلحات الجديدة من الصفر.


[1] بالضبط مرة واحدة ليست هي نفسها تمامًا .
[2] معالجة البيانات التنافسية غير المتجانسة في الوقت الفعلي بدقة مرة واحدة .

Source: https://habr.com/ru/post/ar419935/


All Articles