كيف يتم إنشاء مشاريع Highload PHP: نسخة





في 28 يوليو ، استضاف حسابنا على Instagram و YouTube بثًا مباشرًا مع Alexander Vysotsky ، مطور PHP رائد في مكتب Badoo في لندن ، والذي يعمل في فريق مكافحة البريد العشوائي. تحدث ساشا عن كيفية إنشاء مشاريع Highload في PHP ، وعن حياته في لندن وبالطبع عن Badoo.









اسمي Alexander Vysotsky ، أعمل كمطور PHP رائد في Badoo. نحن نعمل على تطوير تطبيقات المواعدة Badoo و Bumble ، والتي لديها أكثر من 500 مليون مستخدم حول العالم. 



لدينا عدة مكاتب في دول مختلفة ، ولكن معظم المطورين موجودون في موسكو ولندن. في المجموع ، يضم فريق تطوير Badoo حوالي 300 شخص. لدينا 20 مشروعًا مفتوح المصدر والعديد من الأدوات الداخلية التي نتحدث عنها غالبًا في مدونتنا على Habré.



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



كيف وصلت إلى Badoo



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



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



ومع ذلك ، فإن رغبتي في العمل في Badoo لم تختف ، وتقدمت مرة أخرى لشغل وظيفة شاغرة بعد عام. بعد عدة مقابلات هاتفية ومقابلة وجهاً لوجه ، تلقيت عرضًا. لذلك في بداية عام 2019 انتقلت إلى لندن.



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



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



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



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



من المهم أيضًا بالنسبة لي أن تحب زوجتي الحياة في مكان جديد. أرادت دائمًا الحصول على مهنة المصمم وتستعد الآن للقبول. وجدت دورات تحبها ؛ في الوقت نفسه ، شددت لغتها واجتازت اختبار IELTS لدخول درجة البكالوريوس في التصميم الداخلي. يوجد في لندن مجموعة كبيرة جدًا من المؤسسات التعليمية ، لكن عليك أن تتذكر أن تكلفة التعليم بالنسبة للأجانب أعلى بعدة مرات من تكلفة التعليم المحلي.



بعد ذلك ، سأجيب على بعض الأسئلة من الدردشة.



ما الذي ساعد على التكيف في كل مرة مع مكان جديد؟



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



هل يستحق ترك العمل المستقل للعمل في شركة كبيرة براتب أقل إذا لم تكن لديك مثل هذه الخبرة العملية من قبل؟



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

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



إخلاء صغير: يمكنك زيارة موقعنا على الإنترنت tech.badoo.comحيث ننشر الشواغر الحالية. ربما ستصادف شيئًا يرضيك وستترك طلبًا.



ما هي بعض مزايا Badoo مقارنة بالشركات الصغيرة؟



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



هل صحيح أن Badoo لا توظف للعمل في إنجلترا؟ لا أجد إجابة صريحة.



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



هل كان عليك العمل عن بعد؟ هل أصبح الأمر أكثر صعوبة؟ كيف تفاعلت؟



نعم ، ما زلنا نعمل عن بعد. في البداية كان الأمر صعبًا نظرًا لحقيقة أني أنا وزملائي لم نتفق دائمًا في الوقت المناسب: شخص آخر "لم يأت" للعمل ، شخص ما "غادر" بالفعل. مطلوب التزامن بين الفرق المختلفة. أصبحت مشكلات الاتصال أكثر صعوبة في الحل. بدلاً من طرح الأسئلة شخصيًا ، كان علي أن أكتب أو أتصل ، الأمر الذي يستغرق وقتًا أطول بكثير.

للتفاعل ، لدينا مجموعة كبيرة من المحادثات ومؤتمرات الفيديو التي نستخدمها. الآن أصبح الأمر أسهل - لقد تعودنا عليه.



كيف تتحكم في الجهد والمثابرة والتحفيز الذاتي والمماطلة؟



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

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

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



PHP و highload في Badoo



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



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



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



كيف تتعامل Badoo مع البريد العشوائي؟ بسيط إذا أو ML بالفعل؟



لقد رأيت نكتة في مكان ما مفادها أن ML هو مجرد مجموعة كبيرة من if / else. لكن ، بالطبع ، هذا ليس هو الحال على الإطلاق هنا.

تستخدم Badoo العديد من الاستخدامات لـ ML ، حيث يمكنها تحسين المشاريع بشكل كبير. على سبيل المثال ، كما قلت سابقًا ، نستخدم التحقق من صورة المستخدم ، ويساعد ML في هذا: فهو يحدد أن الشخص قد التقط صورة بالفعل الآن وأنه فعل ما طُلب منه. الخلايا العصبية رائعة.



كيف تقوم بتطبيق ML؟ PHP ، لغة أخرى ، نوع من الإطار ، تطوير خاص بالكامل؟



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



ما هي أكبر التحديات التي واجهتها في Badoo؟



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



لماذا تستخدم PHP؟

 

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



خطى PHP 7 خطوة كبيرة إلى الأمام من حيث الإنتاجية والتطوير. لدينا مقال رائع في مدونتنا عن Habré حول كيف أتاح لنا الانتقال إلى هذا الإصدار تحرير جزء كبير من الموارد.



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



ما رأيك في PHP 8 ، هل تخطط للهجرة؟



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

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



هل تستخدم Badoo تجميع PHP؟



لا.



أخبرنا المزيد عن إطار العمل المكتوب ذاتيًا لـ Badoo. على أي أساس يتم تنفيذه وما هو شكله؟



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



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



لماذا تستخدم Badoo وحدة متراصة وليس خدمات مصغرة؟



هذا سؤال مقدس إلى حد ما ، المجتمع منقسم إلى معسكرين حول هذا الموضوع. لا يخفى على أحد أننا نستخدم بنية متجانسة ، وخلال وجود المشروع تعلمنا كيفية التعامل مع عيوب هذا النهج واستخدام جميع مزاياه. بالإضافة إلى ذلك ، لدينا مجموعة من الخدمات (في Go و PHP و C ++) نستخدمها بنشاط في عملنا اليومي.



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



كيف القطع المختلفة من مقياس متراصة تحت الحمل؟



سؤال جيد لمتابعة monolith و microservices. لدينا عرض تقديمي رائع في مدونتنا حول الأداء وكيف يتم بناء الواجهة الخلفية لدينا من وجهة نظر معمارية - سأخبرك بإيجاز. لدينا حوالي 600 خادم يتعامل مع جميع الطلبات الواردة من العملاء ، وهم مسؤولون عن المستودع الأحادي الخاص بنا. مع هذا النهج ، لدينا بعض المرونة في التوسع ، وإضافة سيارات جديدة ، ووضع الكود - وهم جاهزون للاستخدام.



ما مدى سلاسة النشر في بيئة متجانسة؟



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



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



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



لفتة واحدة ، الجميع يدفعون إلى مكان واحد؟



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



هل تستخدم DDD أو أنماط معمارية أخرى؟



DDD هو تصميم يحركه المجال. إنه ليس نمطًا معماريًا ، بل منهجية. لن أقول إن لدينا نهجًا محددًا واحدًا ، بل نستخدم مزيجًا من عدة طرق. 



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



هل تستخدم استثناءات أو تحاول تجنبها؟



نحن نستخدم. ونحاول تجنب ذلك.



هل API الخاص بك متراصة؟



نعم.



كيف تختبر API؟



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



التطوير القائم على الاختبار ، عند الاختبارات أولاً ، ثم الكود - ألا تمارس؟



معنا ، يمكن لكل فريق استخدام أسلوبه الخاص عند التطوير ، وأنا أعلم أن بعض الزملاء يمارسونه. أعلم أنه يعمل ، لكنني لا أمارسه بنفسي.



ما هو شعورك حيال DDD؟



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



أخبرنا ، هل لم يكن بالإمكان تحمل الإنتاج بشكل كبير؟ كيف تعاملت مع هذا؟



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



PHP و MySQL - ما العمل لتحسين أداء الواجهة الخلفية؟



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



حول المكدس: نظرًا لحقيقة أن Badoo بها عدد كبير من الأقسام والفرق ، فإننا نستخدم أكبر مجموعة ممكنة من التقنيات - من PHP و MySQL و Nginx و Go و C ++ إلى Tarantool و LUA و Scala. يختار كل فريق أداة لحل المهمة بشكل فعال. نظرًا لأننا نعمل في ظروف عالية التحميل ونعالج عشرات الآلاف من الطلبات في الثانية ، فإن مشكلة أداء الواجهة الخلفية لدينا تصبح حاسمة.

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



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



أداة أخرى تتيح لنا تتبع أداء كل جزء فردي من التعليمات البرمجية هي LifeProf: فهي تتيح لنا تحديد ملف تعريف لجميع الطلبات تلقائيًا. يمكن العثور على كل هذه الأدوات (والمزيد) في مستودع Github الخاص بنا.



هل تستخدم ORM أو تفاعل التخزين المباشر؟ لماذا ا؟



لقد ذكرت بالفعل أن لدينا إطار عمل خاص بنا. نحن نستخدم تطبيق ORM الخاص بنا.



كيف يتم تنظيم تفاعل وحدات المشروع؟ من فئة إلى فصل ، أو شيء أكثر صعوبة؟



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



ما هي أنواع الكعك الخاصة بقاعدة البيانات المستخدمة باستخدام ORM؟



لا أفهم السؤال تمامًا ، لكنني سأحاول الإجابة.

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



كيف يعمل اختبار المطور؟ لرفع كل شيء محليًا في عامل ميناء ، أو شيء أكثر صعوبة ، على خوادم افتراضية؟



حالة أخرى حيث لا يمكنني الإجابة بالضبط.

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



ما زلت لا أفهم ما هو ML: PHP ، Python ، شيء آخر؟



اعتدنا على استخدام Python في إطار عمل ML ، لكنهم تحولوا الآن إلى Spark: لقد أدى ذلك إلى زيادة الأداء بشكل كبير.



كيف توازن الحمل على 600 خادم؟ هل أفهم بشكل صحيح أن هذا هو monorepa على كل خادم ، في عامل الميناء؟



Monorepa على كل خادم ، نوازنه بطريقة قياسية إلى حد ما - باستخدام Nginx.



هل تستخدم مولدات الكود؟ لأي مهام؟



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



كيف يعمل نسخ قاعدة البيانات لـ MySQL؟



لا يمكنني الإجابة إلا بشكل سطحي.

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



كيف يدعم مهندسو Badoo مجتمع PHP الناطق باللغة الروسية؟ مؤتمرات ، لقاءات ، مدونة ، تجمعات غير رسمية؟



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



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



يعمل مهندسو Badoo بانتظام في لجنة البرمجة في مؤتمر PHP الوحيد في روسيا ، PHP Russia. هذا العام أصبح الجزء الخاص بها عبر الإنترنت دوليًا ومجانيًا لجميع المشاركين بفضل شركتنا.



لدينا أيضًا مدونات على Habré و Medium ، حيث نشارك جميع التطورات (ليس فقط في PHP).



هل تأخذ Juns أم هو الحد الأدنى الأوسط؟



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



هل تخطط لمكتب في الولايات المتحدة؟



لدينا مكتب في الولايات المتحدة ، حيث تستضيف Bumble - في أوستن ، تكساس. لكن لا يوجد فريق هندسي هناك ، ولا يُعرف بعد ما إذا كنا سنتوسع.



, soft/hard- ?



لقد قلت بالفعل أن جميع الوظائف الشاغرة متاحة على موقعنا tech.badoo.com . أنصح أي شخص ألا يخجل ، ولا يخاف ، وأن يشاهد المتطلبات ويترك الطلبات.



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



من المهارات الصلبة - بالطبع ، يجب أن تكون لديك خبرة وفهم لكيفية عمل PHP و MySQL: هذه هي التقنيات الرئيسية التي نستخدمها ، مجموعتنا عندما يتعلق الأمر بتطوير الخلفية. الإدارات الأخرى لها مكدس خاص بها.



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






ماذا حدث من قبل



  1. إيلونا بابافا ، كبير مهندسي البرامج في Facebook - كيفية الحصول على تدريب داخلي والحصول على عرض وكل شيء عن العمل في شركة
  2. Boris Yangel ، Yandex ML-Engineer - كيف لا تنضم إلى صفوف المتخصصين الأغبياء إذا كنت عالم بيانات
  3. الكسندر كالوشين ، EO LastBackend - كيفية إطلاق شركة ناشئة ودخول السوق الصينية والحصول على 15 مليون استثمار.
  4. , Vue.js core team member, GoogleDevExpret — GitLab, Vue Staff-engineer.
  5. , DeviceLock — .
  6. , RUVDS — . 1. 2.
  7. , - . — .
  8. , Senior Digital Analyst McKinsey Digital Labs — Google, .
  9. «» , Duke Nukem 3D, SiN, Blood — , .
  10. , - 12- — ,
  11. , GameAcademy — .





All Articles