उत्पादन प्रणालियों में आवेदन जाओ। प्रमाणकों

शुभ दोपहर, हब्र!

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



ज्वाइन करने के बजाय


हबर पढ़ना, मुझे अक्सर सत्यापन के कार्य का सामना करना पड़ा - जानकारी के उपयोगकर्ता इनपुट की शुद्धता की जांच करना। प्रत्येक लेखक ने इस समस्या को अपने तरीके से हल किया। मैंने एक बाहरी सेवा का उपयोग किया या अपना सर्वर लिखा। मैं इस समस्या का एक और समाधान प्रस्तावित करता हूं - एक निर्देशिका सेवा का निर्माण। निर्देशिकाएँ वे सर्वर होते हैं जिनमें एक निश्चित दिशा की जानकारी होती है और जिसे एक अलग, स्वतंत्र सबसिस्टम में परिवर्तित किया जा सकता है। आमतौर पर, निर्देशिका का उपयोग उपयोगकर्ता को भरने और दर्ज की गई जानकारी को मान्य करने में मदद करने के लिए किया जाता है। इस तरह की निर्देशिकाओं के उदाहरण के रूप में, कोई व्यक्ति अनुरोध करने वाले क्षेत्रों, शहरों के अनुरोधों, KLADR, पोस्टल कोड और GAIS (राज्य स्वचालित सूचना प्रणाली) की निर्देशिकाओं का हवाला दे सकता है। लगभग सभी मौजूदा सिस्टम JSON या साबुन का उपयोग करके REST डेटा का आदान-प्रदान करते हैं। मैं ऐसी निर्देशिकाओं के विकास के लिए एक खाका बताने की कोशिश करूंगा, जो इस तरह के सिस्टम को जल्दी से बना दे। और मेरे आंतरिक प्रोजेक्ट के स्रोतों को गिथब पर रखा।

सिस्टम का विकल्प। प्रश्न तुरंत उठता है कि जीओ क्यों? क्यों लिनक्स? और कौन सा लिनक्स?


और इसलिए चलिए शुरू करते हैं। हमारी वर्तमान प्रणाली 1C से उत्पादों पर बनाई गई है, अर्थात् बस और कॉर्पोरेट पोर्टल। OS को एकजुट करने के लिए, हमने अनुशंसित 1C इंस्टॉलेशन - Linux OS CentOS से चुना। इस OS पर 1C वेब वातावरण लॉन्च करने का प्रयास किया जाता है। विंडोज ओएस पर विचार नहीं किया गया था। मैं यह नहीं कह सकता कि मुझे पसंद है, मैं डेबियन चुनूंगा, लेकिन ऐसा हुआ। हमें एकीकरण की आवश्यकता थी, क्योंकि ऐतिहासिक रूप से हमारे पास एक बड़ा चिड़ियाघर ओएस, ओएस लिनक्स के विभिन्न बिल्ड, ओएस फ्रीबीएसडी, ओएस वीएक्सवर्क्स हैं। और, मेरी राय में, सबसे तेज लिनक्स CRUX OS है।

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

  • स्वायत्त सर्वर सेवा;
  • REST पर डेटा एक्सचेंज होता है;
  • क्षैतिज रूप से स्केल करने की क्षमता है;
  • जल्दी से डेटा देना चाहिए, यद्यपि निरर्थक, 1 सी उत्पादों पर प्रसंस्करण;
  • नई व्यावसायिक चुनौतियों के आधार पर जल्दी से तर्क का पुनर्निर्माण करें;

उपरोक्त मानदंडों और इसके प्रवेश में आसानी के अनुसार, गो को संदर्भ पुस्तकें लिखने के लिए चुना गया था। इसके अलावा:

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

यही है, गो निर्देशिका बनाने के लिए अच्छी तरह से अनुकूल है। अपने आप से मैं यह जोड़ना चाहूँगा कि php और Go एक समान हैं, जो आपको इन भाषाओं में लिखे सिस्टम का समर्थन करने की अनुमति देता है। गो के पास पहले से ही बड़ी संख्या में समाधान हैं जो आपको अपने कार्यों के लिए इन समाधानों को जल्दी से इकट्ठा करने की अनुमति देता है, अर्थात, डिजाइनर में क्यूब्स से घर के एक मॉडल को कैसे इकट्ठा किया जाए। और इसलिए अभ्यास करने के लिए आगे बढ़ते हैं।

GO। पुस्तकालयों या समाधानों को स्थापित करें और खोजें


स्थापित करने के लिए, आपको डाउनलोड पृष्ठ से संग्रह को डाउनलोड करने और इसे स्थापना फ़ोल्डर में अनज़िप करने की आवश्यकता है, मैं / usr / स्थानीय का उपयोग करूंगा।

wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.12.1.linux-amd64.tar.gz 

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

 export GOPATH=/home/gouser export GOROOT= /user/local/go/ export PATH=$PATH:/usr/local/go/bin 

अपने प्रोजेक्ट के लिए एक फ़ोल्डर तैयार करना:

 mkdir -p /home/gouser/{bin,pkg,src} 

फिर हमारी परियोजना के लिए सब कुछ सरल है, src में एक फ़ोल्डर बनाएं, गो एक्सटेंशन के साथ फाइलें बनाएं और परियोजना को संकलित करें:

 go build 

एक परियोजना बनाने के लिए सिफारिशें। सामान्य सिफारिशें


  • जीथब प्रोजेक्ट के लिए, src / github.com प्रोजेक्ट / <प्रोजेक्ट नाम> के लिए एक फ़ोल्डर बनाना आसान है;
  • परियोजना को एक पैकेज के रूप में डिजाइन करना, प्रत्येक प्रक्रिया पर टिप्पणी करना बहुत आसान तरीके से गोडॉक में तैयार किए गए कार्यक्रम प्रलेखन प्राप्त करने का तरीका है;
  • एक अलग मॉड्यूल में वैश्विक चर निकालें और यदि आवश्यक हो तो इसे कनेक्ट करें (अकेले एक टेम्पलेट जैसा दिखता है);

दोनों पूर्व-निर्मित उदाहरणों और पुस्तकालयों को libs.garden पर पाया जा सकता है। पाया गया उदाहरणों की स्थापना

 go get <  > ,  github.com/labstack/echo 

पोस्टकोड। प्रोजेक्ट का लिंक


गो स्थापित करने के बाद , आइए एक उदाहरण पर चलते हैं। आप कमांड का उपयोग करके संकलन के लिए इसे डाउनलोड और इंस्टॉल कर सकते हैं:

 go get github.com/julienschmidt/httprouter go get github.com/LindsayBradford/go-dbf/godbf go get github.com/go-sql-driver/mysql go get github.com/julienschmidt/httprouter cd /home/gouser/go/src/github.com/ git clone https://github.com/Theo730/postcode.git postcode 

समस्या का बयान


रूसी डाक द्वारा डाक कोड के साथ काम करने के लिए एक निर्देशिका बनाना आवश्यक है, जो निम्नलिखित समस्याओं को हल करेगा:

  • पोस्टल कोड की वैधता;
  • सभी लेखांकन वस्तुओं (क्षेत्रों, शहरों, आदि) की एक सूची प्राप्त करने की क्षमता;
  • शहरों, जिलों, क्षेत्रों के लिए लेखांकन के उद्देश्य में सभी सूचकांक प्राप्त करना ...
  • ऊपर से, JSON के रूप में REST के माध्यम से डेटा का आदान-प्रदान करने के लिए।

कार्य अनुसंधान


सबसे पहले आपको डेटाबेस को इनिशियलाइज़ करना होगा, और फिर इस डेटाबेस में एक रिक्वेस्ट सर्वर बनाना होगा। एक ज़िप कोड डेटाबेस की आवश्यकता है। खोज है vinfo.russianpost.ru/database/ops.html । फॉक्सप्रो में बेस और जिप आर्काइव में। निम्नलिखित लेखांकन वस्तुएं डेटाबेस में स्थित हैं:

  • क्षेत्र;
  • स्वायत्त obla;
  • क्षेत्र;
  • स्थान;
  • ज़िप कोड।

Libs.garden पर आरंभीकरण के लिए हम डेटाबेस और ज़िप के साथ काम करने के घटक और उदाहरण पाते हैं। हम एक अनुरोध राउटर के रूप में httprouter लेते हैं। हम परियोजना से जुड़ते हैं।
डेटाबेस फ़ाइल की जांच करते समय, यह पाया गया कि सभी लेखांकन ऑब्जेक्ट निर्दिष्ट नहीं हैं , अर्थात, शून्य मान नमूने में मौजूद हैं।

समाधान और कार्यान्वयन


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

कुल के बजाय


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

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

और थोड़ा सा मैट्रिक्स


यह संदर्भ किसी भी परियोजना या ढांचे से जुड़ा हो सकता है, लेकिन चूंकि हमारे पास बिट्रिक्स है, इसलिए मैं मानक घटकों के वेब रूपों के लिए एक सत्यापनकर्ता जोड़ने के लिए एक मॉड्यूल रखता हूं।

PS सर्वर इंस्टॉलेशन को विशेष रूप से 3 चरणों में विभाजित किया गया है। यह vinfo.russianpost.ru साइट से डेटाबेस के अप्रचलन के कारण और लाइसेंस प्रतिबंधों के कारण किया जाता है। डेटाबेस स्वयं मेरी संपत्ति नहीं है। इसका उपयोग करते हुए, आप घोषित साइट के ऊपर लाइसेंसिंग नीति को स्वीकार करते हैं।

कॉर्पोरेट सेगमेंट के लिए और शर्तों के तहत मेरी परियोजनाओं में बनाए गए PSS सर्वर ऑनलाइन नहीं होने चाहिए। आपके विशिष्ट कार्यों के लिए कोड को संशोधित किया जा सकता है। हम अपनी परियोजनाओं के लिए बाहरी उपयोग का उपयोग नहीं करते हैं। निम्नलिखित परियोजनाएँ जिनका मैं वर्णन करना चाहता हूँ वे एक पूर्ण सीएलएडीआर और एक धारा रेडियो प्रोटोकॉल विश्लेषक हैं। लाइन में आगे Bitrix24 + तारांकन है। कृपया अधिक दिलचस्प कौन है पर टिप्पणी करें।

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


All Articles