فاسٽ تي پس منظر جا ڪم، حصو I: تعارف

فاسٽ تي پس منظر جا ڪم، حصو I: تعارف

مون کي اهڙي زندگي ڪيئن آئي؟

ڪجهه عرصو اڳ مون کي هڪ انتهائي لوڊ ٿيل منصوبي جي پس منظر تي ڪم ڪرڻو پيو، جنهن ۾ اهو ضروري هو ته وڏي تعداد ۾ پس منظر جي ڪمن جي باقاعده عمل کي منظم ڪرڻ لاء پيچيده حساب ۽ ٽئين پارٽي جي خدمتن لاء درخواستون. پروجيڪٽ غير مطابقت پذير آهي ۽ منهنجي اچڻ کان اڳ، ان ۾ ڪرون لانچنگ ڪمن لاءِ هڪ سادو ميکانيزم هو: هڪ لوپ موجوده وقت کي جانچڻ ۽ گڏ ڪرڻ جي ذريعي ڪوروٽين جي گروپن کي لانچ ڪرڻ - اهو طريقو قابل قبول ثابت ٿيو جيستائين اهڙا درجن ۽ سوين ڪوروٽين موجود نه هئا. بهرحال، جڏهن انهن جو تعداد ٻه هزار کان وڌي ويو، مون کي هڪ بروکر، ڪيترن ئي ڪارڪنن، وغيره سان گڏ هڪ معمولي ڪم جي قطار کي منظم ڪرڻ بابت سوچڻو پيو.

پهرين مون فيصلو ڪيو ته سيليري کي آزمايو، جيڪو مون اڳ ۾ استعمال ڪيو هو. پروجيڪٽ جي غير مطابقت واري نوعيت جي ڪري، مون سوال ۾ ٻڏي ويو ۽ ڏٺو مضمونپڻ پروجيڪٽ، آرٽيڪل جي ليکڪ پاران ٺاهي وئي.

مان هن کي چوندس، پروجيڪٽ تمام دلچسپ آهي ۽ اسان جي ٽيم جي ٻين ايپليڪيشنن ۾ ڪافي ڪاميابي سان ڪم ڪري ٿو، ۽ ليکڪ پاڻ چوي ٿو ته هو ان کي پيداوار ۾ رول آئوٽ ڪرڻ جي قابل ٿي ويو هڪ غير معمولي پول استعمال ڪندي. پر، بدقسمتي سان، اهو واقعي مون کي مناسب نه هو، جيئن اهو نڪتو مسئلو ڪمن جي گروپ لانچ سان (ڏسو. گروپ). لکڻ جي وقت تي مسئلو اڳ ۾ ئي بند آهي، جڏهن ته، ڪم هڪ مهيني کان جاري آهي. ڪنهن به صورت ۾، ليکڪ کي سٺي قسمت ۽ تمام بهترين، ڇو ته اتي اڳ ۾ ئي ڪم ڪندڙ شيون آهن ... عام طور تي، نقطي مون ۾ آهي ۽ اوزار مون لاء نم ٿي ويو. ان کان علاوه، ڪجهه ڪمن ۾ مختلف خدمتن لاءِ 2-3 HTTP درخواستون هيون، تنهنڪري ڪمن کي بهتر ڪرڻ جي باوجود، اسان 4 هزار TCP ڪنيڪشن ٺاهيندا آهيون، تقريبن هر 2 ڪلاڪن ۾ - تمام سٺو ناهي... مان هڪ قسم جي لاءِ هڪ سيشن ٺاهڻ چاهيان ٿو. ڪم شروع ڪرڻ وقت. aiohttp ذريعي درخواستن جي وڏي تعداد بابت ٿورو وڌيڪ هتي.

ان سلسلي ۾، مون کي ڏسڻ شروع ڪيو متبادل ۽ اهو مليو! سيلري جي تخليق ڪندڙ، خاص طور تي، جيئن مان سمجهان ٿو سليم کان پڇيو، ٺاهي وئي فيسٽ، اصل ۾ منصوبي لاءِ ڦيرو. فاسٽ ڪافڪا اسٽريمز کان متاثر ٿيو آهي ۽ ڪافڪا سان بروکر طور ڪم ڪندو آهي، راڪس ڊي بي پڻ استعمال ڪيو ويندو آهي نتيجن کي ذخيرو ڪرڻ لاءِ ايجنٽن جي ڪم مان، ۽ سڀ کان اهم ڳالهه اها آهي ته لائبريري غير مطابقت رکندڙ آهي.

پڻ، توهان ڏسي سگهو ٿا تڪڙو مقابلو سيلري ۽ فاسٽ بعد ۾ ٺاهيندڙن کان: انهن جا اختلاف، بروکرز جي وچ ۾ اختلاف، هڪ ابتدائي ڪم تي عمل درآمد. هر شي بلڪل سادو آهي، جڏهن ته، فاسٽ ۾ هڪ سٺي خاصيت ڌيان ڇڪائي ٿو - ٽائيپ ٿيل ڊيٽا موضوع ڏانهن منتقل ڪرڻ لاء.

اسان ڇا ڪريون؟

تنهن ڪري، مضمونن جي هڪ مختصر سيريز ۾، مان توهان کي ڏيکاريندس ته ڪيئن ڊيٽا گڏ ڪجي پس منظر جي ڪمن مان فاسٽ استعمال ڪندي. اسان جي مثال جي منصوبي جو ذريعو ٿيندو، جيئن نالو مشورو ڏئي ٿو، alphavantage.co. مان ڏيکاريندس ته ايجنٽ ڪيئن لکجي (سِنڪ، ٽاپڪس، پارٽيشنز)، ڪيئن ڪجي باقاعده (ڪرون) ايگزيڪيوشن، سڀ کان آسان فاسٽ ڪلائي ڪمانڊ (هڪ ريپر اوور ڪلڪ)، سادو ڪلسٽرنگ، ۽ آخر ۾ اسان هڪ ڊيٽا ڊاگ ڳنڍينداسين ( دٻي کان ٻاهر ڪم ڪرڻ) ۽ ڏسڻ جي ڪوشش ڪريو. گڏ ڪيل ڊيٽا کي ذخيرو ڪرڻ لاء اسان استعمال ڪنداسين mongodb ۽ موٽر ڪنيڪشن لاء.

پي ايس ان اعتماد سان ڏسندي جنهن سان مانيٽرنگ جو نقطو لکيو ويو هو، مان سمجهان ٿو ته آخري مضمون جي آخر ۾ پڙهندڙ اڃا به ڪجهه هن طرح نظر ايندو:

فاسٽ تي پس منظر جا ڪم، حصو I: تعارف

پروجيڪٽ گهرجون

انهي حقيقت جي ڪري ته مون اڳ ۾ ئي واعدو ڪيو آهي، اچو ته هڪ ننڍڙي فهرست ٺاهيو جيڪو خدمت ڪرڻ جي قابل هوندو:

  1. اپلوڊ سيڪيورٽيز ۽ انهن جو هڪ جائزو (بشمول منافعو ۽ نقصان، بيلنس شيٽ، نقد وهڪري - گذريل سال لاءِ) - باقاعده
  2. تاريخي ڊيٽا اپلوڊ ڪريو (هر واپاري سال لاءِ، واپار جي بند قيمت جي انتهائي قدر ڳوليو) - باقاعده
  3. تازه ترين واپاري ڊيٽا اپ لوڊ ڪريو - باقاعده
  4. هر سيڪيورٽي لاءِ اشارن جي حسب ضرورت لسٽ اپ لوڊ ڪريو - باقاعدي

جيئن توقع ڪئي وئي، اسان شروع کان منصوبي لاء نالو چونڊيو ٿا: هارٽن

اسان انفراسٽرڪچر تيار ڪري رهيا آهيون

عنوان يقيني طور تي مضبوط آهي، تنهن هوندي به، توهان کي صرف هڪ ننڍڙي ترتيب لکڻ جي ضرورت آهي ڊاڪر-ڪمپوز سان ڪافڪا (۽ زوڪيپر - هڪ ڪنٽينر ۾)، ڪيفڊراپ (جيڪڏهن اسان عنوانن ۾ پيغام ڏسڻ چاهيون ٿا)، mongodb. اسان حاصل ڪريون ٿا [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/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 *

*سڀ ڪجهه مون نوٽ ڪيو اسان اڃا تائين ان کي هٿ نه ڪيو آهي، اسان صرف خالي فائلون ٺاهيندا آهيون.**

اسان هڪ ڍانچي ٺاهي. ھاڻي اچو ته ضروري انحصار شامل ڪريو، config لکو ۽ منگوڊب سان ڳنڍيو. مان مضمون ۾ فائلن جو مڪمل متن مهيا نه ڪندس، جيئن ان ۾ دير نه ٿئي، پر آئون ضروري نسخن جي لنڪ فراهم ڪندس.

اچو ته منصوبي بابت انحصار ۽ ميٽا سان شروع ڪريون - pyproject.toml

اڳيون، اسان انحصار کي انسٽال ڪرڻ ۽ هڪ ورچوئلنوف ٺاهڻ شروع ڪيو (يا توهان venv فولڊر پاڻ ٺاهي سگهو ٿا ۽ ماحول کي چالو ڪري سگهو ٿا):

pip3 install poetry (если ещё не установлено)
poetry install

هاڻي اچو ته ٺاهي config.yml - سندون ۽ ڪٿي دستڪ ڏيڻ. توھان فوري طور تي ڊيٽا کي الفاوانٽيج لاء اتي رکي سگھو ٿا. خير، اچو ته اڳتي وڌون config.py - اسان جي ترتيب مان ايپليڪيشن لاء ڊيٽا ڪڍو. ها، مان اقرار ڪريان ٿو، مون پنهنجو لب استعمال ڪيو - sitri.

جڏهن منگو سان ڳنڍڻ، هر شيء بلڪل سادو آهي. اعلان ڪيو ڪلائنٽ ڪلاس ڳنڍڻ ۽ بنيادي ڪلاس cruds لاءِ، مجموعن تي سوالن کي آسان بڻائڻ لاءِ.

اڳتي ڇا ٿيندو؟

مضمون تمام ڊگهو نه آهي، ڇاڪاڻ ته هتي مان صرف حوصلا افزائي ۽ تياري بابت ڳالهائي رهيو آهيان، تنهنڪري مون کي الزام نه ڏيو - مان واعدو ڪريان ٿو ته ايندڙ حصي ۾ عمل ۽ گرافڪس هوندا.

تنهن ڪري، هن ايندڙ حصي ۾ اسين:

  1. اچو ته aiohttp تي alphavantage لاءِ ھڪڙو ننڍڙو ڪلائنٽ لکون جن جي اسان کي ضرورت آھي آخري پوائنٽن جي درخواستن سان.
  2. اچو ته هڪ ايجنٽ ٺاهيو جيڪو انهن لاء سيڪيورٽي ۽ تاريخي قيمتن تي ڊيٽا گڏ ڪندو.

پروجيڪٽ ڪوڊ

هن حصي لاء ڪوڊ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو