د فاسټ په اړه د شالید دندې، لومړۍ برخه: پیژندنه

د فاسټ په اړه د شالید دندې، لومړۍ برخه: پیژندنه

ما څنګه داسې ژوند تېر کړ؟

ډیر وخت دمخه ما د یوې خورا بار شوي پروژې شالید کې کار کولو ته اړتیا درلوده ، په کوم کې چې دا اړینه وه چې د پیچلو محاسبو او د دریمې ډلې خدماتو غوښتنې سره د ډیری شالید کارونو منظم اجرا تنظیم کړئ. پروژه غیر متناسب ده او مخکې لدې چې زه راغلم ، دا د کرون لانچ کولو کارونو لپاره یو ساده میکانیزم درلود: یو لوپ چې اوسنی وخت چیک کوي او د راټولولو له لارې د کورټینونو ګروپونه پیلوي - دا طریقه د منلو وړ وګرځید تر هغه چې په لسګونو او سلګونو داسې کورټینونه شتون ولري. په هرصورت، کله چې د دوی شمیر له دوو زرو څخه زیات شو، ما باید د یو بروکر، څو کارمندانو او داسې نورو سره د عادي کاري کتار تنظیم کولو په اړه فکر وکړ.

لومړی ما پریکړه وکړه چې د سیلري هڅه وکړم، کوم چې ما مخکې کارولی و. د پروژې د غیر متناسب طبیعت له امله ، ما پوښتنې ته ډوب شو او ولیدل مقالههم مسوده، د مقالې لیکوال لخوا رامینځته شوی.

زه به دا ووایم، پروژه خورا په زړه پورې ده او زموږ د ټیم په نورو غوښتنلیکونو کې په بریالیتوب سره کار کوي، او لیکوال پخپله وايي چې هغه د دې توان درلود چې د غیر متمرکز حوض په کارولو سره دا تولید ته واړوي. مګر، له بده مرغه، دا واقعیا زما سره مناسب نه و، لکه څنګه چې دا معلومه شوه ستونزه د دندو د ډله ایز پیل سره (وګورئ. ډله). د لیکلو په وخت کې موضوع لا دمخه تړل شوی، مګر کار د یوې میاشتې راهیسې روان دی. په هر حالت کې، لیکوال ته نیکمرغه او د ټولو غوره، ځکه چې په لیب کې لا دمخه د کار کولو شیان شتون لري ... په عموم کې، نقطه په ما کې ده او وسیله زما لپاره نم وه. برسېره پردې، ځینې دندو مختلف خدماتو ته 2-3 HTTP غوښتنې درلودې، نو حتی کله چې د کارونو اصلاح کول، موږ 4 زره TCP اتصالونه رامینځته کوو، تقریبا په هر 2 ساعتونو کې - ډیر ښه نه ... زه غواړم د یو ډول لپاره سیشن جوړ کړم دنده کله چې کارګران پیل کوي. د aiohttp له لارې د غوښتنو لوی شمیر په اړه یو څه نور دلته.

په دې اړه، ما په لټه کې پیل وکړ بدیلونه او وموندله! د سیلري جوړونکي، په ځانګړې توګه، لکه څنګه چې زه پوهیږم له سلیم څخه پوښتنه وکړه، جوړ شو فوستپه اصل کې د پروژې لپاره روبینت. فاسټ د کافکا سټریمونو څخه الهام اخیستی او د کافکا سره د بروکر په توګه کار کوي ، rocksdb د اجنټانو د کار پایلې ذخیره کولو لپاره هم کارول کیږي ، او ترټولو مهمه خبره دا ده چې کتابتون غیر متزلزل دی.

همدارنګه، تاسو کولی شئ وګورئ لنډ پرتله کول د وروستي جوړونکو څخه سیلري او فاسټ: د دوی توپیرونه، د بروکرانو ترمنځ توپیرونه، د ابتدايي دندې پلي کول. هرڅه خورا ساده دي، په هرصورت، په فاسټ کې یو ښه ځانګړتیا پاملرنه راجلبوي - موضوع ته د لیږد لپاره ټایپ شوي ډاټا.

څه وکړو؟

نو، د مقالو په یوه لنډه لړۍ کې، زه به تاسو ته وښیم چې څنګه د فاسټ په کارولو سره د شالید دندو څخه ډاټا راټول کړئ. زموږ د مثال پروژې سرچینه به وي، لکه څنګه چې نوم وړاندیز کوي، alphavantage.co. زه به وښیم چې څنګه د اجنټانو لیکلو څرنګوالی (سینک ، موضوعات ، برخې) ، د منظم (کرون) اجرا کولو څرنګوالی ، خورا اسانه فاسټ کلی کمانډونه (د کلیک په اړه یو ریپر) ، ساده کلسټرینګ ، او په پای کې به موږ ډیټاډګ ضمیمه کړو ( له بکس څخه کار کول) او د لیدلو لپاره یو څه هڅه وکړئ. د راټول شوي معلوماتو ذخیره کولو لپاره موږ به د اتصال لپاره mongodb او موټور وکاروو.

PS د اعتماد له مخې قضاوت کول چې د څارنې په اړه ټکي لیکل شوي ، زه فکر کوم چې د وروستۍ مقالې په پای کې لوستونکی به لاهم یو څه ورته وګوري:

د فاسټ په اړه د شالید دندې، لومړۍ برخه: پیژندنه

د پروژې اړتیاوې

د دې حقیقت له امله چې ما دمخه ژمنه کړې ، راځئ چې د هغه څه یو کوچنی لیست جوړ کړو چې خدمت باید ترسره شي:

  1. تضمینات او د دوی یوه عمومي کتنه (په شمول د ګټې او زیانونو ، بیلانس شیټ ، د نغدو جریان - د تیر کال لپاره) - په منظم ډول
  2. تاریخي ډاټا اپلوډ کړئ (د هر سوداګریز کال لپاره، د سوداګرۍ د پای نرخ خورا ارزښتونه ومومئ) - په منظمه توګه
  3. د سوداګرۍ وروستي معلومات اپلوډ کړئ - په منظم ډول
  4. د هر امنیت لپاره د شاخصونو دودیز لیست اپلوډ کړئ - په منظمه توګه

لکه څنګه چې تمه کیده، موږ له سکریچ څخه د پروژې لپاره نوم غوره کوو: هارټون

موږ زیربنا چمتو کوو

سرلیک یقینا پیاوړی دی، په هرصورت، ټول هغه څه چې تاسو یې کولو ته اړتیا لرئ د کافکا (او زوکیپر - په یوه کانټینر کې)، کافډراپ (که موږ غواړو په موضوعاتو کې پیغامونه وګورو)، مونګوډب سره د ډاکر-کمپوز لپاره یو کوچنی ترتیب ولیکئ. موږ ترلاسه کوو [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

Тут вообще ничего сложного. Для kafka объявили два listener’а: одного (internal) для использования внутри композной сети, а второго (external) для запросов из вне, поэтому пробросили его наружу. 2181 — порт zookeeper’а. По остальному, я думаю, ясно.

د پروژې کنکال چمتو کول

په اساسي نسخه کې، زموږ د پروژې جوړښت باید داسې ښکاري:

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 سره وصل شئ. زه به په مقاله کې د فایلونو بشپړ متن چمتو نکړم، ترڅو دا وځنډول شي، مګر زه به د اړینو نسخو لینکونه چمتو کړم.

راځئ چې د پروژې په اړه د انحصار او میټا سره پیل وکړو - pyproject.toml

بیا، موږ د انحصارونو نصبول پیل کوو او د مجازیینو رامینځته کول (یا تاسو کولی شئ پخپله د وینو فولډر رامینځته کړئ او چاپیریال فعال کړئ):

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

اوس راځئ چې جوړ کړو config.yml - اسناد او چیرته ټک کول. تاسو کولی شئ سمدلاسه د الفاوانټیج لپاره معلومات هلته ځای په ځای کړئ. ښه، راځئ چې لاړ شو config.py - زموږ د تشکیل څخه د غوښتنلیک لپاره ډاټا استخراج کړئ. هو، زه اعتراف کوم، ما خپل لیب کارولی - sitri.

کله چې مونګو سره وصل شئ ، هرڅه خورا ساده دي. اعلان وکړ د پیرودونکي ټولګي نښلول او اساسی ټولګی د cruds لپاره، د راټولولو په اړه پوښتنې کول اسانه کول.

بیا به څه کیږي؟

مقاله ډیره اوږده نه ده، ځکه چې دلته زه یوازې د هڅونې او چمتو کولو په اړه خبرې کوم، نو ما ملامت مه کوئ - زه ژمنه کوم چې راتلونکې برخه به عمل او ګرافیک ولري.

نو، پدې بله برخه کې موږ:

  1. راځئ چې په aiohttp کې د الفاوانټیج لپاره یو کوچنی پیرودونکی ولیکئ د پای ټکي لپاره غوښتنې سره چې موږ ورته اړتیا لرو.
  2. راځئ یو اجنټ جوړ کړو چې د دوی لپاره د تضمیناتو او تاریخي نرخونو معلومات راټول کړي.

د پروژې کوډ

د دې برخې لپاره کوډ

سرچینه: www.habr.com

Add a comment