تقديم اورليانز 3.0

هذا موقع ضيف من فريق Orleans. إن Orleans هو إطار عمل مشترك بين الأنظمة الأساسية لإنشاء التطبيقات الموزعة باستخدام .NET. لمزيد من المعلومات ، راجع https://github.com/dotnet/orleans .

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



تغييرات كبيرة منذ اورليانز 2.0


أُطلق سراح Orleans 2.0 منذ ما يزيد قليلاً عن 18 شهرًا ومنذ ذلك الحين قطعت Orleans خطوات كبيرة. بعض التغييرات في العنوان منذ 2.0 هي:

  • معاملات ACID الموزعة - يمكن للحبوب المتعددة أن تنضم إلى الصفقة بغض النظر عن مكان تخزين حالتها
  • برنامج جدولة جديد ، مما أدى إلى زيادة الأداء بنسبة تزيد عن 30٪ في بعض الحالات
  • مولد رمز جديد بناءً على تحليل كود Roslyn
  • إعادة كتابة عضوية الكتلة لتحسين سرعة الاسترداد
  • دعم الاستضافة المشتركة

بالإضافة إلى العديد من التحسينات والإصلاحات الأخرى.

منذ أيام العمل على Orleans 2.0 ، أنشأ الفريق دورة فعالة لتنفيذ أو دمج ميزات معينة ، مثل مضيف عام ، وخيارات محددة ، بالتعاون الوثيق مع فريق .NET قبل أن تصبح هذه الميزات جاهزة لتكون جزءًا من .NET. الإصدارات الأساسية ، والمساهمة في التعليقات والتحسينات "المنبع" ، وفي الإصدارات اللاحقة التبديل إلى تطبيقاتهم النهائية التي يتم شحنها مع إصدارات .NET. أثناء تطوير الإصدار 3.0 من Orleans ، استمرت هذه الدورة باستخدام رمز Bedrock الذي استخدمته Orleans 3.0.0-beta1 قبل أن يتم شحنها أخيرًا كجزء من .NET 3.0. وبالمثل ، تم تنفيذ دعم TLS على اتصالات مأخذ توصيل TCP كجزء من Orleans 3.0 ، والمقصود منه أن يصبح جزءًا من إصدار مستقبلي من .NET Core. نحن نعتبر هذا التعاون المستمر مساهمتنا في النظام البيئي .NET الأكبر ، بروح المصدر المفتوح الحقيقية.

استبدال طبقة الشبكات باستخدام ASP.NET Bedrock


كان دعم تأمين الاتصالات مع TLS طلبًا رئيسيًا لبعض الوقت ، سواء من المجتمع أو من الشركاء الداخليين. مع الإصدار 3.0 ، فإننا نقدم دعم TLS ، المتوفر عبر حزمة Microsoft.Orleans.Connections.Security . لمزيد من المعلومات ، راجع نموذج TransportLayerSecurity .

كان تنفيذ دعم TLS مهمة كبرى نظرًا لكيفية تنفيذ طبقة الشبكات في الإصدارات السابقة من Orleans: لا يمكن تكييفها بسهولة لاستخدام SslStream ، وهي الطريقة الأكثر شيوعًا لتنفيذ TLS. مع TLS كقوة دافعة لدينا ، شرعنا في رحلة لإعادة كتابة طبقة الشبكات في Orleans.

يستبدل Orleans 3.0 طبقة الشبكة بالكامل بطبقة مبنية على أعلى Project Bedrock ، وهي مبادرة من فريق ASP.NET. الهدف من Bedrock هو مساعدة المطورين على بناء عملاء وخوادم شبكة سريعة وقوية.

عمل فريق ASP.NET وفريق Orleans معًا على تصميم التجريدات التي تدعم كلاً من عملاء الشبكة والخوادم ، وهي أدوات نقل غير قابلة للتخصيص ، ويمكن تخصيصها باستخدام البرامج الوسيطة. تتيح لنا هذه التجريدات تغيير نقل الشبكة عبر التكوين ، دون تعديل رمز الشبكة الداخلي الخاص بشركة Orleans. يتم تطبيق دعم TLS من Orleans كأداة وسيطة لـ Bedrock ونعتزم جعل هذا عامًا بحيث يمكن مشاركته مع الآخرين في النظام البيئي .NET.

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

تضمنت إعادة كتابة طبقة الشبكات أيضًا استبدال تجمع المخزن المؤقت المخصص الخاص بنا بالاعتماد على MemoryPool<byte> وفي إجراء هذا التغيير ، تستفيد عملية التسلسل الآن من Span<T> . تستخدم الآن بعض مسارات الأكواد التي كانت تعتمد في السابق على الحجب عبر مؤشرات BlockingCollection<T> مخصصة تسمى BlockingCollection<T> Channel<T> لتمرير الرسائل بشكل غير متزامن. ينتج عن هذا عدد أقل من مؤشرات الترابط المخصصة ، ونقل العمل إلى تجمع مؤشرات ترابط .NET بدلاً من ذلك.

بقي بروتوكول السلك الأساسي لأورليانز ثابتًا منذ إصداره الأولي. باستخدام Orleans 3.0 ، أضفنا دعمًا للترقية التدريجية لبروتوكول الشبكة عبر التفاوض على البروتوكول. يتيح دعم مفاوضة البروتوكول المضافة في Orleans 3.0 تحسينات في المستقبل ، مثل تخصيص جهاز التسلسل الأساسي ، مع الحفاظ على التوافق مع الإصدارات السابقة. تتمثل إحدى ميزات بروتوكول الشبكات الجديدة في دعم اتصالات صومعة ثنائية الاتجاه بدلاً من أزواج اتصال simplex التي تم إنشاؤها بين الصوامع سابقًا. يمكن تكوين إصدار البروتوكول عبر ConnectionOptions.ProtocolVersion .

استضافة مشتركة عبر مضيف عام


أصبح الاستضافة المشتركة لـ Orleans مع إطارات أخرى ، مثل ASP.NET Core ، في نفس العملية الآن أسهل من ذي قبل بفضل .NET Generic Host .

فيما يلي مثال على إضافة Orleans إلى جانب ASP.NET Core إلى مضيف باستخدام UseOrleans :
 var host = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => { // Configure ASP.NET Core webBuilder.UseStartup<Startup>(); }) .UseOrleans(siloBuilder => { // Configure Orleans siloBuilder.UseLocalHostClustering(); }) .ConfigureLogging(logging => { /* Configure cross-cutting concerns such as logging */ }) .ConfigureServices(services => { /* Configure shared services */ }) .UseConsoleLifetime() .Build(); // Start the host and wait for it to stop. await host.RunAsync(); 

باستخدام منشئ المضيف العام ، ستشارك Orleans موفر الخدمة مع الخدمات المستضافة الأخرى. هذا يمنح هذه الخدمات الوصول إلى أورليانز. على سبيل المثال ، يمكن للمطور ضخ IClusterClient أو IGrainFactory في وحدة تحكم ASP.NET Core MVC واستدعاء الحبوب مباشرة من تطبيق MVC.

يمكن استخدام هذه الوظيفة لتبسيط طوبولوجيا النشر أو لإضافة وظائف إضافية إلى تطبيق موجود. تستخدم بعض الفرق الاستضافة المشتركة داخليًا لإضافة تحقيقات Kubernetes الحيوية والاستعدادية لصوامع أورليانز الخاصة بهم باستخدام ASP.NET Core Health Checks .

تحسينات الموثوقية


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

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

تحسين القابلية للتوسعة


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

تسمح امتدادات الحبوب بإضافة سلوك إضافي إلى الحبوب في وقت التشغيل عن طريق إرفاق مكون جديد بواجهة الاتصال الخاصة به. على سبيل المثال ، تستخدم معاملات Orleans امتدادات الحبوب لإضافة أساليب دورة حياة المعاملة ، مثل Prepare و Commit و Abort ، إلى حبة شفافة للمستخدم. تتوفر الآن امتدادات الحبوب لخدمات الحبوب وأهداف النظام.

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

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

انضم إلى الجهد


والآن بعد أن أصبح Orleans 3.0 خارج الباب ، فإننا نحول انتباهنا إلى الإصدارات المستقبلية - ولدينا بعض الخطط المثيرة! تعال وانضم إلى مجتمعنا الدافئ والترحيب على GitHub و Gitter وساعدنا في جعل هذه الخطط حقيقة واقعة.

فريق اورليانز

Source: https://habr.com/ru/post/ar474226/


All Articles