Go में PHP डेवलपर्स के त्वरित "ग्राउंडिंग" के लिए एक टेम्पलेट की शुरुआत15 साल से हम PHP में बैकेंड कर रहे हैं। और एक बार एक रणनीतिक निर्णय लिया गया था: पहले, गो पर सबसे अधिक भरी हुई जगहों को फिर से लिखें, और फिर उस पर नई सेवाओं का विकास करें।
कल्पना करें: आप 40 डेवलपर्स की एक टीम के लिए एक नई भाषा के बारे में बात करना चाहते हैं जो पीएचपी इतनी अच्छी तरह से तैयार करते हैं कि वे एक बहु-थ्रेडेड रीयल-टाइम और उच्च-उपलब्धता प्रणाली को एक साथ रखते हैं।
सबसे खराब स्थिति में, वे आपको जलाएंगे, सबसे अच्छा वे सुनेंगे, लेकिन वे पहले की तरह करते रहेंगे। यह है यदि आप बल द्वारा भाषा में प्रवेश करते हैं।
इसलिए, हमने पहले हैकथॉन की व्यवस्था करने का फैसला किया, और फिर सभी को अंधेरे पक्ष में आमंत्रित किया। यदि कम से कम दस लोगों ने उन्हें भर्ती किया था, तो समय के साथ उन्होंने हर किसी को व्यक्तिगत रूप से दिखाया होगा कि यह कितना अच्छा है।
मैं आपको ऐसे चरणों में बताऊंगा कि आपके साथ इस तरह के अनुभव को कैसे दोहराया जाए। और हमारे कार्यान्वयन के परिणामों के बारे में। और एक PHP डेवलपर के सिर में क्या होता है जब वह एक नई भाषा देखता है।
हमने टेम्पलेट और सीआई / सीडी की तैयारी के साथ शुरू किया, जो आपको 15 सेकंड में बंद करने की अनुमति देता है। इसे स्वयं लिखने के लिए, आपको लगभग दो सप्ताह चाहिए। हमने इसे अग्रिम में किया था।
चरण 1. गोलंग के बारे में बताएं
हमारे पास अक्सर बहुत सारे आंतरिक सेमिनार होते हैं। कोई कुछ बताना चाहता है, एक विज्ञापन लिखता है, लोगों को इकट्ठा करता है और बताता है। ऐसा होता है कि यह विशेष रूप से रूस में हवाई यातायात का नियमन है, ऐसा होता है कि यह यात्रा के बारे में एक कहानी है, लेकिन अधिक बार यह कुछ प्रौद्योगिकी या सुविधा के लिए आता है जिसे लागू किया गया था। और यह किसी और के लिए उपयोगी हो सकता है। इसलिए, हमने गो पर एक आंतरिक संगोष्ठी रखी, जहां हमने भाषा के लाभों के बारे में बात की। फास्ट (एक टैम्बोरिन के बिना संकलित: पीएचपी भी संकलित किया जा सकता है, लेकिन अधिक कठिन), बॉक्स से बाहर बहु-थ्रेडेड, काफी सरल रूप से समर्थित, आप सीधे नोटबुक में एक फ्रेमवर्क के बिना लिख सकते हैं, अर्थात, तीसरे स्तर की निर्भरता के साथ कोई बवासीर नहीं है कि विकसित ढांचा इसके साथ ही सूख जाता है। 15 सेकंड में तैनात करें। और ऐसा लगता है कि हमारी स्थिति में कोई स्पष्ट दोष भी नहीं हैं। हम कोशिश करने का सुझाव देते हैं। यह एक और दुनिया के बारे में एक कहानी की तरह था: यहां भाषा है, देखो कि यह कैसे भिन्न होती है, अगले सप्ताहांत में रुचि रखने वालों के लिए एक हैकथॉन होगा।
चरण 2. दस्तावेज
हैकाथॉन से तीन दिन पहले, हम सिंटैक्स, बुनियादी डेटा प्रकारों और कार्यक्षमता पर आधे घंटे के परिचयात्मक पाठ्यक्रम के लिए एक लिंक भेजते हैं। और बुनियादी दस्तावेज। यहाँ डेवलपर्स क्या है:
golang.org/doctour.golang.orgप्लस गो-वरिष्ठ संपर्क अंदर।
चरण 3. समूह
इसके अलावा, हमने समूहों में टूटने और उन कार्यों को लाने का प्रस्ताव रखा जिन्हें हम यहां और अब एक नई भाषा में लागू करना चाहते हैं। उन्होंने तुरंत चेतावनी दी कि हैकाथॉन घंटों (शनिवार को) के बाद कार्यालय में होगा, यह मामला स्वैच्छिक था, लेकिन मुकाबला कार्य को हल करना और लगभग जोड़ी मोड में एक व्यक्ति के साथ अभ्यास में सीखना संभव होगा जो भाषा की बारीकियों को जानता है। इसमें 40 लोगों की दिलचस्पी थी, और वे समूहों में लड़ने और कार्यों की भर्ती करने लगे। सभी लोग समूहों के साथ सफल नहीं हुए: कई केवल एक के कार्य के साथ आए, समूह दो थे, कम अक्सर - तीन लोग। कार्य स्वयं बैकलॉग के शीर्ष पर थे या किसी प्रकार के निरोधात्मक स्थान को नकल करने से संबंधित थे।
अंतिम लक्ष्य हैकाथॉन में एक कार्य करना था, जिसे फिर उत्पाद स्वामी (दिशा प्रबंधक) को थोड़ा सा और "बेचा" किया जा सकता है। आत्मा में: "देखो, इसने 40 सेकंड से पहले काम किया, और अब यह दो में सब कुछ करता है।" टीमों में भाषा को पेश करने की रणनीतिक सफलता के लिए यह हिस्सा सबसे महत्वपूर्ण है: आपको शुरुआत में ही छोटी जीत की जरूरत है।
चरण 4. अदृश्य कार्य
हमने एक खाका तैयार किया, जिसके बारे में मैंने अपने बुनियादी ढांचे के लिए बात की, जो हमें आपकी जरूरत की हर चीज को बनाने और जोड़ने के लिए बिना नाच के तुरंत चलने की अनुमति देगा। यह टेम्प्लेट फ्रेमवर्क को बदल देता है। इसे फैलाने का कोई मतलब नहीं है: मैं दोहराता हूं, यह सिर्फ हमारे लिए बहुत कैद है।
मैं केवल उस कार्यशीलता को सूचीबद्ध करूँगा जिसे खाके में रखा गया था:
- K8s के साथ एकीकरण।
- प्रोमेथियस को निर्यात मेट्रिक्स।
- पर्यावरण चर के माध्यम से विन्यास।
- Http सर्वर।
- Opentracing।
- लकड़हारा।
हम लंबे समय से कुबेरनेट्स के अध्ययन पर काम कर रहे हैं और एक समाधान के रूप में हमने ओपनशिफ्ट को चुना, जिसने सीआई / सीडी को अनुकूलित और कॉन्फ़िगर करने के लिए शानदार अवसर प्रदान किए। इसलिए हमने k8 के तहत तुरंत टेम्पलेट को तेज कर दिया। ओपनशिफ्ट में बनाया गया एप्लिकेशन रिपॉजिटरी बनाता है, एप्लिकेशन कंकाल को इकट्ठा करता है, k8s में सेवा को इकट्ठा करता है, सुरक्षा नीतियों को लागू करता है, बाइनरी इकट्ठा करता है, k8 में deploys और एक मिनट से भी कम समय में सेवा नेटवर्क पर उपलब्ध है। इसलिए हैकाथॉन भी एक ऐसी घटना बन गई जहां डेवलपर्स को हमारे भविष्य के पासा से मिलवाया गया।
हमने बेसिक मेट्रिक्स के साथ ग्राफाना में एक डैशबोर्ड भी तैयार किया, किबाना और जैगर के एजेंटों के लिए निर्यात लॉग की स्थापना की। प्रत्येक सेवा के लिए, सेवाओं के लिंक उत्पन्न होते हैं, जिस पर आप तुरंत सभी आवश्यक जानकारी प्राप्त कर सकते हैं।
इसके बाद, हैकथॉन प्रतिभागियों द्वारा समस्याओं को हल करने के लिए आवश्यक डेटाबेस तक पहुंच पर सहमत होना आवश्यक था। यह गलत है, लेकिन हम काम की अवधि के लिए केवल-पढ़ने के लिए सैन्य ठिकानों से जुड़े हैं। यह एक और कारण है कि शनिवार को इस दिन का सबसे छोटा भार है।
उन्होंने रसोई को चेतावनी दी (मैं आपको याद दिलाता हूं कि हमारे पास इस कार्यक्रम के
लिए नाश्ते - कॉटेज पनीर-फल, लेकिन गर्म भोजन के लिए
मुफ्त नहीं है)। भोजन कार्यालय में लाया गया ताकि हम विचलित न हों।
चरण 5. हैकाथॉन ही
स्पष्ट कारणों (परिवार, विश्राम) के लिए, कुछ शनिवार को विफल हो गए, इसलिए हमने 15 लोगों को कॉल में विभाजित किया।
उन्होंने हमारे PaS प्लेटफ़ॉर्म के बारे में बात की, कैसे एक टेम्पलेट से एक एप्लिकेशन बनाया जाए, कैसे एक टेम्पलेट का उपयोग किया जाए। यह ढांचा, जिसमें मेट्रिक्स, हेल्थ चेक और मेट्रिक्स को इकट्ठा करने के लिए रैपर हैं, एक डेटाबेस से जुड़ रहे हैं और इसी तरह, यह दिखाया गया है कि सभी प्रकार की विभिन्न चीजों को कैसे जोड़ा जाए। जगह या अग्रिम में सब कुछ निकालना संभव था (टेम्प्लेट को हैकथॉन में भी वितरित किया गया था)। यह एक तैयार अनुप्रयोग है जिसे विस्तारित करने की आवश्यकता है।
उन्होंने कुबेरनेट्स (कॉन्फ़िगरेशन, लॉगिंग, मेट्रिक्स, रेडी-सैंपल्स के साथ काम करना, प्रोसेसर और मेमोरी के लिए संसाधनों का आवंटन, आदि) के लिए तैनाती और विकास सुविधाओं के बारे में बात की। उन्होंने "हैलो, दुनिया!" को तैनात करने की कोशिश की।

लोगों ने स्वयं सेवाएं बनाईं। मुझे टेम्प्लेट के उपयोग की सरलता और सहजता से सुखद आश्चर्य हुआ। किसी के पास पहले से ही गोलंग पर अभ्यास करने का समय था, किसी को सिर्फ दस्तावेज के माध्यम से छोड़ दिया गया।

हमारे पास यह दिखाने का लक्ष्य नहीं था कि कैसे अच्छा लिखना है, एक मोटा कार्यात्मक कोड प्राप्त करना आवश्यक है और यह दिखाना है कि कैसे सब कुछ जल्दी से प्रीप्रोड पर जा सकता है, कैसे सब कुछ जल्दी से काम करता है और संपादन करना कितना आसान है।
योजना यह थी: टीमें लिखती हैं, यदि आपके कोई प्रश्न हैं, तो हम उत्तर देते हैं। फिर एक समीक्षा सत्र और गोलंग पर वास्तुकला में कुछ और सही करने के लिए मदद करें।
PHP मध्य के संज्ञानात्मक विकृतियों में से, यह एक धागे में सोचने के "पुराने" तरीके को ध्यान देने योग्य है। गो में एक अच्छा अंतर्निहित प्रतिस्पर्धी मॉडल है और बॉक्स के बाहर मल्टीथ्रेडिंग है, जो PHP में नहीं था। कोड बहुत पठनीय निकला, जिसकी बहुत कम उम्मीद थी।
व्यवहार में, हम हमेशा मल्टीथ्रेडिंग का उपयोग नहीं करते हैं। कार्य पर निर्भर करता है। लेकिन हुड के तहत, वह भी है, और, जहां आवश्यक हो, गति उसके कारण बढ़ जाती है। उदाहरण के लिए, किसी भी आने वाले REST अनुरोध के लिए एक अलग गोरआउट बनाया जाता है। गोलंग एक ही समय में कई अनुरोधों को संसाधित कर सकते हैं, जब अधिकांश अन्य भाषाएं (PHP सहित), डिफ़ॉल्ट रूप से, उन्हें कतारबद्ध करें और उन्हें प्रत्येक कार्यकर्ता के लिए एक थ्रेड में संसाधित करें।
दूसरी विशेषता त्रुटियों की वापसी के साथ एक बड़ा दर्द है। यदि मल्टीथ्रेडिंग केवल एक अलग वास्तुकला है और एक या दो घंटे में इसका उपयोग करना आसान है, तो त्रुटियों से मामले में जब PHP से स्विच किया जाता है, तो यह सोच के पूरे मॉडल में एक बदलाव है। कार्यों से त्रुटियों को वापस जाना गो में मुख्य प्रतिमान है। PHP में, try-catch आमतौर पर चीजों को लपेटता है। और यहां फ़ंक्शन बॉडी में स्पष्ट रूप से प्रोसेस करना आवश्यक है। कुछ लोगों ने इस "मंदी" से क्रूरता से बमबारी की, उन्होंने सक्रिय रूप से विरोध किया। ऐसा इसलिए है क्योंकि दृष्टिकोण टीडीडी के काफी करीब है, और कोड लिखते समय टीडीडी को धैर्य की आवश्यकता होती है, लेकिन यह डिबग करना आसान है। यह कोड पंक्ति को "अगर - एक त्रुटि" से बढ़ाता है, लेकिन एक बार जब आप लिखते हैं और वापस नहीं करते हैं। यह माइक्रोसर्विसेज की वास्तुकला में बहुत महत्वपूर्ण है, क्योंकि माइक्रोसेवर्स मशरूम की तरह बढ़ते हैं और एक डेवलपर दर्जनों माइक्रोसिस्टर्स लिख सकता है। लगातार संदर्भों और डिबगिंग त्रुटियों को बदलना बहुत महंगा और अक्षम है। यदि सब कुछ सही ढंग से किया जाता है, तो आवेदन वर्षों तक काम करेगा, जितना प्रभावी रूप से विकास के दौरान। और उसी स्थिति में PHP में, यह संभावना है कि यदि कोड गलत तरीके से लिखा गया है, तो नई त्रुटियां लगातार पॉप अप करेंगी, जिसके बाद सब कुछ फिर से डिबग करना आवश्यक होगा।
यह मुख्य में फुटक्लॉथ निकला। जब कार्यात्मक भाग लॉन्च किया गया था, तो उन्होंने पहले ही पता लगा लिया था कि इसे पैकेज में कैसे तोड़ना सबसे अच्छा है। फिर एक समीक्षा हुई। जब गो-वरिष्ठ आपकी मदद करता है, तो यह तुरंत उपयोगी होता है। उन्होंने किसी को रैम में कैश के साथ आधार की निरंतर यात्राओं को बदलने का तरीका दिखाया। समानांतर निष्पादन में कोड को फिर से लिखने में किसी की मदद की गई थी। कहीं-कहीं छोटे प्लग भी थे, जैसे कि PHP में HTTP सर्वर पारंपरिक रूप से उगता है और मर जाता है, लेकिन यहाँ यह लटका रहता है।
चरण 6. रिपोजिटरी
हैकाथॉन के अंत में, कोड को रिपॉजिटरी में बदल दिया गया था, जहां हर कोई पड़ोसी टीमों का कोड देख सकता था और एक पुल अनुरोध भेज सकता था। यह प्रशिक्षण का हिस्सा भी है, और सप्ताह के दौरान ये अनुरोध काफी सक्रिय रूप से चले गए।
परिणाम
प्लस या माइनस 15 लोगों की दो धाराओं में हैकाथॉन के आठ घंटे (मैं आपको याद दिलाता हूं, 70 में से 40 डेवलपर्स, गो को आज़माना चाहते थे और प्रलेखन और एक टेम्पलेट प्राप्त किया था, लेकिन हर कोई एक दिन में भाग नहीं ले सकता था या शारीरिक रूप से भाग लेना चाहता था)।
सेवाओं के एक चौथाई ने तुरंत अपेक्षित परिणाम दिया। एक अन्य भाग या तो PHP मोनोलिथ के हिस्से पर लंबे संशोधनों की आवश्यकता थी, या बस आठ घंटे से अधिक चौड़ा था। बिक्री से पहले लगभग आधी सेवाएँ बाद में पूरी हुईं।
नतीजतन, हर कोई भाषा से परिचित हो गया, ओपनशिफ्ट प्लेटफॉर्म, उन्हें एक साथ शादी कैसे करनी है, और इसी तरह। हमने एप्लिकेशन टेम्प्लेट और नए CI / CD को देखा, गो पर हमारी समस्याओं को हल करने के लिए टूल का पूरा सेट मिला।
तब उत्पाद मालिकों को "बेची" जाती थीं। हमने टीम के नेताओं से वास्तुकला के सवालों के जवाब लिए।
अगले महीने, लगभग सभी ने मिलकर विभागों की जरूरतों के लिए एक टेम्पलेट (जो एक मिनी-फ्रेमवर्क है) जोड़ा। नतीजतन, वह बड़ा हो गया। हां, टेम्पलेट की एक और विशेषता: संपूर्ण कॉन्फ़िगरेशन - पर्यावरण चर के माध्यम से, अर्थात्, स्थानीय विकास के साथ और जब प्रीप्रोड-ठिकाने पर स्विच करते हैं, तो सब कुछ पूरी तरह से समान रूप से काम करता है। डॉकर अच्छा है।
इतना ही नहीं गो हैकाथॉन से जनता के बीच गया। PHP और Node.js के लिए PaaS प्लेटफ़ॉर्म में टेम्प्लेट दिखाई दिए, लेकिन सभी समान, अन्य सभी चीजें समान हो रही हैं, डेवलपर्स अक्सर माइक्रो सर्विस के लिए भाषा के रूप में गो चुनते हैं। नतीजतन, व्यवहार में, हैकथॉन के बाद लिखे गए सभी नए विक्रय माइक्रोसर्विसेज विशेष रूप से गो पर लिखे गए हैं। यही है, हम मोनोलिथ को काटते हैं और तुरंत कुबेरनेट्स के तहत सब कुछ नया लिखते हैं। वर्ष के अंत तक हम लगभग पूरी तरह से वहां चले जाएंगे।
जो नहीं आए उनके साथियों ने पूछा कि यह क्या है। फिर उन्होंने संपर्क किया और भाषा के लिए कहा, पृष्ठभूमि में कई काम किए (मुख्य काम के लिए), फिर कोड को रिपॉजिटरी में डाल दिया और अन्य बस प्रशिक्षित डेवलपर्स से और गो-विशेषज्ञों से पुल अनुरोध प्राप्त किया। पुस्तकों में रुचि। यही है, हम अभी भी दूसरी पंक्ति के तकनीकी समर्थन के कुछ सप्ताह थे।
उन लोगों के लिए जो अपनी पढ़ाई जारी रखना चाहते थे, उन्होंने टेलीग्राम में किताबों और अधिक के साथ एक समूह बनाया। हमने गोलंग डेवलपर्स का एक गिल्ड भी आयोजित किया, जहां हम साप्ताहिक रूप से काम में उभरते मुद्दों पर चर्चा करते हैं, सामान्य घटकों का विकास करते हैं, अच्छी प्रथाओं को साझा करते हैं। कोई भी डेवलपर दर्ज कर सकता है।
सबसे बड़ा परिणाम यह है कि एक महीने के बाद हमने सबसे व्यस्त वर्गों में से एक को फिर से लिखा, और यह ठेस में लगभग छह हजार गुना तेजी से काम करना शुरू कर दिया। लेकिन मैं इसके बारे में अलग से बेहतर बात करूंगा: न केवल भाषा की विशेषताएं हैं, बल्कि बहुपरत कार्यान्वयन, कुछ हद तक वास्तु सुधार और थोड़ी शर्मिंदगी भी है। सबसे महत्वपूर्ण बात यह है कि भाषा को जानने का हमारा अनुभव है, और यदि आपके पास कम से कम एक गो-विशेषज्ञ है जो कुछ हफ़्ते सीखने में बिताएगा, तो आपके साथ इसे दोहराना आसान है।
हमारे विकास के बारे में अन्य पोस्ट:
15 वर्षीय मोनोलिथ का
इतिहास ,
रसोई के लिए किराने का दृष्टिकोण ,
डेवलपर को व्यवसाय के बारे में क्या जानना चाहिए , और
विशेष रूप से एयरलाइन टिकटों की वापसी ।