[Java] حالة الاستخدام الجيد لعكا


Answers

إخلاء المسؤولية: أنا صادر من أجل عكا

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

فيما يلي بعض حالات الاستخدام التي قد تضعها في الاعتبار:

  1. معالجة المعاملات (الألعاب عبر الإنترنت ، التمويل ، الإحصاء ، المراهنة ، وسائل التواصل الاجتماعي ، الاتصالات ، ...)
    • رفع مستوى ، خارج النطاق ، التسامح مع الخطأ / HA
  2. خلفية الخدمة (أي صناعة ، أي تطبيق)
    • خدمة بقية ، SOAP ، cometd وغيرها
    • بمثابة محور رسالة / طبقة التكامل
    • رفع مستوى ، خارج النطاق ، التسامح مع الخطأ / HA
  3. التزامن / التوازي الإضافية (أي تطبيق)
    • صيح
    • بسيطة للعمل مع وفهم
    • ما عليك سوى إضافة البرطمانات إلى مشروع JVM الحالي (استخدم Scala أو Java أو Groovy أو JRuby)
  4. معالجة الدفعات (أي صناعة)
    • دمج الجمل للربط مع مصادر البيانات دفعة واحدة
    • يقسم الفاعلون ويسيطرون على أعباء العمل الدفعة
  5. محور الاتصالات (الاتصالات ، وسائط الويب ، الوسائط المتنقلة)
    • رفع مستوى ، خارج النطاق ، التسامح مع الخطأ / HA
  6. لعبة الخادم (الألعاب عبر الإنترنت ، الرهان)
    • رفع مستوى ، خارج النطاق ، التسامح مع الخطأ / HA
  7. BI / datamining / الطحن للأغراض العامة
    • رفع مستوى ، خارج النطاق ، التسامح مع الخطأ / HA
  8. إدراج حالات استخدام لطيفة أخرى هنا
Question

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

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




يمكنك استخدام Akka لعدة أنواع مختلفة من الأشياء.

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

  • تحديثات مباشرة على الموقع (مثل: طرق العرض ، الإعجابات ، ...)
  • عرض تعليقات المستخدم الحية
  • خدمات الإعلام
  • البحث وجميع أنواع الخدمات الأخرى

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

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

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

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




كنت أحاول من يدي على عكا (جافا API). ما حاولت القيام به هو مقارنة نموذج التزامن القائم على نموذج Akka مع نموذج التزامن السهل في جافا (java.util.concurrent classes).

كانت حالة الاستخدام عبارة عن خريطة أساسية بسيطة تقلل من تنفيذ عدد الأحرف. كانت مجموعة البيانات عبارة عن مجموعة من الأوتار المولدة عشوائياً (400 حرف في الطول) ، وحساب عدد حروف العلة فيها.

بالنسبة لـ Akka I ، استخدم BalancedDispatcher (لموازنة التحميل بين سلاسل الرسائل) و RoundRobinRouter (للحفاظ على حد أقصى لأطراف وظيفتي الوظيفية). بالنسبة لجافا ، استخدمت تقنية بسيطة لربط الشوكة (تم تنفيذها بدون خوارزمية سرقة عمل) والتي من شأنها أن تشعب خريطة / تخفض عمليات الإعدام وتنضم إلى النتائج. تم إجراء نتائج متوسطة في حظر الطوابير لجعل الانضمام بالتوازي قدر الإمكان. ربما ، إذا لم أكن مخطئا ، فإن ذلك من شأنه أن يقلد بطريقة ما مفهوم "صندوق البريد" لممثلي عكا ، حيث يتلقون رسائل.

الملاحظة: حتى الأحمال المتوسطة (~ 50000 سلسلة المدخلات) كانت النتائج قابلة للمقارنة ، وتختلف قليلا في التكرارات المختلفة. ومع ذلك ، كلما زادت حملي إلى ~ 100000 ستعلق حل Java. أنا تكوين حل جافا مع 20-30 مؤشرات الترابط تحت هذا الشرط وفشلت في جميع التكرارات.

زيادة الحمل إلى 1000000 ، كان قاتلا لعكا كذلك. يمكنني مشاركة الرمز مع أي شخص مهتم بالتحقق من وجوده.

بالنسبة لي ، يبدو أن عكا يميز بشكل أفضل من حل Java التقليدي المتعدد. وربما كان السبب هو تحت سحر غطاء محرك السيارة سكالا.

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

تم إجراء الاختبار على: إصدار Java: 1.6 IDE: Eclipse 3.7 Windows Vista 32 بت. ذاكرة 3 جيجابايت معالج Intel Core i5 وسرعة ساعة 2.5 غيغاهرتز

يرجى ملاحظة ، يمكن مناقشة نطاق المشكلة المستخدمة للاختبار و حاولت أن أكون عادلة كما سمحت لي جافا المعرفة :-)




نستخدم Akka لمعالجة مكالمات REST بشكل غير متزامن - مع خادم الويب المتزامن (Netty-based) يمكننا تحقيق 10 أضعاف تحسين عدد المستخدمين الذين يتم خدمتهم في كل عقدة / خادم ، مقارنة مع الخيط التقليدي لكل نموذج طلب مستخدم.

أخبر مديرك بأن فاتورة استضافة AWS ستنخفض بعامل 10 وأنها لا تحتاج إلى تفكير! لا أخبره بالأمازون على الرغم من ... :)




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

يوفر Akka نظام المراسلة الذي يشبه عقلية Erlang's "let it crash".

من الأمثلة على ذلك الأشياء التي تحتاج إلى مستويات متفاوتة من المتانة والموثوقية للرسائل:

  • خادم الدردشة
  • طبقة الشبكة لـ MMO
  • مضخة البيانات المالية
  • نظام الإخطار ل iPhone / المحمول / أيا كان التطبيق
  • خادم REST
  • ربما شيء أقرب إلى WebMachine (تخمين)

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

لا تتضايق من مثال خادم الدردشة ، فكر فيه كمثال لفئة معينة من الحل.

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

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




لقد قمت مؤخرًا implemented مثال الخارطة-التخفيض الكنسي في عكا: عدد الكلمات. إذن ، هي حالة استخدام لعكا: أداء أفضل. لقد كان ذلك أكثر من تجربة لممثلي JRuby و Akka أكثر من أي شيء آخر ، لكنه يظهر أيضًا أن Akka ليس Scala أو Java فقط: فهو يعمل على جميع اللغات على JVM.




Links