मैं इस तरह कैसे जीने लगा?
कुछ समय पहले मुझे एक अत्यधिक भरी हुई परियोजना के बैकएंड पर काम करना था, जिसमें जटिल गणनाओं और तृतीय-पक्ष सेवाओं के अनुरोधों के साथ बड़ी संख्या में पृष्ठभूमि कार्यों के नियमित निष्पादन को व्यवस्थित करना आवश्यक था। परियोजना अतुल्यकालिक है और मेरे आने से पहले, इसमें क्रॉन-लॉन्चिंग कार्यों के लिए एक सरल तंत्र था: वर्तमान समय की जांच करने वाला एक लूप और इकट्ठा होने के माध्यम से कोरटाइन के समूहों को लॉन्च करना - यह दृष्टिकोण तब तक स्वीकार्य साबित हुआ जब तक कि ऐसे दर्जनों और सैकड़ों कोरटाइन नहीं थे हालाँकि, जब उनकी संख्या दो हजार से अधिक हो गई, तो मुझे एक दलाल, कई श्रमिकों आदि के साथ एक सामान्य कार्य कतार आयोजित करने के बारे में सोचना पड़ा।
सबसे पहले मैंने अजवाइन को आज़माने का फैसला किया, जिसका मैंने पहले भी इस्तेमाल किया था। परियोजना की अतुल्यकालिक प्रकृति के कारण, मैंने प्रश्न का गहराई से अध्ययन किया और देखा
मैं यह कहूंगा, परियोजना बहुत दिलचस्प है और हमारी टीम के अन्य अनुप्रयोगों में काफी सफलतापूर्वक काम करती है, और लेखक स्वयं कहते हैं कि वह एक अतुल्यकालिक पूल का उपयोग करके इसे उत्पादन में लाने में सक्षम थे। लेकिन, दुर्भाग्य से, यह वास्तव में मेरे अनुकूल नहीं था, जैसा कि यह निकला
इस संबंध में मैंने तलाश शुरू की альтернативы और यह मिल गया! अजवाइन के निर्माता, विशेष रूप से, जैसा कि मैं इसे समझता हूं
आप भी देख सकते हैं
हम क्या करते हैं?
इसलिए, लेखों की एक छोटी श्रृंखला में, मैं आपको दिखाऊंगा कि फ़ॉस्ट का उपयोग करके पृष्ठभूमि कार्यों से डेटा कैसे एकत्र किया जाए। जैसा कि नाम से पता चलता है, हमारे उदाहरण प्रोजेक्ट का स्रोत होगा,
पुनश्च जिस विश्वास के साथ निगरानी के बारे में बात लिखी गई थी, उसे देखते हुए, मुझे लगता है कि पिछले लेख के अंत में पाठक अभी भी कुछ इस तरह दिखेगा:
परियोजना आवश्यकताएँ
इस तथ्य के कारण कि मैंने पहले ही वादा किया है, आइए एक छोटी सूची बनाएं कि सेवा क्या करने में सक्षम होनी चाहिए:
- प्रतिभूतियाँ और उनका अवलोकन अपलोड करें (लाभ और हानि, बैलेंस शीट, नकदी प्रवाह सहित - पिछले वर्ष के लिए) - नियमित रूप से
- ऐतिहासिक डेटा अपलोड करें (प्रत्येक ट्रेडिंग वर्ष के लिए, ट्रेडिंग के समापन मूल्य के चरम मूल्य खोजें) - नियमित रूप से
- नवीनतम ट्रेडिंग डेटा नियमित रूप से अपलोड करें
- प्रत्येक सुरक्षा के लिए संकेतकों की एक अनुकूलित सूची नियमित रूप से अपलोड करें
जैसा कि अपेक्षित था, हम शुरू से ही प्रोजेक्ट के लिए एक नाम चुनते हैं: हॉर्टन
हम इंफ्रास्ट्रक्चर तैयार कर रहे हैं
शीर्षक निश्चित रूप से मजबूत है, हालाँकि, आपको बस काफ्का (और ज़ुकीपर - एक कंटेनर में), काफ़ड्रॉप (यदि हम विषयों में संदेशों को देखना चाहते हैं), मोंगोडब के साथ डॉकर-कंपोज़ के लिए एक छोटा कॉन्फिगरेशन लिखना है। हम पाते हैं [docker-compose.yml](
version: '3'
services:
db:
container_name: horton-mongodb-local
image: mongo:4.2-bionic
command: mongod --port 20017
restart: always
ports:
- 20017:20017
environment:
- MONGO_INITDB_DATABASE=horton
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin_password
kafka-service:
container_name: horton-kafka-local
image: obsidiandynamics/kafka
restart: always
ports:
- "2181:2181"
- "9092:9092"
environment:
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-service:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
KAFKA_RESTART_ATTEMPTS: "10"
KAFKA_RESTART_DELAY: "5"
ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
kafdrop:
container_name: horton-kafdrop-local
image: 'obsidiandynamics/kafdrop:latest'
restart: always
ports:
- '9000:9000'
environment:
KAFKA_BROKERCONNECT: kafka-service:29092
depends_on:
- kafka-service
यहां कुछ भी जटिल नहीं है। काफ्का के लिए दो श्रोता घोषित किए गए थे: एक (आंतरिक) समग्र नेटवर्क के अंदर उपयोग के लिए, और दूसरा (बाहरी) बाहर से अनुरोधों के लिए, इसलिए उन्होंने इसे बाहर भेज दिया। 2181 - ज़ूकीपर बंदरगाह। बाकी, मुझे लगता है, स्पष्ट है।
परियोजना का ढाँचा तैयार करना
मूल संस्करण में, हमारे प्रोजेक्ट की संरचना इस तरह दिखनी चाहिए:
horton
├── docker-compose.yml
└── horton
├── agents.py *
├── alphavantage.py *
├── app.py *
├── config.py
├── database
│ ├── connect.py
│ ├── cruds
│ │ ├── base.py
│ │ ├── __init__.py
│ │ └── security.py *
│ └── __init__.py
├── __init__.py
├── records.py *
└── tasks.py *
*मैंने जो कुछ भी नोट किया हमने अभी तक इसे नहीं छुआ है, हम बस खाली फ़ाइलें बनाते हैं।**
हमने एक संरचना बनाई. अब आवश्यक निर्भरताएँ जोड़ें, कॉन्फ़िगरेशन लिखें और मोंगोडब से कनेक्ट करें। मैं लेख में फ़ाइलों का पूरा पाठ प्रदान नहीं करूंगा, ताकि इसमें देरी न हो, लेकिन मैं आवश्यक संस्करणों के लिंक प्रदान करूंगा।
आइए प्रोजेक्ट के बारे में निर्भरता और मेटा से शुरुआत करें -
इसके बाद, हम निर्भरता स्थापित करना और वर्चुअलएन्व बनाना शुरू करते हैं (या आप स्वयं वेनव फ़ोल्डर बना सकते हैं और पर्यावरण को सक्रिय कर सकते हैं):
pip3 install poetry (если ещё не установлено)
poetry install
अब चलिए बनाते हैं
मोंगो से कनेक्ट होने पर, सब कुछ काफी सरल है। की घोषणा की
आगे क्या होगा?
लेख बहुत लंबा नहीं है, क्योंकि यहां मैं केवल प्रेरणा और तैयारी के बारे में बात कर रहा हूं, इसलिए मुझे दोष न दें - मैं वादा करता हूं कि अगले भाग में एक्शन और ग्राफिक्स होंगे।
तो, इस अगले भाग में हम:
- आइए aiohttp पर अल्फ़ावेंटेज के लिए एक छोटा क्लाइंट लिखें जिसमें हमें आवश्यक अंतिम बिंदुओं के अनुरोध हों।
- आइए एक एजेंट बनाएं जो प्रतिभूतियों और उनके लिए ऐतिहासिक कीमतों पर डेटा एकत्र करेगा।
स्रोत: www.habr.com