ई-कॉमर्स के लिए पीएचपी लाइब्रेरी: एटीओएल और पेएचर के साथ काम करना, जीएस 1 कोड और अन्य कार्यों को पार्स करना

नमस्ते, मेरा नाम पावेल सेवलाइव है, मैं लमोडा में बिजनेस प्रोसेस ऑटोमेशन विभाग का प्रमुख हूं। हम बहुत भिन्न कार्यों के साथ काम करते हैं, और प्रत्येक के लिए सबसे सुविधाजनक उपकरण चुनने का प्रयास करते हैं। तदनुसार, हम विभिन्न भाषाओं का उपयोग करते हैं - हमारे सिस्टम में आप जावा, गो और एंड्रॉइड के लिए थोड़ा कोटलिन पा सकते हैं। उसी समय, विकास का एक महत्वपूर्ण हिस्सा PHP में आयोजित किया जाता है, इस पर दो दर्जन से अधिक सेवाएं लिखी जाती हैं जो न केवल आदेशों के साथ काम करती हैं, बल्कि एक विस्तृत वितरण नेटवर्क की परिचालन प्रक्रियाएं, तीन देशों में कॉल सेंटर और हमारे स्वयं के फोटो स्टूडियो, साथ ही साथ यह सब प्रदान करते हैं। हमारे B2B भागीदारों के लिए सेवाएं। ये सेवाएं हमारे विभाग की 5 विकास टीमों द्वारा समर्थित और विकसित हैं।

छवि

जैसे-जैसे सेवाएं स्वयं और उनके आस-पास की बुनियादी सुविधाओं का विकास होता है, इन प्रणालियों में समान कार्य अधिक बार उत्पन्न होते हैं, जैसे कि आम सीएलएस (केंद्रीकृत लॉगिंग सिस्टम) में प्रवेश करना, फ़ाइल भंडारण का परीक्षण करना, प्रोमेथियस और अन्य के लिए मैट्रिक्स एकत्र करना। हम ऐसी समस्याओं को हल करने और विभिन्न प्रणालियों के लिए सामान्य घटकों का उपयोग करने के तरीकों को मानकीकृत करने का प्रयास करते हैं।

जब टीमों में से एक का सामना नई सेवा / उपकरण के अनुकूलन या एकीकरण के साथ होता है जो सभी के लिए सामान्य हो सकता है, तो हम इस टीम में पुस्तकालय के विकास की शुरुआत करते हैं। और फिर तैयार घटक भविष्य के पुन: उपयोग के लिए तैयार किया जाता है और सार्वजनिक डोमेन में रखा जाता है।

इसलिए, इस तरह की एक प्रक्रिया हमारे साथ नियमित रूप से होती है, हमने एक दिशानिर्देश बनाया है जो हमें इसे सबसे अधिक दर्द रहित तरीके से संचालित करने की अनुमति देता है - मैं अगले सम्मेलनों में से एक पर इस पर रिपोर्ट करने की कोशिश करूंगा।

हमारे PHP पुस्तकालयों के दो दर्जन से अधिक सार्वजनिक रूप से GitHub पर उपलब्ध कराए गए हैं। और हम आगे फैलने की योजना बना रहे हैं। क्यों? ठीक है, हमने बहुत सारे संसाधनों का निवेश किया और (मैं विश्वास करना चाहता हूं) अच्छा किया। और हम चालाकी से उम्मीद करते हैं कि अन्य डेवलपर्स हमारे पुस्तकालयों का उपयोग करेंगे, उन्हें खरोंच से अपने एनालॉग्स लिखने में समय बिताने के बजाय उन्हें खत्म करने और आगे विकसित करने में मदद करेंगे। इस लेख में मैं ई-कॉमर्स कार्यों के लिए सामान्य समस्याओं को हल करने के लिए डिज़ाइन किए गए सात पुस्तकालयों के बारे में संक्षेप में बात करना चाहता हूं - मुझे खुशी होगी यदि वे आपके लिए काम में आते हैं, और मुझे उन्हें एक साथ विकसित करने में और भी अधिक खुशी होगी :)

1. ऑनलाइन वित्तीयकरण: एटीओएल ऑनलाइन के लिए एक ग्राहक


अन्य रूसी कंपनियों की तरह, हम FZ-54 की आवश्यकताओं का पूरी तरह से पालन करने के लिए बाध्य हैं, जिनमें से एक ऑनलाइन वित्तीयकरण है। Lamoda.ru पर सभी प्रीपेड ऑर्डर हमेशा राजकोषीय होते हैं: वे ग्राहकों को भेजे जाने वाले ऑनलाइन चेक उत्पन्न करते हैं। हमारी राजकोषीय सेवा एटीओएल ऑनलाइन प्रणाली के साथ एपीआई द्वारा काम करती है , और हमारी सूची में पहला पुस्तकालय इस सेवा के लिए एक पूर्ण ग्राहक है। लाइब्रेरी के अलावा, हमने एक बंडल भी पोस्ट किया, जिसके साथ आप इसे सिम्फनी फ्रेमवर्क पर आधारित किसी भी प्रोजेक्ट से आसानी से जोड़ सकते हैं। लाइब्रेरी को किसी भी अन्य PHP फ्रेमवर्क में एम्बेड किया जा सकता है: Laravel, Yii, आदि - बस लाइब्रेरी के लिए एक "आवरण" लिखें।

2. प्रीपेड भुगतान: भुगतान के साथ बातचीत


प्रीपेड भुगतानों को संसाधित करने के लिए, हम सक्रिय रूप से भुगतान सेवा के साथ बातचीत करते हैं। इस सेवा में कई सॉफ्टवेयर इंटरफेस हैं। हम पेमेंट इनपे विकल्प का उपयोग करते हैं और इसके लिए अपने स्वयं के एपीआई क्लाइंट को लिखा है। पुस्तकालय आपको कई टर्मिनलों में हेरफेर करने की अनुमति देता है, मानक PSR-3 लॉगिंग का समर्थन करता है। पूर्व-कॉन्फ़िगर किए गए गज़ल क्लाइंट का उपयोग करना भी संभव है - इससे गज़ल मॉक हैंडलर का उपयोग करके परीक्षण को व्यवस्थित करना आसान हो जाता है।

हमारी लाइब्रेरी बंडल टर्मिनलों का एक सिमेंटिक कॉन्फ़िगरेशन प्रदान करती है और आपको विभिन्न एपीआई परिचालनों के लिए क्लाइंट सेटिंग्स (अब तक केवल टाइमआउट) को आसानी से कॉन्फ़िगर करने की अनुमति देती है।

3. उत्पाद लेबलिंग: GS1 Datamatrix कोड पार्सर


हमारी कंपनी में 2019 की सबसे महत्वपूर्ण परियोजनाओं में से एक माल के राज्य लेबलिंग के लिए समर्थन है। इस परियोजना के हिस्से के रूप में, जीएस 1 डाटामेट्रिक्स प्रारूप में - कुछ श्रेणियों के सभी उत्पादों पर विशेष अद्वितीय कोड लागू किए जाएंगे। ये कोड किसी भी खरीदार को माल की प्रामाणिकता, उनके मूल और इतिहास को सत्यापित करने की अनुमति देंगे। इन बारकोड के साथ काम करने के लिए लमोडा आंतरिक प्रणालियों के लिए, हमने जीएस 1 कोड के सही पार्सिंग के लिए एक पुस्तकालय विकसित किया है।
निकट भविष्य में, हम मार्किंग और ट्रैसेबिलिटी इंफॉर्मेशन सिस्टम (आईपी एमपी) के साथ बातचीत के लिए अपने विकसित ग्राहकों के स्रोत कोड को भी शामिल करने की योजना बना रहे हैं।

4. माइक्रोसिस्ट सर्विस: टैक्टिशियन टीम बस के लिए मिडलवेयर


हमारे पास सौ से अधिक माइक्रोसर्विसेज हैं जो कई अलग-अलग ऑपरेशन करते हैं: वे भुगतान की स्थिति की जांच करते हैं या स्टोरेज में नई फाइलें, कैशियर को कंट्रोल कमांड भेजते हैं, डाउनलोड करते हैं और बाहरी सेवाओं से फोटो प्रोसेस करते हैं। इनमें से लगभग सभी ऑपरेशन पृष्ठभूमि में किए जाते हैं, और कमांड बस पैटर्न उनके प्रबंधन के लिए उत्कृष्ट है। PHP-सिस्टम में बस को लागू करने के लिए, हमने एक तैयार समाधान चुना - ओपन टैक्टिस लाइब्रेरी।

हालांकि, एक समस्या उत्पन्न हुई: हमारी पृष्ठभूमि की टीमें अक्सर बाहरी सेवाओं के साथ बातचीत करती हैं, जिनमें एन सेकंड में संचालन की संख्या की सीमा होती है। और टैक्टिशियन में विशिष्ट समय विंडो में निष्पादन योग्य कमांड की संख्या को नियंत्रित करने की क्षमता नहीं है। इसलिए, हमने एक अतिरिक्त मिडलवेयर विकसित किया - टैक्टिशियन रेट लिमिट लाइब्रेरी। इसकी मदद से, आप एक नई प्रसंस्करण परत जोड़ सकते हैं जो चयनित दर सीमित करने की रणनीति के अनुसार बस पर निष्पादित कमांड की संख्या को ट्रैक करता है। रणनीतियाँ प्लग करने योग्य हैं, स्टीपल लाइब्रेरी से रणनीतियाँ बॉक्स से उपलब्ध हैं।

पब्लिक डोमेन में भी लाइब्रेरी के लिए हमारा सिम्फनी बंडल है।

5. प्रोमेथियस के लिए मैट्रिक्स एकत्र करना और प्रदान करना


हमारे माइक्रोसर्विसेज तकनीकी और व्यावसायिक मेट्रिक्स उत्पन्न करते हैं, जिन्हें फिर पूरे के -8 क्लस्टर से प्रोमेथियस ऑपरेटर के माध्यम से एकत्र किया जाता है। इस सब को प्रबंधित करने के लिए, हमने एक लाइब्रेरी लिखी जो कस्टम मेट्रिक्स को "कलेक्ट-सेव-शो-शो" परिदृश्य के अनुसार प्रोसेस करती है। उसी समय, लाइब्रेरी ऑपरेटिंग मोड का समर्थन करती है जिसमें एक स्क्रिप्ट आइटम दक्षता बढ़ाने के लिए छोड़ा जा सकता है। उदाहरण के लिए, त्वरित कम्प्यूटेशनल मैट्रिक्स के लिए, एक सरलीकृत "कलेक्ट-शो" परिदृश्य निष्पादित किया जा सकता है। और धीमी गति से व्यापार करने वाले मेट्रिक्स के साथ काम करना आंशिक रूप से पृष्ठभूमि में अनुवाद कर सकता है, जबकि दो चरणों में टूट जाता है: "कलेक्ट-सेव" + "कलेक्शन (स्टोरेज से) - शो"।

लाइब्रेरी में अपने मीट्रिक जनरेटर लिखने और रिपॉजिटरी लिखने के लिए दोनों में अमूर्तता के आवश्यक स्तर हैं। बॉक्स से बाहर डॉक्ट्रिन के लिए एक अमूर्त एडॉप्टर है, जिसे डेटाबेस में डेटा को बचाने के लिए इकाई पर कॉन्फ़िगर किया जा सकता है।

मीट्रिक रेंडर फॉर्मेट के रूप में, वर्तमान में प्रोमेथियस और टेलीग्राफ httpjson समर्थित हैं।

पुस्तकालय एक सिम्फनी बंडल के साथ आता है, जो मीट्रिक स्रोतों, रिपॉजिटरी और रूटिंग मीट्रिक का एक सिमेंटिक कॉन्फ़िगरेशन प्रदान करता है। इसमें स्रोतों से डिबगिंग और मैट्रिक्स को बचाने के लिए सहायक कमांड भी हैं (उदाहरण के लिए, क्रोन मेट्रिक्स की गणना के लिए)।

6. परीक्षण फ़ाइल भंडारण: विभिन्न फ़ाइल सिस्टम के साथ काम करना


परीक्षण को स्वचालित करने के लिए, हम कोडप्शन फ्रेमवर्क का उपयोग करते हैं, जो हमें विभिन्न स्तरों के परीक्षण लिखने की अनुमति देता है और मानक मॉड्यूल की काफी व्यापक लाइब्रेरी है। हमने हाल ही में एक अलग लेख में विकास का परीक्षण करने के लिए अपने दृष्टिकोणों के बारे में लिखा और एक PHP रूस सम्मेलन में बात की। एफ़टीपी और स्थानीय फाइलसिस्टम के साथ बातचीत के लिए कोडैप्ट के पास तैयार मॉड्यूल हैं, लेकिन हमारे परीक्षणों में किसी भी अन्य फ़ाइल सिस्टम के साथ काम करने की आवश्यकता है। कम से कम, हम AWS S3 और Webdav का भी उपयोग करते हैं। इसके अलावा, मैं एक ही एपीआई का उपयोग करके सभी फाइल सिस्टम के साथ बातचीत करना चाहूंगा (यह सभी फाइल सिस्टम है :))।

सौभाग्य से, एक खुला फ्लाईसिस्टम पुस्तकालय है जो विभिन्न फ़ाइल सिस्टम के साथ काम करने के लिए एक एकल सॉफ्टवेयर इंटरफ़ेस प्रदान करता है। इसलिए हमें केवल दो उपकरणों को संयोजित करने की आवश्यकता थी - जो कि हमने फ्लाईसिस्टम पर एक आवरण -कोड-फ्लाईसिस्टम मॉड्यूल के रूप में एक आवरण लिखकर किया था। अब यह SFTP, S3 और Webdav का समर्थन करता है। यह एक बार वाईएमएल टेस्ट कॉन्फिग में वांछित फाइल सिस्टम से कनेक्ट करने के लिए सेटिंग्स को कॉन्फ़िगर करने के लिए पर्याप्त है, और उसके बाद आप एक ही तरीके के सेट का उपयोग करके सभी फाइल सिस्टम के साथ काम कर सकते हैं: एक फाइल लिखें, एक फाइल कॉपी करें, एक डायरेक्टरी को क्लीन करें, आदि। मॉड्यूल पहले से ही एडसेप्शन और अनुशंसाओं के पेज में शामिल है कोडेसेप्शन: codeception.com/addons

7. बहु किरायेदार मोड में पर्यावरण चर के साथ काम करना


व्यावसायिक प्रक्रियाओं के स्वचालन के विभाग में, ऐसे सिस्टम हैं जो बहु किरायेदार मोड में काम करते हैं। अपने काम को सुनिश्चित करने के लिए, पर्यावरण चर के साथ काम करने में सक्षम होना आवश्यक है - यह निर्धारित करने के लिए कि वर्तमान समय में किस चर का उपयोग करना है।

हमारी लाइब्रेरी बहु किरायेदार मोड में पर्यावरण चर के साथ काम करने के लिए कई रणनीतियाँ प्रदान करती है। प्रारंभिक चरण में पारित मापदंडों के आधार पर, पुस्तकालय यह निर्धारित करता है कि वर्तमान अनुरोध में किस पर्यावरण चर को एक्सेस किया जाना चाहिए।

जारी रखा जाए


यह पुस्तकालयों का केवल पहला हिस्सा है। हमारे पास एक दर्जन से अधिक अंदर हैं - वे कतार में इंतजार कर रहे हैं जब हम उन्हें थोड़ा कंघी करते हैं और उन्हें सार्वजनिक डोमेन में डालते हैं। यह मुझे यह समझने के लिए प्रेरित करता है कि ये पुस्तकालय किसी और के लिए उपयोगी हो सकते हैं। मैं गितुब पर टिप्पणियों और सितारों पर खुशी मनाता हूं, और मुझे अन्य डेवलपर्स के साथ पुस्तकालयों को विकसित करने के लिए जारी रखने की उम्मीद है। दरअसल, कई रूसी ई-कॉमर्स प्रोजेक्ट्स ATOL और Payure के साथ काम करते हैं। डाटामेट्रिक्स के लिए, लेख में वर्णित कोड पार्सर के अलावा, हमारे पास कुछ ग्राहक भी हैं जो हम पहले से ही आंतरिक रूप से उपयोग करते हैं - ये लाइब्रेरी GitHub पर कतार में पहली बार हैं।

हम अन्य भाषाओं के बारे में नहीं भूलने की कोशिश करते हैं - हमने पहले से ही गो पर पहला पुस्तकालय पोस्ट किया है (हमने इसके बारे में अधिक यहां हैबे पर लिखा है ) और हम दूसरों को तैयार कर रहे हैं। देखते रहो!

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


All Articles