Wednesday, 13 December 2017

متعدد الأنماط تصميم المتاجرة نظام


أنماط التراسل 187 أنماط التكامل في الممارسة 187 دراسة حالة: نظام التداول السندات (جوناثان سيمون) فمن السهل أن تقطع نفسك من مجموعة كبيرة من أنماط أو لغة نمط. أنماط هي التجريد من فكرة في شكل قابلة لإعادة الاستخدام. في كثير من الأحيان، طبيعة عامة جدا من الأنماط التي تجعلها مفيدة جدا يجعل من الصعب فهم. في بعض الأحيان أفضل شيء للمساعدة في فهم أنماط هو مثال العالم الحقيقي. ليس سيناريو مفتعل لما يمكن أن يحدث ولكن ما يحدث فعلا وما سيحدث. هذا الفصل ينطبق على أنماط لحل المشاكل باستخدام عملية الاكتشاف. النظام الذي سنناقشه هو نظام تداول السندات الذي عملت معه لمدة عامين من التصميم الأولي من خلال الإنتاج. سوف نستكشف السيناريوهات والمشاكل التي واجهتها وكيفية حلها مع أنماط. وهذا ينطوي على عملية اتخاذ القرار لاختيار نمط، وكذلك كيفية الجمع وضبط أنماط لتتناسب مع احتياجات النظام. ويتم هذا كله مع الأخذ بعين الاعتبار القوى التي واجهتها في النظم الحقيقية بما في ذلك متطلبات الأعمال، وقرارات العميل، والمتطلبات المعمارية والتقنية، فضلا عن التكامل النظام القديم. والقصد من هذا النهج هو توفير فهم أوضح للنماذج نفسها من خلال التطبيق العملي. بناء نظام يقوم بنك استثماري رئيسي في وول ستريت ببناء نظام تسعير السندات في محاولة لتبسيط سير عمل مكتب تداول السندات. حاليا، التجار السندات لديها لإرسال أسعار لعدد كبير من السندات إلى عدة أماكن تجارية مختلفة، ولكل منها واجهة المستخدم الخاصة بها. والهدف من هذا النظام هو تقليل الحد الأدنى من تسعير كل من سنداتهم جنبا إلى جنب مع وظائف تحليلية متقدمة محددة لسوق السندات في واجهة مستخدم مغلفة واحدة. وهذا يعني التكامل والتواصل مع عدة مكونات على مختلف بروتوكولات الاتصال. تدفق مستوى عال من النظام يشبه هذا: أولا، تأتي بيانات السوق في النظام. بيانات السوق هي البيانات المتعلقة بالسعر وغيرها من خصائص السندات التي تمثل ما هو الناس على استعداد لشراء وبيع السندات في السوق الحرة. يتم إرسال بيانات السوق على الفور إلى محرك تحليلات أن يغير البيانات. يشير أناليتيكش إلى الوظائف الرياضية للتطبيقات المالية التي تغير الأسعار وغيرها من سمات السندات. هذه هي الوظائف العامة التي تستخدم المتغيرات الإدخال لتكييف نتائج الدالة إلى رابطة معينة. سيقوم تطبيق العميل الذي سيتم تشغيله على كل سطح مكتب تاجر بتكوين محرك تحليلات على أساس التاجر، والتحكم في تفاصيل التحليلات لكل السندات التاجر هو التسعير. وبمجرد تطبيق التحليلات على بيانات السوق، يتم إرسال البيانات المعدلة إلى أماكن تجارية مختلفة حيث يمكن للمتداولين من الشركات الأخرى شراء أو بيع السندات. العمارة مع الأنماط مع هذه النظرة العامة لسير العمل في النظام، يمكننا أن نقترب من بعض المشاكل المعمارية التي نواجهها أثناء عملية التصميم. دعونا نلقي نظرة على ما نعرفه حتى الآن. يحتاج التجار إلى تطبيق سريع الاستجابة على كل من محطات عمل ويندوز نت و سولاريس. لذلك، قررنا تنفيذ تطبيق العميل كعميل جافا سميكة بسبب استقلالية منصة وقدرته على الاستجابة بسرعة لإدخال المستخدم وبيانات السوق. على جانب الخادم، نحن نرث مكونات C القديمة التي سيستعملها نظامنا. تتواصل مكونات بيانات السوق مع البنية التحتية لرسائل تيبكو إنفورماتيون باص (تيب). نحن نرث المكونات التالية: خادم تغذية بيانات بيانات السوق. ينشر بيانات السوق الواردة إلى تيب. محرك أناليتيكش. ينفذ تحليلات على بيانات السوق الواردة وتبث بيانات السوق المعدلة إلى تيب. خادم المساهمة. ينفذ جميع الاتصالات مع أماكن التداول. أما أماكن التداول فهي مكونات طرف ثالث غير خاضعة لسيطرة البنك. النظام الفرعي لبيانات السوق القديمة النظام الفرعي للمساهمة الموروثة نحن بحاجة إلى أن نقرر كيف ستتواصل الأنظمة الفرعية المنفصلة (عميل جافا السميك وبيانات السوق والمساهمة). يمكننا أن يكون العميل سميكة التواصل مباشرة مع خوادم القديمة، ولكن هذا يتطلب الكثير من منطق الأعمال على العميل. بدلا من ذلك، بناء جيدا زوج من بوابات جافا للتواصل مع الملقمات القديمة وبوابة التسعير لبيانات السوق بوابة مساهمة لإرسال الأسعار إلى أماكن التداول. وهذا سوف يحقق تغليف لطيفة للمنطق الأعمال المتعلقة بهذه المناطق. وفيما يلي المكونات الحالية في النظام. الاتصالات التي تم وضع علامة عليها ك. تشير إلى أننا ما زلنا غير متأكدين من كيفية توصيل بعض المكونات. النظام ومكوناته سؤال الاتصال الأول هو كيفية دمج عميل جافا سميكة ومكونات خادم جافا اثنين من أجل تبادل البيانات. دعونا ننظر إلى أنماط التكامل الأربعة المقترحة في هذا الكتاب: نقل الملفات. قاعدة البيانات المشتركة. استدعاء الإجراء البعيد. والرسائل. يمكننا استبعاد قاعدة البيانات المشتركة على الفور لأننا أردنا إنشاء طبقة من التجريد بين العميل وقاعدة البيانات ولا نريد أن يكون رمز الوصول إلى قاعدة البيانات في العميل. كما يمكن استبعاد نقل الملفات نظرا لأن الحد الأدنى من الكمون مطلوب لضمان إرسال الأسعار الحالية إلى أماكن التداول. هذا يترك لنا مع الاختيار بين الاستدعاء الإجراء البعيد أو الرسائل. توفر منصة جافا المدمج في دعم كل من الاستدعاء الإجراء البعيد والرسائل. يمكن تحقيق التكامل على غرار ريك باستخدام ريموت ميثود إنفوكاتيون (رمي)، كوربا، أو إنتيربريس جافا بينز (إجب). خدمة المراسلة جافا (جمس) هي واجهة برمجة التطبيقات المشتركة لتكامل أسلوب المراسلة. لذلك كلا من أساليب التكامل سهلة التنفيذ في جافا. لذلك سوف تعمل بشكل أفضل لهذا المشروع، استدعاء الإجراء البعيد أو الرسائل. ثيرس مثيل واحد فقط من بوابة التسعير ومثال واحد من بوابة المساهمة في النظام، ولكن عادة العديد من العملاء سميكة الاتصال في وقت واحد إلى هذه الخدمات (واحد لكل تاجر السندات التي يحدث أن يتم تسجيل الدخول في وقت معين). وعلاوة على ذلك، فإن البنك يود أن يكون هذا نظام التسعير العامة التي يمكن استخدامها في التطبيقات الأخرى. لذلك إلى جانب عدد غير معروف من عملاء التفكير، قد يكون هناك عدد غير معروف من التطبيقات الأخرى باستخدام بيانات التسعير الخروج من البوابات. يمكن لعميل سميك (أو تطبيق آخر باستخدام بيانات التسعير) استخدام ريك بسهولة إلى حد ما لإجراء مكالمات إلى البوابات للحصول على بيانات التسعير والاستدعاء للتجهيز. ومع ذلك، سيتم نشر بيانات التسعير باستمرار، وبعض العملاء مهتمون فقط ببعض البيانات، لذلك قد يكون من الصعب الحصول على البيانات ذات الصلة للعملاء المناسبين في الوقت المناسب. يمكن للعملاء استطلاع البوابات، ولكن ذلك سيخلق الكثير من النفقات العامة. وسيكون من الأفضل للبوابات أن تتيح البيانات للزبائن فور توافرها. ومع ذلك، سيتطلب هذا الأمر من كل بوابة تتبع العملاء الناشطين حاليا، والتي تريد بيانات معينة عندئذ، عندما تصبح قطعة جديدة من البيانات متاحة (والتي ستحدث عدة مرات في الثانية)، سيتعين على البوابة ريك لكل عميل مهتم لتمرير البيانات إلى العميل. من الناحية المثالية، يجب إخطار جميع العملاء في وقت واحد، لذلك يجب أن يتم كل ريك في سلسلة الترابط المتزامنة الخاصة به. هذا يمكن أن تعمل، ولكن هو الحصول على معقدة جدا سريع جدا. الرسائل يبسط إلى حد كبير هذه المشكلة. مع الرسائل. يمكننا تحديد قنوات منفصلة لأنواع مختلفة من بيانات التسعير. ثم، عندما يحصل على بوابة جديدة قطعة من البيانات، فإنه سيتم إضافة رسالة تحتوي على تلك البيانات إلى قناة نشر الاشتراك لهذا النوع من البيانات. وفي الوقت نفسه، فإن جميع العملاء المهتمين في نوع معين من البيانات الاستماع على القناة لهذا النوع. وبهذه الطريقة، يمكن للبوابات بسهولة إرسال بيانات جديدة لمن يهتم، دون الحاجة إلى معرفة عدد تطبيقات المستمع هناك أو ما هي عليه. العملاء لا تزال بحاجة إلى أن تكون قادرة على استدعاء السلوك في بوابات كذلك. نظرا لوجود بوابات اثنين فقط، ويمكن للعميل منع على الأرجح أثناء استدعاء الأسلوب بشكل متزامن، يمكن بسهولة هذه الإدخالات من العميل إلى البوابة التي يمكن تنفيذها باستخدام ريك. ومع ذلك، لأننا نستخدم بالفعل الرسائل للاتصالات من عبارة إلى عميل، الرسائل هي على الأرجح مجرد جيدة وسيلة لتنفيذ الاتصالات من العميل إلى بوابة كذلك. ولذلك، سيتم تحقيق جميع الاتصالات بين البوابات والعملاء من خلال الرسائل. لأن جميع المكونات مكتوبة بلغة جافا، يقدم جمس خيارا سهلا لنظام الرسائل. هذا هو خلق فعال حافلة الرسائل أو بنية من شأنها أن تجعل من الممكن لأنظمة المستقبل لدمج مع النظام الحالي مع تغييرات قليلة أو معدومة على البنية التحتية الرسائل. بهذه الطريقة، وظائف الأعمال من التطبيق يمكن استخدامها بسهولة من قبل تطبيق آخر البنك يتطور. مكونات جافا التواصل مع جمس جمس هو مجرد مواصفات ونحن بحاجة إلى اتخاذ قرار بشأن نظام الرسائل المتوافقة مع جمس. قررنا استخدام عب مكسيريز جمس لأن البنك هو متجر عب باستخدام خوادم تطبيقات وبسفهير والعديد من منتجات عب الأخرى. ونتيجة لذلك، سوف نستخدم مكسيريز لأن لدينا بالفعل بنية تحتية للدعم في مكان ورخصة الموقع للمنتج. والسؤال التالي هو كيفية توصيل نظام الرسائل مقسيريز مع خادم مساهمة C مستقل وخوادم بيانات السوق ومحرك أناليتيكش استنادا إلى تيبكو. نحن بحاجة إلى وسيلة للمستهلكين مكسيريز أن يكون الوصول إلى رسائل تيب. ولكن كيف يمكننا استخدام نمط مترجم الرسائل لترجمة رسائل تيب إلى رسائل مكسيريز. على الرغم من أن العميل C ل مكسيريز بمثابة المترجم رسالة. واستخدامه سوف تضحي استقلال خادم جمس. وعلى الرغم من أن شركة تيبكو تمتلك واجهة برمجة تطبيقات جافا، إلا أن المهندس المعماري ومدير العميل رفضوا ذلك. ونتيجة لذلك، يجب التخلي عن نهج "مترجم الرسائل". الجسر من خادم تيب إلى خادم مكسيريز يتطلب الاتصال بين C وجافا. يمكننا استخدام كوربا، ولكن بعد ذلك ماذا عن الرسائل نظرة فاحصة على نمط مترجم الرسائل يظهر أنه يرتبط محول القناة في استخدامه لبروتوكولات الاتصال. قلب محول قناة هو ربط أنظمة غير الرسائل إلى أنظمة المراسلة. زوج من محولات القناة التي تربط اثنين من أنظمة الرسائل هو جسر التراسل. الغرض من جسر الرسائل هو نقل الرسائل من نظام الرسائل واحد إلى آخر. هذا هو بالضبط ما نقوم به مع تعقيد اضافي من لغة جاوة إلى C الاتصالات. يمكننا تنفيذ جسر التراسل عبر لغة باستخدام مزيج من قناة محول s و كوربا. سنقوم ببناء اثنين من خوادم محول قناة خفيفة الوزن، واحدة في C إدارة الاتصالات مع تيب، وواحدة في إدارة الاتصال جافا مع جمس. هذين محول القناة. والتي هي نقطة النهاية رسالة أنفسهم، سوف التواصل مع بعضها البعض عبر كوربا. مثل خيارنا ل مكسيريز، وسوف نستخدم كوربا بدلا من جني لأنه هو معيار الشركة. جسر الرسائل تنفذ ترجمة الرسائل محاكاة فعالة بين أنظمة الرسائل التي تبدو غير متوافقة ولغات مختلفة. رسالة المترجم باستخدام محولات القناة يوضح الرسم البياني التالي تصميم النظام الحالي بما في ذلك البوابات والمكونات الأخرى. هذا مثال جيد على نمط التطبيق. نحن الجمع بين اثنين من قناة محول s مع بروتوكول غير الرسائل لتنفيذ نمط "مترجم الرسالة"، باستخدام فعال نمط واحد لتنفيذ نمط آخر. بالإضافة إلى ذلك، قمنا بتغيير سياق محول القناة لربط اثنين من أنظمة الرسائل مع بروتوكول الترجمة عبر لغة غير الرسائل بدلا من ربط نظام الرسائل إلى نظام غير الرسائل. النظام الحالي مع محولات القناة هيكلة القنوات إن مفتاح العمل مع الأنماط لا يعرف فقط متى يجب استخدام النمط، ولكن أيضا كيفية استخدامها بأقصى قدر من الفعالية. ويجب أن يأخذ كل نمط من أنماط التنفيذ بعين الاعتبار تفاصيل المنصة التكنولوجية فضلا عن معايير التصميم الأخرى. يطبق هذا القسم نفس عملية الاكتشاف للعثور على الاستخدام الأكثر كفاءة لقناة النشر-الاشتراك في سياق خادم بيانات السوق التواصل مع محرك تحليلات. بيانات السوق في الوقت الحقيقي تنشأ مع تغذية بيانات السوق، خادم C الذي يبث بيانات السوق على تيب. يستخدم تغذية بيانات السوق منفصلة نشر قناة الاشتراك لكل السندات هو نشر أسعار ل. قد يبدو هذا الأمر متطرفا قليلا لأن كل سند جديد يحتاج إلى قناة جديدة خاصة به. ولكن هذا ليس شديدا جدا لأنك لا تحتاج فعلا إلى إنشاء قنوات في تيبكو. بدلا من ذلك، يتم الإشارة إلى القنوات بواسطة مجموعة هرمية من أسماء الموضوعات تسمى الموضوعات. ثم يقوم خادم تيبكو بتصفية تدفق رسالة واحدة حسب الموضوع، وإرسال كل موضوع فريد إلى قناة افتراضية واحدة. والنتيجة هي قناة رسالة خفيفة الوزن جدا. يمكننا إنشاء نظام ينشر على عدد قليل من القنوات ويمكن للمشتركين الاستماع فقط للأسعار التي يهتمون بها. وهذا يتطلب من المشتركين استخدام فلتر الرسائل أو المستهلك الانتقائي لتصفية تدفق البيانات بأكمله لأسعار السندات مثيرة للاهتمام، وتحديد ما إذا كان كل رسالة يجب أن تتم معالجتها كما يتم استلامها. وبالنظر إلى أن بيانات السوق تنشر على قنوات مخصصة للسندات، يمكن للمشتركين التسجيل للحصول على التحديثات على سلسلة من السندات. ويسمح ذلك للمشتركين بالترشيح من خلال الاشتراك بشكل انتقائي في القنوات ولا يتلقون سوى تحديثات الاهتمام بدلا من اتخاذ قرار بعد تلقي الرسالة. من المهم أن نلاحظ أن استخدام قنوات متعددة لتجنب تصفية هو استخدام غير قياسي من قنوات الرسائل. في سياق تكنولوجيا تيبكو ومع ذلك، نحن حقا اتخاذ قرار بشأن تنفيذ أو مرشحات الخاصة أو الاستفادة من تصفية القناة في صلب تيبكو - بدلا من ما إذا كان لاستخدام الكثير من القنوات. والمكون التالي الذي نحتاج إلى تصميمه هو محرك التحليلات، وهو خادم كتيب آخر سيقوم بتعديل بيانات السوق وإعادة بثه إلى تيب. على الرغم من أنه خارج نطاق تطوير جافاجمس لدينا، ونحن نعمل عن كثب مع فريق C لتصميمه لأننا العملاء تحليلات العملاء الأساسي. والمشكلة المطروحة هي إيجاد بنية القناة التي تعيد بث بيانات السوق المعدلة حديثا بكفاءة أكبر. وبما أن لدينا بالفعل قناة رسالة مخصصة لكل سند موروثة من تغذية سعر بيانات السوق، سيكون من المنطقي تعديل بيانات السوق وإعادة بث بيانات السوق المعدلة على قناة رسالة مخصصة للسندات. ولكن هذا لن يعمل منذ تحليلات تعديل أسعار السندات هي التاجر محددة. إذا كنا إعادة بث البيانات المعدلة على قناة رسالة السندات. ونحن سوف تدمر سلامة البيانات عن طريق استبدال بيانات السوق العامة مع بيانات محددة التاجر. من ناحية أخرى، يمكن أن يكون لدينا نوع رسالة مختلفة لبيانات السوق الخاصة بالتاجر التي ننشرها على نفس القناة مما يسمح للمشتركين بتحديد الرسالة التي يهتمون بها لتجنب تدمير سلامة البيانات. ولكن بعد ذلك سيكون على العملاء تنفيذ مرشحات الخاصة بهم لفصل الرسائل لغيرهم من التجار. وبالإضافة إلى ذلك، ستحدث زيادة كبيرة في الرسائل التي يتلقاها المشتركون، مما يضع عبئا لا لزوم له عليهم. هناك خياران: قناة واحدة لكل تاجر: كل تاجر لديه قناة محددة للبيانات السوق المعدلة. وبهذه الطريقة، لا تزال بيانات السوق الأصلي سليمة وكل تطبيق التاجر يمكن الاستماع إلى تجارها قناة رسالة محددة لتحديثات الأسعار المعدلة. قناة واحدة لكل تاجر لكل سند: إنشاء قناة رسالة واحدة لكل تاجر لكل سند فقط لبيانات السوق المعدلة لتلك السندات. على سبيل المثال، سيتم نشر بيانات السوق للسندات أبك على قناة بوند أبك بينما سيتم نشر بيانات السوق المعدلة للتاجر A على قناة قناة التاجر أ، بوند أبك، بيانات السوق المعدلة للتاجر ب على التاجر ب، بوند بوند، و هكذا. قناة واحدة لكل تاجر قناة واحدة لكل سند لكل تاجر هناك مزايا وعيوب لكل نهج. نهج كل السندات، على سبيل المثال، يستخدم الكثير من قناة الرسالة. في أسوأ السيناريوهات، فإن عدد قناة الرسائل سيكون عدد السندات الإجمالية مضروبا في عدد التجار. يمكننا وضع الحدود العليا على عدد من القنوات التي سيتم إنشاؤها لأننا نعلم أن هناك فقط حوالي 20 التجار وأنها لا تسعير أكثر من بضع مئات من السندات. هذا يضع الحد الأعلى تحت نطاق 10،000، وهو ليس غريبا جدا بالمقارنة مع ما يقرب من 100،000 قناة رسالة تغذية السوق سعر البيانات المستخدمة. أيضا، لأننا نستخدم تيب وقناة رسالة غير مكلفة للغاية، وعدد من قناة رسالة ق ليست قضية حادة. من ناحية أخرى، يمكن أن يكون العدد الهائل من قناة الرسائل s مشكلة من وجهة نظر الإدارة. في كل مرة يتم إضافة السندات يجب الحفاظ على قناة لكل تاجر. وقد يكون ذلك شديدا في نظام ديناميكي جدا. نظامنا، ومع ذلك، هو ثابت أساسا. كما أن لديها بنية تحتية لإدارة قناة الرسائل s تلقائيا. هذا جنبا إلى جنب مع العمارة الموروثة للمكون القديم باستخدام نهج مماثل يقلل من الجانب السلبي. هذا لا يعني أننا يجب أن تجعل عددا مفرطا بلا داع من قناة الرسائل ق. بدلا من ذلك، يمكننا تنفيذ نهج معماري يستخدم عددا كبيرا من قناة رسالة s عندما يكون هناك سبب. وهناك سبب في هذه الحالة أن يأتي إلى موقع المنطق. إذا طبقنا نهج التاجر، يحتاج محرك أناليتيكش إلى منطق لتجميع قنوات الإدخال والإخراج. ويرجع السبب في ذلك إلى أن قنوات الإدخال من محرك أناليتيكش هي لكل سند وأن قناة رسالة الإخراج ستكون لكل تاجر، مما يتطلب من محرك أناليتيكش توجيه جميع مدخلات أناليتيكش من السندات المتعددة لمتاجر معين إلى مخرجات محددة للمتداول قناة الرسالة. يؤدي هذا إلى تحويل محرك التحليلات بشكل فعال إلى جهاز توجيه يستند إلى المحتوى لتنفيذ منطق التوجيه المخصص لتطبيقنا. بعد بنية حافلة الرسائل، يعد محرك أناليتيكش خادما عاما يمكن استخدامه من قبل العديد من الأنظمة الأخرى في. لذلك نحن لا نريد أن سحابة مع وظيفة نظام معين. من ناحية أخرى، فإن النهج لكل السندات يعمل منذ فكرة التاجر امتلاك الناتج تحليلات أسعار السندات هي ممارسة مقبولة من قبل الشركة. يحتفظ النهج لكل السندات الفصل قناة رسالة من تغذية بيانات السوق سليمة، في حين إضافة عدة أكثر قناة رسالة ق. قبل أن نصل إلى العميل، نريد أن يقوم الموجه القائم على المحتوى بدمج هذه القنوات المتعددة في عدد من القنوات القابلة للإدارة. نحن لا نريد تطبيق العميل يعمل على سطح المكتب التجار أن يستمع إلى الآلاف أو عشرات الآلاف من قناة رسالة ق. الآن يصبح السؤال أين وضع جهاز التوجيه القائم على المحتوى. يمكن ببساطة أن يكون محول قناة كتيب إلى الأمام جميع الرسائل إلى بوابة التسعير على قناة رسالة واحدة. هذا أمر سيئ لسببين سنقوم بتقسيم منطق الأعمال بين C وجافا، وسوف نفقد فائدة قناة رسالة منفصلة s على الجانب تيب مما يسمح لنا لتجنب تصفية في وقت لاحق من تدفق البيانات. بالنظر إلى مكونات جافا لدينا، يمكننا إما وضعه في بوابة التسعير أو إنشاء مكون وسيط بين بوابة التسعير والعميل. من الناحية النظرية، إذا واصلنا الفصل القائم على السندات لقناة الرسالة ق وصولا إلى العميل، فإن بوابة التسعير إعادة بث معلومات التسعير مع بنية القناة نفسها مثل بوابة التسعير ومحرك أناليتيكش. وهذا يعني ازدواجية كل السندات المخصصة قنوات تيب في جمس. حتى إذا أنشأنا مكون وسيط بين بوابة التسعير والعميل، فسيظل على بوابة التسعير تكرار جميع القنوات في جمس. من ناحية أخرى، تنفيذ المنطق مباشرة في بوابة التسعير يسمح لنا لتجنب تكرار عدد كبير من القنوات في جمزالوينغ لنا لإنشاء عدد أقل بكثير من القنوات في ترتيب واحد لكل تاجر. تسجل بوابة التسعير نفسها من خلال محول قناة كتيب كمستهلك لكل سند من كل تاجر في النظام. ثم تقوم بوابة التسعير بإعادة توجيه كل عميل محدد فقط بالرسائل المتعلقة بهذا التاجر المعين. وبهذه الطريقة، نستخدم فقط عددا صغيرا من قناة الرسائل s في نهاية جمس، مع تحقيق أقصى فائدة للفصل في نهاية تيب. تدفق بيانات السوق الكامل إلى العميل الرسالة تخطيط تخطيط القناة هو مثال جيد لكيفية دمج الأنماط الهامة. وكان الهدف هنا هو معرفة كيفية استخدام قناة الرسائل بشكل فعال. قول استخدام نمط ليس كافيا. تحتاج إلى معرفة كيفية تنفيذ أفضل ودمج في النظام الخاص بك لحل المشاكل في متناول اليد. بالإضافة إلى ذلك، يوضح هذا المثال القوى التجارية في العمل. إذا تمكنا من تنفيذ منطق الأعمال في أي من مكوناتنا، كنا يمكن أن تذهب مع نهج التاجر وتنفيذ نهج أكثر بساطة عموما مع العديد من القنوات أقل. اختيار قناة رسالة الآن بعد أن نعرف آليات الاتصال بين مكونات جافاجمس ومكونات C تيبكو، ورأينا بعض بنية قناة الرسالة، ونحن بحاجة إلى أن تقرر أي نوع من قناة رسالة جمس s يجب أن تستخدم مكونات جافا للاتصال . قبل أن نستطيع الاختيار بين قنوات الرسائل المختلفة المتوفرة في جمس، لننظر إلى تدفق الرسائل على مستوى عال من النظام. لدينا اثنين من بوابات (التسعير والمساهمة) التواصل مع العميل. تدفقات بيانات السوق إلى العميل من بوابة التسعير التي ترسلها إلى بوابة المساهمة. تطبيق العميل يرسل رسالة إلى بوابة التسعير لتغيير التحليلات التي يتم تطبيقها على كل السندات. كما تقوم بوابة المساهمة بإرسال رسائل إلى تطبيق العميل ترحيل حالة تحديثات الأسعار إلى أماكن التداول المختلفة. تدفق رسالة النظام تصف مواصفات جمس نوعين من قنوات الرسائل وقناة من نقطة إلى نقطة (قائمة انتظار جمس) وقناة النشر-الاشتراك (موضوع جمس). تذكر بأن قضية استخدام الاشتراك في الاشتراك هي تمكين جميع المستهلكين المهتمين من تلقي رسالة، في حين أن حالة استخدام نقطة إلى نقطة هي التأكد من أن مستهلك مؤهل واحد فقط يتلقى رسالة معينة. ومن شأن العديد من الأنظمة ببساطة أن تبث رسائل إلى جميع تطبيقات العملاء، تاركة لكل طلب عميل فردي أن يقرر بنفسه ما إذا كان ينبغي معالجة رسالة معينة أم لا. وهذا لن يعمل لتطبيقنا منذ هناك عدد كبير من رسائل بيانات السوق يتم إرسالها إلى كل تطبيق العميل. إذا قمنا ببث تحديثات بيانات السوق للمتاجر غير المهتمين، فسوف نؤدي إلى إضاعة دورات معالج العميل بشكل غير ضروري لتحديد ما إذا كان سيتم معالجة تحديث بيانات السوق أم لا. قناة من نقطة إلى نقطة ق في البداية يبدو وكأنه خيار جيد لأن العملاء يرسلون رسائل إلى خوادم فريدة من نوعها والعكس بالعكس. ولكن كان من متطلبات العمل أن التجار قد يتم تسجيل الدخول إلى آلات متعددة في نفس الوقت. إذا كان لدينا تاجر تسجيل الدخول في محطتين عمل في وقت واحد ويتم إرسال تحديث سعر من نقطة إلى نقطة، واحد فقط من اثنين من تطبيقات العميل سوف تحصل على الرسالة. وذلك لأن مستهلك واحد فقط على قناة من نقطة إلى نقطة يمكن أن يتلقى رسالة معينة. لاحظ أن الأول فقط من كل مجموعة من تطبيقات العميل التجار يتلقى الرسالة. الرسائل من نقطة إلى نقطة لإرسال تحديثات الأسعار يمكننا حل هذه المشكلة باستخدام نمط قائمة المستلمين الذي ينشر الرسائل إلى قائمة بالمستلمين المقصودين، مما يضمن أن العملاء فقط في قائمة المستلمين سيتلقون الرسائل. باستخدام هذا النمط، يمكن للنظام إنشاء قوائم المستلمين مع كافة مثيلات تطبيق العميل المتعلقة بكل تاجر. إرسال رسالة ذات صلة إلى تاجر معين بدوره إرسال الرسالة إلى كل تطبيق في قائمة المستلمين. وهذا يضمن جميع الحالات تطبيق العميل المتعلقة تاجر معين تلقي الرسالة. الجانب السلبي لهذا النهج هو أنه يتطلب نوعا ما من منطق التنفيذ لإدارة المتلقين وإرسال الرسائل. قائمة المستلمين للحصول على تحديثات الأسعار على الرغم من أن نقطة إلى نقطة يمكن أن تكون مصنوعة للعمل، يتيح معرفة ما إذا كان هناك طريقة أفضل. وباستخدام قناة النشر والاشتراك، يمكن للنظام بث رسائل على قنوات محددة للتاجر بدلا من القنوات الخاصة بتطبيق العميل. وبهذه الطريقة، ستتلقى جميع تطبيقات العميل التي تعالج الرسائل لمتاجر واحد الرسالة وتعالجها. النشر-الاشتراك الرسائل للحصول على تحديثات الأسعار الجانب السلبي من استخدام قناة النشر-الاشتراك s هو أن معالجة رسالة فريدة من نوعها ليست مضمونة مع مكونات الخادم. سيكون من الممكن أن تكون مثيلات متعددة من مكون ملقم مثيل وكل مثيل معالجة نفس الرسالة، وربما إرسال أسعار غير صالحة. وإذ يشير إلى تدفق رسالة النظام، فإن اتجاه اتصال واحد فقط مرض مع كل قناة رسالة. الاتصالات من خادم إلى عميل مع نشر الاشتراك هو مرضية في حين أن الاتصال من العميل إلى الخادم ليس والتواصل مع العميل-نقطة مع نقطة إلى نقطة مرضية في حين ملقم العميل ليس كذلك. ونظرا لعدم الحاجة إلى استخدام نفس قناة الرسائل في كلا الاتجاهين، يمكننا استخدام كل قناة قناة اتجاه واحد فقط. سيتم تنفيذ الاتصالات من العميل إلى الخادم مع نقطة إلى نقطة في حين سيتم تنفيذ الاتصالات من خادم إلى عميل مع نشر الاشتراك. وباستخدام هذا المزيج من قناة الرسائل s، يستفيد النظام من الاتصال المباشر مع مكونات الخادم باستخدام الرسائل من نقطة إلى نقطة وطبيعة البث المتعدد للنشر دون أي من العيوب. تدفق الرسالة مع أنواع القنوات حل المشكلات مع الأنماط الأنماط هي أدوات ومجموعات من الأنماط هي صناديق أدوات. أنها تساعد على حل المشاكل. يعتقد البعض أن الأنماط مفيدة فقط أثناء التصميم. بعد تشبيه الأدوات، وهذا هو مثل القول أن الأدوات مفيدة فقط عند بناء منزل، وليس عند إصلاحه. والحقيقة هي أن الأنماط هي أداة مفيدة في جميع مراحل المشروع عند تطبيقها بشكل جيد. في الأقسام التالية سوف نستخدم نفس نمط عملية الاستكشاف استخدمنا في القسم السابق لحل المشاكل في نظامنا العمل الآن. تحديثات بيانات السوق اللمعان يريد التجار أن تضيء خلايا الجدول عند تلقي بيانات سوق جديدة للحصول على سند، مما يشير بوضوح إلى التغييرات. يتلقى عميل جافا رسائل مع بيانات جديدة بتشغيل تحديث ذاكرة التخزين المؤقت لبيانات العميل ثم تومض في الجدول في نهاية المطاف. المشكلة هي أن التحديثات تأتي في كثير من الأحيان. كومة موضوع واجهة المستخدم الرسومية أصبحت مثقلة وتجميد في نهاية المطاف العميل لأنه لا يمكن الرد على تفاعل المستخدم. وسوف نفترض أن وامض هو الأمثل والتركيز على تدفق البيانات من الرسائل من خلال عملية التحديث. فحص بيانات الأداء يظهر تطبيق العميل يتلقى العديد من التحديثات الثانية حدثت بعض التحديثات أقل من ميلي ثانية واحدة وبصرف النظر. اثنين من أنماط التي تبدو وكأنها يمكن أن تساعد على إبطاء تدفق الرسالة هي مجمع ورسالة تصفية. الفكر الأول هو تنفيذ "تصفية الرسائل" للسيطرة على سرعة تدفق الرسالة عن طريق رمي التحديثات تلقت كمية صغيرة من الوقت بعد الرسالة المرجعية. على سبيل المثال، دعنا نقول أننا سنتجاهل الرسائل خلال 5 ميلي ثانية من بعضها البعض. يمكن للذاكرة تصفية ذاكرة التخزين المؤقت وقت آخر رسالة مقبولة وإزالة أي شيء وردت في غضون 5 ميلي ثانية. في حين قد لا تكون التطبيقات الأخرى قادرة على تحمل فقدان البيانات إلى حد ما، وهذا هو مقبول تماما في نظامنا بسبب تواتر التحديثات السعر. تصفية رسالة تستند إلى الوقت المشكلة مع هذا النهج هو أنه لم يتم تحديث كافة حقول البيانات في نفس الوقت. كل السندات لديها ما يقرب من 50 حقول البيانات المعروضة للمستخدم بما في ذلك السعر. ونحن ندرك أنه لا يتم تحديث كل حقل في كل رسالة. إذا كان النظام يتجاهل الرسائل المتتالية، قد يكون جيدا جدا رمي البيانات الهامة. النمط الآخر من الفائدة هو مجمع. يتم استخدام المجمع لإدارة تسوية العديد من الرسائل ذات الصلة في رسالة واحدة، مما يحتمل أن يقلل من تدفق الرسالة. يمكن أن يحتفظ المجمع بنسخة من بيانات السندات من الرسالة المجمعة الأولى، ثم يقوم بتحديث الرسائل المتتالية فقط أو تغييرها. في نهاية المطاف سيتم تمرير بيانات السندات المجمعة في رسالة إلى العميل. في الوقت الراهن، لنفترض أن المجمع سوف يرسل رسالة كل 5 ميلي ثانية مثل "تصفية الرسائل". في وقت لاحق، استكشاف بديل آخر. مجمع مع تحديثات متتالية جزئية المجمع. مثل أي نمط آخر، ليست رصاصة فضية لديها الإيجابيات والنوافذ التي تحتاج إلى استكشاف. واحد ناقص محتمل هو أن تنفيذ مجمع سوف يقلل من حركة الرسائل بمقدار كبير في حالتنا إلا إذا العديد من الرسائل تأتي في غضون وقت قصير نسبيا فيما يتعلق السندات نفسها. من ناحية أخرى، فإننا لا ننجز شيئا إذا كان عميل جافا يتلقى تحديثات فقط لحقل واحد عبر جميع السندات التجار. على سبيل المثال، إذا تلقينا 1000 رسالة في إطار زمني محدد مع 4 سندات من الفائدة، فإننا سوف يقلل من تدفق الرسالة من 1000 إلى 4 رسائل خلال هذا الإطار الزمني. بدلا من ذلك، إذا تلقينا 1000 رسالة في نفس الإطار الزمني مع 750 السندات من الفائدة، ونحن قد خفضت تدفق الرسالة من 1000 إلى 750 رسائل كسب قليل نسبيا لكمية من الجهد. تحليل سريع من تحديثات رسالة يثبت أن عميل جافا يتلقى العديد من الرسائل تحديث الحقول من نفس السندات، وبالتالي الرسائل ذات الصلة. لذلك، مجمع هو في الواقع قرارا جيدا. ما تبقى هو لتحديد كيفية معرفة المجمع عندما ترسل رسالة تم تجميعها. يصف النمط بعض الخوارزميات للمجمع لمعرفة متى يتم إرسال الرسالة. وتشمل هذه الخوارزميات التي تتسبب في أن يقوم المجمع بتجميع محتوياته بعد انقضاء فترة معينة من الوقت، بعد اكتمال جميع الحقول المطلوبة في مجموعة بيانات، وغيرها. المشكلة مع كل هذه النهج هو أن المجمع هو السيطرة على تدفق الرسالة، وليس العميل. والعميل هو عنق الزجاجة الرئيسي في هذه الحالة، وليس تدفق الرسالة. ويرجع السبب في ذلك إلى أن المجمع يقوم بافتراض أن مستهلكي رسائله المخزنة (تطبيق العميل في هذه الحالة) هم المستهلكون المستندون إلى الحدث أو المستهلكين الذين يعتمدون على الأحداث من مصدر خارجي. نحن بحاجة لتحويل العميل إلى المستهلك الاقتراع. أو المستهلك الذي يتحقق باستمرار من الرسائل، وبالتالي فإن تطبيق العميل يمكن التحكم في تدفق الرسالة. يمكننا القيام بذلك عن طريق إنشاء مؤشر ترابط الخلفية التي تدور باستمرار من خلال مجموعة من السندات والتحديثات ومضات أي تغييرات حدثت منذ آخر التكرار. وبهذه الطريقة، يتحكم العميل عند استلام الرسائل ونتيجة لذلك، يضمن عدم تحميلها مطلقا على الرسائل أثناء فترات التحديث العالية. يمكننا بسهولة تنفيذ هذا عن طريق إرسال رسالة الأوامر إلى مجمع بدء تحديث. The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system. Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash With the performance of the flashing fixed, we are now in production. One day the entire system goes down. MQSeries crashes, bringing several components down with it. We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue (an implementation of the Dead Letter Channel ). The queue grows so large that it brings down the entire server. After exploring the messages in the dead letter queue we find they are all expired market data messages. This is caused by slow consumers, or consumers that do not process messages fast enough. While messages are waiting to be processed, they time out (see the Message Expiration pattern) and are sent to the Dead Letter Channel . The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them. We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem. The system design relies on the client application to immediately forward market data update messages to the trading venues. This means the system cannot wait to collect messages and aggregate them. So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently: Competing Consumers and Message Dispatcher . Starting with Competing Consumers . the benefit of this pattern is the parallel processing of incoming messages. This is accomplished using several consumers on the same channel. Only one consumer processes each incoming message leaving the others to process successive messages. Competing Consumers . however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication. Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message. This results in more work without any gain and completely misses the goal of the pattern. This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool. Each consumer can run its own execution thread. One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel . This achieves the parallel processing benefit of Competing Consumers . but works on Publish-Subscribe Channel s. The Message Dispatcher in context Implementing this in our system is simple. We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers. When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message. The result of which is a Message Listener (the Dispatcher) that always returns immediately. This guarantees a steady flow of message processing regardless of the message flow rate. Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s. With this infrastructure, messages can be received by the client application at almost any rate. If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel . The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns. We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel. This greatly improved the problem, but did not completely fix it. This is because the real problem was the client becoming a bottleneck. This couldnt be fixed with a thousand patterns. We later addressed this problem by refactoring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway. So patterns can help design and maintain a system, but dont necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns. We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems. Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems. Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog . Want to read more in depth Check out My Articles . Want to see me live See where I am speaking next . Find the full description of this pattern in: Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley From Enterprise Integration to Enterprise Transformation: My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license. You can reuse the pattern icon, the pattern name, the problem and solution statements (in bold), and the sketch under this license. Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns 187 Integration Patterns in Practice 187 Case Study: Bond Trading SystemDesign Patterns amp Refactoring Hello, world Im SourceMaking. I will tell you a lot of stories about good software architecture and teach you how to create it with design patterns. I will guide you through anti-patterns. common pitfalls and mistakes that people make when they plan, create, and manage software projects. In the end, I will teach you how to smell a bad code and improve it with refactoring . We can start from the very beginning or you can pick a topic of interest below. Patterns are higher-order designs, which occur repeatedly in object-oriented design. They have been formalized, and are generally considered a good development practice. Antipatterns describe common mistakes, errors, and people issues that can cause a software project to fail. Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. Unified Modeling Language makes it possible to describe systems with words and pictures. Especially notable use case diagrams with their stick figures or the widely used class diagrams. TRADE THE PATTERNS THAT REPEAT OVER AND OVER AGAIN Home of the ADX Momentum Trading System. لدينا أشرطة الفيديو واضحة وضوح الشمس سوف المشي لكم من خلال كيفية إجراء التحليل الفني، تشريح المخططات الأسهم والعثور على الصفقات الفوز على أساس أنماط الرسم البياني التي تكرر مرارا وتكرارا في كل سوق. لا يهم إذا كنت تاجر الأوراق المالية، وتاجر العقود الآجلة، فوريكس التتبع أو المستثمر. هذه الأنماط يمكن استخدامها في أي سوق ويمكن تعديلها بسهولة لتتناسب مع أي تاجر الإطار الزمني. بالطبع التعليمية على أساس الفيديو، يجعل t من السهل متابعة وسهلة لتعلم سريعة للبدء في جميع استراتيجياتنا والإعدادات مصممة لتسريع التعلم مجانا تشارتينغ بلاتفورمز حسنا المشي لكم من خلال إعداد الرسوم البيانية والرسوم البيانية الحرة منصات أنظمة التداول كاملة أنظمة التداول كاملة بما في ذلك ونظام زخم أدكس، وغيرها يدرس هذا المقرر من قبل جريج ويتزمان، وهو مدرس تعليم لمدة 16 عاما والمعروف عن له موجزة واضحة ونهج لا معنى له. جريج ويتزمان الرئيس والمؤسس يدرس هذا المقرر من قبل جريج ويتزمان، وهو معلم تعليم لمدة 16 عاما والمعروف عن له موجزة واضحة ولا نهج هراء. شهادات المواد بالطبع من السهل أن نفهم، والأهم من ذلك، طريقة بسيطة. وإنني أتطلع الآن إلى كل يوم تداول ولدي الثقة في عمليات الإعدام التي نفذتها. 8220 الطريقة المستخدمة هنا ليست دخان ومرايا. بالطبع يعلمك خطوة بخطوة. I8217m جعل خطط لتصبح في النهاية تاجر بدوام كامل. إذا كنت غير جادين بشأن التداول الخاص بك 8217 لا تتردد في الانضمام. 8221 إخلاء المسؤولية هناك مخاطر جوهرية في التجارة وأنها ليست مناسبة لجميع المستثمرين. أي النتائج التي تظهر هيبوتيتيكال. جميع التجارة هي محاكاة. يرجى قراءة إخلاء المسؤولية الكاملة من خلال الدخول إلى هذا الموقع، فإنك توافق على الالتزام ببنود وشروط الاستخدام هذه، إذا كنت لا توافق على أي من الشروط والأحكام المذكورة، يحظر عليك استخدام أو الدخول إلى هذا الموقع. Please see our complete Privacy Policy 8369 NW 66 ST 7516 MIAMI, FL 33166

No comments:

Post a Comment