Ahmed Aljaberi
Ahmed Aljaberi

@ahmed_aljabri

12 تغريدة 31 قراءة Nov 05, 2019
قد لا يهتم الكثير منكم بإسم تقنية كـOrleans خصوصا من لا يستخدم تقنيات مايكروسوفت فقد تكون مجرد شيء يخص فقط المايكروسوفتيين فقط لكن للحديث عنها شجون فالتقنية ليست جديدة بل من السبعينات و تتعلق بالObject Oriented الأصيلة كما كانت حين ظهرت في Smalltalk و كما تستخدمها Erlang - -سلسلة
الأصل وراء التقنية هو الـActor Model و هي طريقة برمجية يقسم فيها البرنامج إلى وحدات صغيرة اشبه بكمبيوترات مستقلة, كلObject يسمى هنا Actor فيه وحدة معالجة و تخزين و اتصال. يتوزعون عبر مجموعة Servers تهتم بنفسها بموضوع الScalability و الConcurrency. أي مناسبة للDistributed Systems
فكرة الActor Model طبقت في لغة Smalltalk و تمثل لب فكرة Alan Kay بشأن الOOP أي ان كل شيء مجرد Message بين Objects مثلما الخلايا تتخاطب مع نفسها لتكون بتخاطبها في النهاية الكائن الحي. كما ان الActor Model له استناد رياضي بعكس الOOP الحالية.
لغة Erlang مثلاً هي لغة Functional في الأصل , صرح مصممها Joe Armstrong بأنها اللغة الوحيدة الReal OOP و ذاك لانها تعتمد الActor Model و وافقه Alan Kay بأنها الأقرب لمفهومه عن الOOP. مع ان Erlang بدأت كمكتبة للغة Prolog لكن قوة الفكرة حولتها للغة مستقلة لها هذه الشهرة.
مايكروسوفت لديها الآن Orleans Framework و في السابق كانت هناك مكتبة اسمها Akka.NET مثلما هناك مكتبة Akka في جافا, او Pykka في بايثون نفس الفكرة لكن مايكروسوفت طورت عليها قليلاً بأن جعلتها Virtual بمعنى انك تستطيع ان تنادي الObject حتى لو لم يكن موجود في الذاكرة!.
مايكروسوفت بدلاً من تسمية Actors سمتها Grains ( حبوب تمثل Objects) معزولة عن بعضها و الحبوب بداخل Silos (صوامع تمثل Servers مع امكانية استضافة اكثر من Silo في سيرفر) هذا الفصل بين الGrains يجعل الGrain الواحدة عديمة فائدة أي ان البرنامج يجب ان تعمل الObjects فيه كمجتمع.
هناك مقولة "One Ant is no Ant" حيث أجري بحث على النمل و و جدوا ان النملة التي تعيش خارج مستعمرة النمل تعيش عُشر حياتها فيما لو كانت في مستعمرة بالرغم من توفير الغذاء و الماء لها. و من هنا نشأت تلك مقولة التي ستجدها تتكرر عندما يتم شرح الActor Model ( العمل الجماعي بين الObjects)
نعود لOrleans , الفكرة الأساسية هي بناء نظام جاهزة للCloud او مثل ما تكلمنا عنه في سلسلة سابقة Cloud Native لأنه ليس كل برنامج بالضرورة جاهز انه يكون مناسب للCloud. في الطرق العادية كل الApp يحصل له Scale لكن هنا فقط الObject الأكثر طلباً إن لزم الأمر.
طريقة البرمجة سهلة في Orleans حيث يتم استدعاء اي ميثود بداخل الGrain بطريقة Async ولا نحتاج هنا إلى عمل Initialize للGrain فكما ذكرت فهو ينشيء نفسه حينما يستدعى ثم يدمر نفسه بدون تدخل منا بعكس ما كان في Akka.NET و لهذا اسمته مايكروسوفت Virtual Actor.
عملياً بيكون عندنا مثلاً تطبيق يتخاطب مع Web API و هي بدورها تتكلم مع الSilos اللي قد تكون موزعة على اكثر من سيرفر لأجل إدارة الRequests بغض النظر عن مكان الGrain في طريقة اشبه بالData Sharding لكن هنا لدينا Objects Sharding اذا فشل احدها يقوم الاخر بالعمل على مستوى الObjects
بهذه التقنية لسنا بحاجة أن نقلق بشأن الThreads او الConcurrency بشكل عام او بالShared State , فهي هنا مضمنة و لا تحتاج لأي تدخل من المبرمج في تمكينها او ادارتها.
في هذا الفيديو Carl Hewitt مصمم الطريقة يشرح مفهومها
youtu.be
هنا Sergey Bykov من مايكروسوفت مطور Orleans يتحدث عنها
youtu.be
هنا Milica Panzova تقدم عرض جميل و شامل عن برنامج حقيقي
youtu.be

جاري تحميل الاقتراحات...