سؤال

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

يبدو Erlang وكأنه حل أكثر استقرارًا ولكنه يتطلب المزيد من التعلم والكثير من الغوص في نموذج اللغة الوظيفية. ويبدو أن Erlang يجعل الأمر أفضل بكثير عندما يتعلق الأمر بوحدة المعالجة المركزية Multi Cores (إصلاحني إذا كنت مخطئًا).

ولكن ما الذي يجب أن أختاره؟ أيهما أفضل في المنظور القصير/طويل الأجل؟

هدفي هو تعلم أداة تجعل تحجيم مشاريع الويب الخاصة بي تحت الحمل العالي أسهل من اللغات التقليدية.

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

المحلول

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

نصائح أخرى

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

  • تستخدم Node Engine V8 من Google لتجميع JavaScript فعليًا في رمز الجهاز. لذلك العقدة هي في الواقع سريعة جدا. هذا علاوة على فوائد السرعة التي توفرها البرمجة التي تعتمد على الحدث و IO غير المحظورة.
  • العقدة لديها مجتمع نشط جدا. قفز على مجموعة IRC الخاصة بهم على Freenode وسترى ما أعنيه
  • لقد لاحظت أن التعليقات أعلاه دفع Erlang على أساس أنه سيكون من المفيد تعلم لغة البرمجة الوظيفية. على الرغم من أنني أوافق على أنه من المهم توسيع نطاق مهاراتك والحصول على واحدة من تلك الموجودة تحت حزامك ، إلا أنه يجب ألا تبني مشروعًا على حقيقة أنك تريد تعلم أسلوب برمجة جديد
  • من ناحية أخرى ، فإن JavaScript بالفعل في نموذج تشعر بالراحة في الكتابة فيه! بالإضافة إلى أنه JavaScript ، لذلك عندما تكتب رمزًا جانبيًا للعميل ، ستبدو وتشعر ثابتًا.
  • لقد قام مجتمع العقدة بالفعل بضخ أطنان من الوحدات النمطية! هناك وحدات لـ Redis و Mongodb و Couch وماذا لديك. وحدة جيدة أخرى للنظر فيها يعبر (فكر في سيناترا للعقدة)

تفحص ال فيديو على مدونة Yahoo لـ Ryan Dahl ، الرجل الذي كتب العقدة بالفعل. أعتقد أن هذا سيساعدك في إعطائك فكرة أفضل في مكان وجود العقدة ، وأين تسير.

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

أنا مبرمج Erlang منذ فترة طويلة ، وقد دفعني هذا السؤال إلى إلقاء نظرة على Node.js. يبدو جيدا لعنة جيدة.

يبدو أنك تحتاج إلى تفرخ عمليات متعددة للاستفادة من النوى المتعددة. لا يمكنني رؤية أي شيء عن تعيين تقارب المعالج. يمكنك استخدام Taskset على Linux ، ولكن ربما يجب أن تكون محددة وتعيينها في البرنامج.

لاحظت أيضًا أن دعم المنصة قد يكون أضعف قليلاً. على وجه التحديد ، يبدو أنك ستحتاج إلى التشغيل تحت Cygwin لدعم Windows.

تبدو جيدة رغم ذلك.


تعديل

Node.js لديها الآن دعم أصلي لنظام التشغيل Windows.

أنا أنظر إلى نفس البديلين اللذين أنت ، Gotts ، لمشاريع متعددة.

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

وهناك اعتبار آخر هو أن Erlang يتجاوز مجرد نوى متعددة ، يمكن أن تتوسع إلى مركز بيانات كامل. لا أرى آلية مدمجة في Node.js تتيح لي إرسال عملية JS أخرى دون رعاية الجهاز الذي يتم تشغيله ، ولكن تم تصميمه مباشرة في Erlang على أدنى مستويات. إذا لم تكن مشكلتك كبيرة بما يكفي لتحتاج إلى آلات متعددة أو إذا لم تتطلب عمليات تعاون متعددة ، فمن المحتمل أن تكون هذه الميزة مهمة ، لذلك يجب أن تتجاهلها.

إرلانج هو في الواقع تجمع عميق للغوص فيه. أود أن أقترح كتابة برنامج وظيفي مستقل أولاً قبل البدء في إنشاء تطبيقات الويب. الخطوة الأولى الأسهل ، نظرًا لأنك تبدو مرتاحًا مع JavaScript ، تتمثل في محاولة برمجة JS بأسلوب أكثر وظيفية. إذا كنت تستخدم jQuery أو النموذج الأولي ، فقد بدأت بالفعل في هذا المسار. حاول الارتداد بين البرمجة الوظيفية الخالصة في إرلانج أو أحد أقاربها (Haskell ، F#، Scala ...) و JS الوظيفية.

بمجرد أن تشعر بالراحة مع البرمجة الوظيفية ، ابحث عن أحد أطر عمل Erlang العديدة ؛ ربما يجب ألا تكتب تطبيقك مباشرة إلى شيء منخفض المستوى inets في هذه المرحلة المتأخرة. انظر إلى شيء مثل نتروجين, ، على سبيل المثال.

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

  1. هل تقوم بإعادة استخدام التعليمات البرمجية الحالية في أي من هذه اللغات (سواء من حيث الرمز المصدر ، وتجربة المبرمج!)
  2. هل تحتاج/تريد التحديثات أثناء التنقل دون إيقاف التطبيق (هذا هو المكان الذي يفوز فيه إرلانج بشكل افتراضي-تم تصميم وقت تشغيله لهذه الحالة ، ويحتوي OTP على جميع الأدوات اللازمة)
  3. ما حجم حركة المرور المتوقعة ، من حيث العمليات المنفصلة المتزامنة ، وليس النطاق الترددي؟
  4. ما مدى "موازية" العمليات التي تقوم بها لكل طلب؟

لدى Erlang حقًا نظامًا موزعًا متوازيًا في الشبكة. اعتمادًا على ما هو بالضبط المشروع ، قد يفوق توفر تنفيذ ناضج لهذا النظام أي مشكلات تتعلق بتعلم لغة جديدة. هناك أيضًا لغتان أخريان يعملان على Erlang VM والتي يمكنك استخدامها ، تشبه Ruby/Python ريا و erlang بنكهة.

هناك خيار آخر هو استخدام كليهما ، خاصة مع استخدام إرلانج كنوع من "المحور". لست متأكدًا مما إذا كان لدى Node.js نظام واجهة وظائف أجنبية ، ولكن إذا كان لديه ، فإن Erlang لديه مكتبة C لعمليات خارجية للتفاعل مع النظام تمامًا مثل أي عملية Erlang أخرى.

يبدو أن Erlang أفضل للنشر في خادم منخفض نسبيًا (512 ميجابايت 4-Core 2.4 جيجا هرتز AMD VM). هذا من تجربة Syncpad مقارنة تطبيقات erlang vs node.js لتطبيق خادم السبورة الافتراضي.

هناك لغة أخرى على نفس VM التي هو erlang -> إكسير

إنه بديل مثير للاهتمام للغاية لإرلانج ، تحقق من هذا.

كما أن لديها إطار عمل ويب سريع النمو على أساس IT-> إطار فينيكس

لا يمكن أن يحقق WhatsApp مستوى قابلية التوسع والموثوقية بدون Erlang https://www.youtube.com/watch؟v=c12cyautxxs

سأفضل إرلانج على العقدة. إذا كنت تريد التزامن ، يمكن استبدال العقدة بواسطة Erlang أو Golang بسبب عملياتها الخفيفة.

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

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