سؤال

ما هي خدمة القفل الموزعة التي ستستخدمها؟

المتطلبات هي:

  1. الاستبعاد المتبادل (القفل) الذي يمكن رؤيته من خلال العمليات/الآلات المختلفة
  2. قفل... الافراج عن الدلالات
  3. تحرير القفل تلقائيًا بعد مهلة معينة - إذا مات حامل القفل، فسيتم تحريره تلقائيًا بعد X ثانية
  4. تنفيذ جافا
  5. من الجميل أن يكون لديك:. صافي التنفيذ
  6. إذا كان مجانيًا:كشف/تخفيف حالة الجمود
  7. سهولة النشر، انظر الملاحظة أدناه.

لست مهتمًا بإجابات مثل "يمكن إجراؤه عبر قاعدة بيانات" أو "يمكن إجراؤه عبر JavaSpaces" - أعرف ذلك.أنا مهتم بالتنفيذ الجاهز والجاهز والمثبت.

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

المحلول

الطين, ، بما في ذلك الإصدار مفتوح المصدر، قام بتوزيع دلالات القفل باستخدام أي منهما synchronized أو ال java.util.concurrent.ReentrantReadWriteLock - يبدو أن الأخير يناسب متطلباتك.


تحديث

وبما أن السؤال أضاف الآن شرط "الخلط" مع GigaSpaces، فسأقول لا مزجها.سيضيف هذا المزيد من التعقيد إلى مجموعتك التكنولوجية، والجهد المبذول:

  • التكامل، من حيث الكود والبنية التحتية؛
  • إدارة التزامن بينهما؛
  • التعلم/ضبط/تصحيح الطين.

سيكون من الأفضل إنفاقه في إنشاء أو تنفيذ حل قفل يعتمد على GigaSpaces.

نصائح أخرى

طفل جديد على الكتلة هو hazelcast.لقد كنت ألعب به وهو سهل الاستخدام والتكوين بشكل مثير للدهشة.

بقدر ما أستطيع أن أرى، لا ينبغي أن يكون هناك أي تعارض بين Gigaspaces و Hazelcast لأن Hazelcast ليس لديه أي تبعيات، أي.لا يوجد jgroups.jar وما إلى ذلك

هازلكاست:

  1. الاستبعاد المتبادل (القفل)، نعم تنفيذ java.util.concurrency.locks.Lock
  2. تحرير القفل تلقائيًا بعد مهلة معينة، نعم يتم تحرير جميع الأقفال إذا غادر أحد الأعضاء المجموعة
  3. تنفيذ جافا، نعم
  4. من الجميل أن يكون لديك:تطبيق .Net، كلا هو حل Java خالص، وقد يكون من الممكن نقله إلى j#
  5. إذا كان مجانيًا:اكتشاف/تخفيف حالة الجمود، لم يتم بذل أي جهد في Hazelcast للتعامل مع هذا الأمر
  6. سهولة النشر، فهو عبارة عن وعاء واحد يحتوي على ملف تكوين واحد، ويتم نشره كجزء من التطبيق الخاص بك، ولا يلزم إجراء أي عمليات إضافية

تحقق من أباتشي حارس حديقة الحيوان (مشروع فرعي لـ Hadoop) - يوفر المزامنة الموزعة.الوثائق ليست رائعة، ولكن ما يوجد يجعلها تبدو منتجًا مثيرًا للاهتمام - راجع الوصفات للحصول على أفكار حول كيفية استخدام Zookeeper.

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

يمكنك تصميم استراتيجيات قفل مختلفة وهي تقدم حلاً لموت حامل القفل (العقد المؤقتة).

أوصي باستخدام ريديسون انه ريديس استنادا إلى شبكة البيانات في الذاكرة.يقوم بتنفيذ هياكل بيانات Java المألوفة بما في ذلك الموزعة java.util.Lock و java.util.concurrent.ReentrantReadWriteLock أشياء.بما في ذلك القدرة على إعداد LeaseTime. Lock مثال الاستخدام:

Redisson redisson = Redisson.create(config);

Lock lock = redisson.getLock("anyLock");
try {
   // unlock automatically after 10 seconds of hold
   lock.lock(10, TimeUnit.SECONDS);

} finally {
   lock.unlock();
}

...

redisson.shutdown();

يدعم بائعي السحابة مثل Azure وAWS.

حارس حديقة الحيوان أصبح المعيار الفعلي في القفل الموزع بمساعدة أباتشي المنسق نطاق.تحقق من الأقفال في وصفات للمزيد من المعلومات.

يتضمن Oracle Coherence، المستقر والناضج جدًا، دعم الاستبعاد المتبادل:

  cache.lock(key, -1);
    try {
      // .. add your critical code here
    } finally {
      cache.unlock(key);
    }

تنجو الأقفال من فشل الخادم، وإعادة التشغيل، وما إلى ذلك.

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

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