كيف يمكنك الحفاظ على اثنين ذات الصلة ، ولكن منفصل, أنظمة متزامنة مع بعضها البعض ؟

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

سؤال

بلدي الحالي مشروع تطوير له جانبان إلى ذلك.أولا العامة موقع على شبكة الانترنت حيث يمكن للمستخدمين الخارجيين تقديم وتحديث المعلومات لأغراض مختلفة.هذه المعلومات ثم حفظها إلى SQL Server المحلية في كولو المرفق.

الجانب الثاني هو تطبيق داخلي الموظفين التي تستخدم لإدارة نفس تلك السجلات (من الناحية النظرية) وتوفير تحديثات الحالة ، الموافقات ، إلخ.هذا التطبيق هو استضافت داخل جدار الحماية للشركات الخاصة المحلية قاعدة بيانات SQL Server.

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

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

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

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

حتى الآن, لقد فكرت في استخدام الأنواع التالية من النهج:

  1. ثنائية الاتجاه النسخ المتماثل
  2. خدمة ويب واجهات على كلا الجانبين مع رمز لمزامنة التغييرات كما أنها مصنوعة (في الوقت الحقيقي).
  3. خدمة ويب واجهات على كلا الجانبين مع التعليمات البرمجية بشكل غير متزامن لمزامنة التغييرات (باستخدام الطوابير آلية).

أي نصيحة ؟ وقد أي شخص من أي واجهت هذه المشكلة من قبل ؟ هل حان حتى مع حل التي عملت بشكل جيد بالنسبة لك ؟

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

المحلول

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

يجب أن تكون قادرة على تحقيق التزامن في الوقت الحقيقي بالقرب من دون النفقات العامة أو تعقيد شيء مثل النسخ المتماثل.

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

هناك بعض الأدوات مفتوحة المصدر التي يمكن أن تجعل حقا هذا من السهل بالنسبة لك إذا كنت تستخدم .صافي (لا سيما إذا كنت ترغب في استخدام MSMQ).

  1. nServiceBus قبل Udi دهان
  2. النقل الجماعي من قبل احد الباعة و كريس باترسون

هناك منتجات تجارية أيضا ، إذا كنت تفكر في التجاري الخيار ترى هنا للحصول على قائمة من الخيارات .صافي.بالطبع, WCF يمكن أن تفعل المتزامن الرسائل باستخدام MSMQ الارتباطات ، ولكن أداة مثل nServiceBus أو MassTransit سوف تعطيك بسيط جدا إرسال/تلقي أو Pub/Sub API من شأنها أن تجعل شرط بسيط جدا الوظيفي.

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

قد ترغب أيضا في النظر في القراءة Udi دهان's بلوق, الاستماع إلى بعض من له دبليو.هنا المزيد من موارد جيدة للحصول على انك بدأته.

نصائح أخرى

أنا في منتصف الطريق من خلال مشروع مماثل إلا علي مواقع متعددة التي تحتاج إلى أن نضع في المزامنة عبر اتصالات بطيئة (dial-up في بعض الحالات).

أولا تحتاج إلى تعقب التغييرات إذا كان يمكنك استخدام SQL 2008 (حتى Express الإصدار يكفي إذا كان 2Gb الحد ليس مشكلة) وهذا تخفيف الألم إلى حد كبير ، فقط تشغيل تعقب التغييرات على قاعدة البيانات في كل جدول.نحن باستخدام SQL Server 2008 في مكتب رئيس مع تمديد المخطط و SQL اكسبرس 2008 في كل موقع مع مجموعة فرعية من البيانات محدودة المخطط.

ثانيا تحتاج إلى تعقب التغييرات الخاصة بك ، خدمات المزامنة لا حيلة بشكل جيد و يدعم استخدام WCF بوابة إلى قاعدة البيانات الرئيسية.في هذا المثال سوف تحتاج إلى استخدام المزامنة باستخدام SQL Express عينة كنقطة انطلاق ، علما أنه يستند إلى SQL server 2005 لذلك سوف تحتاج إلى تحديث إلى الاستفادة من تغيير ميزات تتبع في عام 2008.افتراضيا "خدمات المزامنة" يستخدم SQL server CE على العملاء ، والتي أنا متأكد لا يكفي في قضيتك.سوف تحتاج الخدمة التي يتم تشغيلها على خادم الويب الخاص بك دوريا (يمكن أن تكون في كثير من الأحيان كما كل 10 ثوان إذا كنت تريد) يعمل على مزامنة (طريقة).هذا وسوف اقول الرئيسي الخاص بك قاعدة بيانات حول التغييرات التي تم إجراؤها محليا ثم يسأل الخادم عن جميع التغييرات التي أجريت هناك.يمكنك إعداد الحصول على تطبيق SQL البرمجية استدعاء الإجراءات المخزنة و يمكنك إضافة معالجات الأحداث التعامل مع الصراعات (مثلا ، تحديث العميل مقابل Server Update) وحلها وفقا لذلك في كل نهاية.

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

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

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

وهو أقل بكثير فقت جزء من SQL Server و تستحق نظرة.

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

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