مجھے ایسے کیسے جینا آیا؟
کچھ عرصہ پہلے مجھے ایک انتہائی بھری ہوئی پراجیکٹ کے بیک اینڈ پر کام کرنا پڑا، جس میں پیچیدہ حسابات اور تھرڈ پارٹی سروسز کے لیے درخواستوں کے ساتھ بیک گراؤنڈ کے کاموں کی ایک بڑی تعداد کے باقاعدہ عمل کو منظم کرنا ضروری تھا۔ یہ پروجیکٹ متضاد ہے اور میرے آنے سے پہلے، اس میں کرون لانچنگ کے کاموں کے لیے ایک سادہ طریقہ کار موجود تھا: ایک لوپ موجودہ وقت کی جانچ کرتا ہے اور کوروٹینز کے گروپس کو اکٹھا کرنے کے ذریعے لانچ کرتا ہے - یہ نقطہ نظر اس وقت تک قابل قبول ثابت ہوا جب تک کہ اس طرح کے درجنوں اور سیکڑوں کوروٹائنز نہ ہوں۔ تاہم، جب ان کی تعداد دو ہزار سے تجاوز کر گئی، مجھے ایک بروکر، کئی کارکنوں وغیرہ کے ساتھ ایک عام کام کی قطار کو ترتیب دینے کے بارے میں سوچنا پڑا۔
سب سے پہلے میں نے سیلری کو آزمانے کا فیصلہ کیا، جو میں نے پہلے استعمال کیا تھا۔ پروجیکٹ کی متضاد نوعیت کی وجہ سے، میں نے سوال میں غوطہ لگایا اور دیکھا
میں یہ کہوں گا، یہ منصوبہ بہت دلچسپ ہے اور ہماری ٹیم کی دیگر ایپلی کیشنز میں کافی کامیابی سے کام کرتا ہے، اور مصنف خود کہتے ہیں کہ وہ ایک غیر مطابقت پذیر پول کا استعمال کرکے اسے پروڈکشن میں لانے کے قابل تھا۔ لیکن، بدقسمتی سے، یہ واقعی میرے مطابق نہیں تھا، جیسا کہ یہ نکلا۔
اس سلسلے میں میں نے دیکھنا شروع کیا۔ متبادل اور اسے مل گیا! اجوائن کے تخلیق کار، خاص طور پر، جیسا کہ میں اسے سمجھتا ہوں۔
اس کے علاوہ، آپ دیکھ سکتے ہیں
ہم کیا کریں؟
لہذا، مضامین کی ایک مختصر سیریز میں، میں آپ کو دکھاؤں گا کہ Faust کا استعمال کرتے ہوئے پس منظر کے کاموں سے ڈیٹا کیسے اکٹھا کیا جائے۔ ہمارے مثال کے منصوبے کا ذریعہ ہوگا، جیسا کہ نام سے پتہ چلتا ہے،
PS جس اعتماد کے ساتھ نگرانی کے بارے میں نکتہ لکھا گیا تھا اس کو دیکھتے ہوئے، میں سمجھتا ہوں کہ آخری مضمون کے آخر میں پڑھنے والے کو اب بھی کچھ اس طرح نظر آئے گا:
پروجیکٹ کی ضروریات
اس حقیقت کی وجہ سے کہ میں نے پہلے ہی وعدہ کیا ہے، آئیے ایک چھوٹی سی فہرست بناتے ہیں کہ خدمت کو کیا کرنے کے قابل ہونا چاہئے:
- سیکیورٹیز اور ان کا ایک جائزہ (بشمول منافع اور نقصان، بیلنس شیٹ، کیش فلو - پچھلے سال کے لیے) - باقاعدگی سے اپ لوڈ کریں
- تاریخی ڈیٹا اپ لوڈ کریں (ہر تجارتی سال کے لیے، ٹریڈنگ کی اختتامی قیمت کی انتہائی قدریں تلاش کریں) - باقاعدگی سے
- تازہ ترین تجارتی ڈیٹا اپ لوڈ کریں - باقاعدگی سے
- ہر سیکیورٹی کے لیے اشارے کی حسب ضرورت فہرست اپ لوڈ کریں - باقاعدگی سے
جیسا کہ توقع کی گئی ہے، ہم شروع سے پروجیکٹ کے لیے ایک نام کا انتخاب کرتے ہیں: ہارٹن
ہم انفراسٹرکچر کی تیاری کر رہے ہیں۔
عنوان یقینی طور پر مضبوط ہے، تاہم، آپ کو بس کافکا (اور زوکیپر - ایک کنٹینر میں)، kafdrop (اگر ہم موضوعات میں پیغامات دیکھنا چاہتے ہیں)، mongodb کے ساتھ docker-compose کے لیے ایک چھوٹی سی ترتیب لکھنے کی ضرورت ہے۔ ہم حاصل [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 *
*سب کچھ جو میں نے نوٹ کیا۔ ہم ابھی تک اسے ہاتھ نہیں لگاتے، ہم صرف خالی فائلیں بناتے ہیں۔**
ہم نے ایک ڈھانچہ بنایا۔ آئیے اب ضروری انحصار شامل کریں، تشکیل لکھیں اور mongodb سے جڑیں۔ میں مضمون میں فائلوں کا مکمل متن فراہم نہیں کروں گا، تاکہ اس میں تاخیر نہ ہو، لیکن میں ضروری ورژن کے لنک فراہم کروں گا۔
آئیے پروجیکٹ کے بارے میں انحصار اور میٹا کے ساتھ شروع کریں -
اس کے بعد، ہم انحصار کو انسٹال کرنا اور ورچوئلنوی بنانا شروع کرتے ہیں (یا آپ خود venv فولڈر بنا سکتے ہیں اور ماحول کو چالو کر سکتے ہیں):
pip3 install poetry (если ещё не установлено)
poetry install
اب تخلیق کرتے ہیں۔
منگو سے منسلک ہونے پر، سب کچھ بہت آسان ہے. اعلان کیا
آگے کیا ہوگا؟
مضمون زیادہ لمبا نہیں ہے، چونکہ یہاں میں صرف حوصلہ افزائی اور تیاری کے بارے میں بات کر رہا ہوں، اس لیے مجھ پر الزام نہ لگائیں - میں وعدہ کرتا ہوں کہ اگلے حصے میں ایکشن اور گرافکس ہوں گے۔
تو، اس اگلے حصے میں ہم:
- آئیے aiohttp پر الفاوانٹیج کے لیے ایک چھوٹا سا کلائنٹ لکھتے ہیں جن کی ہمیں ضرورت کے اختتامی پوائنٹس کی درخواستیں ہیں۔
- آئیے ایک ایجنٹ بنائیں جو ان کے لیے سیکیورٹیز اور تاریخی قیمتوں کا ڈیٹا اکٹھا کرے۔
ماخذ: www.habr.com