تحويل بعض البرامج من لغة جافا إلى لغة Go

السلام عليكم ورحمة الله

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

في عام 2017 بدأت تعلم لغة Go وكتبت بها عدد من البرامج الصغيرة ، لكن لم أعد أذكر ماهو السبب الرئيس الذي دفعني لتعلمها واستخدامها، لكن على ما أذكر كُنت أتكلم مع أحد المبرمجين أظنه في أوروبا من مبرمجي لغة باسكال، وقال أنه يستخدم لغة Go في بعض البرامج بالإضافة إلى لغة باسكال، في نوعية معينة من البرامج أظنها خدمات الويب، فكان هذا دافعاً لتعلمها مرة أخرى، حيث جربتها مرة ولم تعجبني ولم استمر. ما لم يعجبني هو عدم توفر أداة تطوير ومحرر بقوة NetBeans الذي تعودت على استخدامه مع لغة البرمجة جافا، وكان هذا في عام 2015 فكانت تجربتي معها سلبية وذكرت ذلك في مقالة كتبتها كانت تتكلم عن أهمية المحرر واﻷدوات مع لغة البرمجة. لكن هذه المرة في عام 2017 وجدت محرر بسيط و مناسب لهذه اللغة اسمه LiteIDE فكانت تجربتي معه ناجحة وما زلت استخدمه مع لغة Go إلى اﻵن.

Liteide

بعد نجاح البرامج اﻷولى بلغة Golang ، حولت إحدى خدمات الويب التي كانت مكتوبة بلغة جافا إلى هذه اللغة الجديدة، وهي خدمة ويب نستخدمها في برامج مرتبطة بمقسم اﻹتصالات Asterisk لإدارته وربط البرامج التي تحتاج التخاطب معه، وقد وضعنا هذا البرنامج كبرنامج مفتوح المصدر في GitHub في هذا الرابط اسمه GoAgent

https://github.com/motaz/goagent

أحد ما يميّز برامج لغة Go هي خفتها، خصوصاً في مثل هذا النوع من البرامج : خدمات الويب أو ما يُعرف حديثاً Microservices وهي طريقة جديدة لمعمارية البرامج الكبيرة لتبسيطها إلى خدمات مستقلة قائمة بذاتها ويمكن استخدام أكثر من لغة برمجة في نظام واحد، حيث أن لكل لغة برمجة قوتها في مجال معين وفي كل زمان تكون هناك لغة سائدة يتوفر لها مبرمجون ودعم فني في اﻹنترنت، لذلك كانت هذه المعمارية الجديدة تتيح الاستبدال الجزئي لتقنيات الأنظمة الكبيرة بدلاً من إعادة كتابتها كاملة بلغة جديدة. وربما اتكلم عن هذه المعمارية في تدوينة منفصلة، حيث أقمت محاضرة لزملائنا عنها قبل عدة أعوام، ثم كانت لنا تجربة جيدة في تبني هذه المدرسة بدلاً عن الطريقة القديمة التي تُسمى Monolithic أي برنامج ذو قطعة واحدة غير المتجزيء إلى أجزاء صغيرة.

هذه صورة للبرنامج goagent الجديد يعمل منذ عام 2018 دون توقف في أحد المخدمات:

goagent

في عام 2018 كانت هُناك مشكلة في أحد برامج خدمات الويب المكتوبة بلغة جافا دائماً تتوقف عن العمل ويتوقف معها برنامج Tomcat المستضافة فيه، وكان هذه المخدم قليل الموارد ذو أربعة أنوية و 2 قيقابات من الذاكرة، وهو مخدم قديم  كان مع عدد من المخدمات في طريقه إلى مثواه اﻷخير في المخزن لكننا طلبنا أن يعطونا كل هذه المخدمات لمحاولة الاستفادة منها ولو مؤقتاً لإعادة تشغيلها بنظام لينكس وكان هذا في عام 2013 ومازالت تعمل إلى اﻵن. بعد استبدال خدمة الويب هذه من لغة جافا بإعادة كتابتها بلغة Go عملت بدون مشاكل وبدون أي توقف وذلك لأن خدمات الويب المكتوبة بلغة Go اقل استهلاكاً للموارد، مقارنة ببرامج جافا التي تسخدم الذاكرة بشراهة أكبر. ومازالت تلك الخدمة تعمل إلى اﻵن دون توقف ودون الحاجة إلى ترقية هذا المخدم أو حتى زيادة ذاكرته، وهذه هي مواصفاته: المعالج 4 أنوية و الذاكرة 2 قيقيا:

adapter

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

 

3 رأي حول “تحويل بعض البرامج من لغة جافا إلى لغة Go

  1. رمضان كريم أستاذ معتز، استمتعت بقراءة التدوينة لكني لن أشتت نفسي بتعلم لغات جديدة، يكفيني تعدد الأنظمة التي أبرمج لها 😂

    1. الله أكرم، ليس المقصود لغة برمجة بعينها في هذه التدوينة، لكنها قصة وتجربة احببت مشاركتها، وفي معناها أن الكفاءة والاعتمادية يمكن تحقيقها بتغيير التقنية البرمجية في نفس العتاد

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

شعار ووردبريس.كوم

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google photo

أنت تعلق بإستخدام حساب Google. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

Connecting to %s