تسليم حدث موثوق باستخدام صندوق صادر للمعاملات

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

عند إرسال الأحداث مباشرةً إلى قائمة الانتظار ، يحدث طلبا شبكة في طلب أو عملية واحدة ، مما يؤدي إلى حدوث مشكلة. لا يمكن إجراء طلبي شبكة ذريين (للفشل أو النجاح معًا).

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

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

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

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

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

من وجهة نظر عين الطائر ، تبدو العملية برمتها كما يلي:

 < / figure>

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

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

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

تسليم حدث موثوق باستخدام صندوق صادر للمعاملات

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

عند إرسال الأحداث مباشرةً إلى قائمة الانتظار ، يحدث طلبا شبكة في طلب أو عملية واحدة ، مما يؤدي إلى حدوث مشكلة. لا يمكن إجراء طلبي شبكة ذريين (للفشل أو النجاح معًا).

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

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

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

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

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

من وجهة نظر عين الطائر ، تبدو العملية برمتها كما يلي:

 < / figure>

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

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

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

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow