كيف نقلنا الفريق بأكمله إلى لغة أخرى في يوم واحد (في الواقع لا)


بداية قالب "التأريض" السريع لمطوري PHP في Go

منذ 15 عامًا ، كنا نفعل خلفية في PHP. وبمجرد اتخاذ قرار استراتيجي: أولاً ، أعد كتابة الأماكن الأكثر تحميلًا على Go ، ثم قم بتطوير خدمات جديدة عليه.

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

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

سوف أخبرك في خطوات كيفية تكرار هذه التجربة معك. وحول نتائج التنفيذ لدينا. وحول ما يحدث في رأس مطور PHP عندما يرى لغة جديدة.

لقد بدأنا في إعداد القالب و CI / CD ، والذي يسمح لك بالإغلاق في 15 ثانية. لكتابة ذلك بنفسك ، تحتاج حوالي أسبوعين. لقد فعلنا ذلك مقدما.

الخطوة 1. أخبر جولانج


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

الخطوة 2. الوثائق


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

golang.org/doc
tour.golang.org

بالإضافة إلى الذهاب كبار الاتصالات داخل.

الخطوة 3. المجموعات


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

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

الخطوة 4. العمل الخفي


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

سأذكر فقط الوظائف التي تم وضعها في القالب:

  • التكامل مع k8s.
  • تصدير المقاييس إلى بروميثيوس.
  • التكوين من خلال متغيرات البيئة.
  • خادم المتشعب.
  • Opentracing.
  • مسجل.

لقد عملنا على دراسة Kubernetes لفترة طويلة وكحل اخترنا OpenShift ، والذي قدم فرصًا كبيرة لتخصيص CI / CD وتكوينه. لذلك شحذ القالب مباشرة تحت k8s. ينشئ التطبيق الذي تم إنشاؤه في OpenShift المستودع ، ويجمع الهيكل العظمي للتطبيق ، والخدمة في k8s ، ويطبق سياسات الأمان ، ويجمع البيانات الثنائية ، وينشر في k8s وفي أقل من دقيقة ، تكون الخدمة متاحة على الشبكة. لذا أصبح hackathon أيضًا حدثًا تم فيه تقديم المطورين إلى PaaS في المستقبل.

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

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

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

الخطوة 5. هاكاثون نفسها


لأسباب واضحة (الأسرة ، الاسترخاء) ، فشل البعض يوم السبت ، لذلك قمنا بتقسيم 15 شخصًا إلى مكالمات.

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

تحدثوا عن ميزات النشر والتطوير لـ Kubernetes (التكوين ، التسجيل ، المقاييس ، العمل مع عينات جاهزة ، تخصيص الموارد للمعالج والذاكرة ، إلخ). حاولوا نشر "مرحبا ، العالم!"



الرجال أنفسهم خلق الخدمات. لقد فوجئت بسرور بساطة وسهولة استخدام القالب. كان لدى شخص ما الوقت الكافي للتدرب على Golang ، شخص ما قام للتو بالتوثيق.



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

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

من التشوهات المعرفية للوسط PHP ، تجدر الإشارة إلى الطريقة "القديمة" في التفكير في موضوع واحد. تتميز Go بنموذج تنافسي جيد ومضمّن متعدد العمليات لم يكن في PHP. تبين أن الشفرة قابلة للقراءة للغاية ، والتي توقعها عدد قليل جدًا.

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

الميزة الثانية هي ألم كبير مع عودة الأخطاء. إذا كان تعدد مؤشرات الترابط مجرد بنية مختلفة وكان من السهل التعود عليه في غضون ساعة أو ساعتين ، ففي حالة حدوث أخطاء عند التبديل من PHP ، فهذا تغيير في نموذج التفكير بالكامل. إرجاع الأخطاء من الوظائف هو النموذج الرئيسي في Go. في PHP ، عادةً ما يلف try-catch الأشياء المحيطة. وهنا هو مطلوب لمعالجة صراحة في الجسم وظيفة. تعرض بعض الناس للقصف الوحشي من قبل هذا "التباطؤ" ، قاوموا بنشاط. ذلك لأن النهج قريب جدًا من TDD ، وأن TDD يتطلب الصبر أثناء كتابة التعليمات البرمجية ، لكن من السهل تصحيحه. هذا يزيد من سطر التعليمات البرمجية بسطر "إذا - خطأ" ، ولكن بمجرد الكتابة وعدم العودة. هذا مهم جدًا في بنية الخدمات المصغرة ، لأن الخدمات الميكروية تنمو مثل الفطر ويمكن لمطور واحد أن يكتب العشرات من الخدمات المصغرة. يعد تبديل السياقات وأخطاء التصحيح باستمرار باهظ التكلفة وغير فعال. إذا تم تنفيذ كل شيء بشكل صحيح ، فسيعمل التطبيق لسنوات ، كما هو فعال أثناء التطوير. وفي PHP في نفس الموقف ، من المحتمل أنه في حالة كتابة الشفرة بطريقة غير صحيحة ، ستظهر أخطاء جديدة باستمرار ، وبعد ذلك سيكون من الضروري تصحيح كل شيء مرة أخرى.

اتضح القدمين في الرئيسي. عندما تم إطلاق الجزء الوظيفي ، اكتشفوا بالفعل أفضل طريقة لتقسيمه إلى حزم. ثم كان هناك مراجعة. عندما يساعدك تطبيق Go-senior ، يكون ذلك مفيدًا على الفور. أظهروا لشخص ما كيفية استبدال الزيارات المستمرة للقاعدة بذاكرة تخزين مؤقت في ذاكرة الوصول العشوائي. ساعد شخص ما على إعادة كتابة الكود في تنفيذ موازٍ. في مكان ما ، كانت هناك سدادات صغيرة ، مثل حقيقة أن خادم HTTP في PHP يرتفع ويموت تقليديًا ، ولكن يبقى هنا أن يتعطل.

الخطوة 6. مستودع


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

النتائج


ثماني ساعات من الاختراق في دفقين زائد أو ناقص 15 شخصًا (أذكرك أنه من بين 70 مطورًا ، أراد 40 شخصًا تجربة Go وتلقي الوثائق والقالب ، ولكن لا يمكن للجميع المشاركة في يوم واحد أو الرغبة في المشاركة فعليًا).

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

نتيجةً لذلك ، تعرف الجميع على اللغة ومنصة OpenShift وكيفية الزواج منها معًا وما إلى ذلك. لقد رأينا قالب التطبيق و CI / CD الجديد ، وحصلت على مجموعة كاملة من الأدوات لحل مشاكلنا بشكل أكبر على Go.

ثم تم "بيع" الميزات لأصحاب المنتجات. أجبنا أسئلة الهندسة المعمارية من قادة الفريق.

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

ليس فقط ذهب الذهاب من hackathon للجماهير. ظهرت القوالب في نظام PaaS لنظامي PHP و Node.js ، لكن مع كل ذلك ، وكل الأشياء الأخرى متساوية ، غالبًا ما يختار المطورون تطبيق Go كلغة لخدمة microservice. نتيجةً لذلك ، في الممارسة العملية ، تتم كتابة جميع خدمات microservices الجديدة للبيع المكتوبة بعد الاختراق على وجه التحديد على Go. أي أننا قطعنا المتراصة ونكتب على الفور كل شيء جديد تحت Kubernetes. بحلول نهاية العام ، سننتقل إلى هناك بشكل شبه كامل.

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

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

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

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

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


All Articles