Вазифаҳои заминавӣ дар бораи Фауст, Қисми I: Муқаддима

Вазифаҳои заминавӣ дар бораи Фауст, Қисми I: Муқаддима

Чӣ тавр ман ҳамин тавр зиндагӣ кардам?

Чанде пеш ба ман лозим омад, ки дар пушти як лоиҳаи пурбор кор кунам, ки дар он бояд иҷрои мунтазами шумораи зиёди вазифаҳои заминавиро бо ҳисобҳои мураккаб ва дархостҳо барои хидматрасонии тарафи сеюм ташкил кунам. Лоиҳа асинхронӣ аст ва пеш аз омадани ман, он як механизми оддии иҷрои вазифаҳоро дошт: ҳалқаи санҷиши вақти ҷорӣ ва оғози гурӯҳҳои корутинҳо тавассути ҷамъ - ин равиш қобили қабул буд, то даме ки даҳҳо ва садҳо чунин корутинҳо вуҷуд надоштанд. , вале вакте ки шумораи онхо аз ду хазор гузашт, ба ман лозим омад, ки бо брокер, якчанд коргар ва гайра дар бораи ташкили навбати оддии супориш фикр кунам.

Аввалан ман қарор додам, ки Карафсро, ки қаблан истифода карда будам, санҷам. Аз сабаби табиати асинхронии лоиҳа, ман ба савол ғарқ шудам ва дидам мақола, инчунин лоиҳа, аз тарафи муаллифи макола офарида шудааст.

Ман инро мегӯям, лоиҳа хеле ҷолиб аст ва дар дигар замимаҳои дастаи мо хеле бомуваффақият кор мекунад ва худи муаллиф мегӯяд, ки ӯ тавонист онро бо истифода аз ҳавзи асинхронӣ дар истеҳсолот паҳн кунад. Аммо, мутаассифона, он ба ман аслан мувофиқ набуд, чунон ки маълум шуд мушкилот бо оғози гурӯҳӣ вазифаҳо (ниг. гурӯҳ). Дар замони навиштан чоп аллакай баста шудааст, аммо як моҳ боз кор идома дорад. Дар ҳар сурат, барори кор ба муаллиф ва ҳама беҳтаринҳо, зеро дар либер аллакай чизҳои корӣ мавҷуданд ... умуман, нукта дар ман аст ва асбоб барои ман нам шуд. Илова бар ин, баъзе супоришҳо ба хидматҳои гуногун 2-3 http дархост доштанд, аз ин рӯ ҳатто ҳангоми оптимизатсияи вазифаҳо мо 4 ҳазор пайвасти TCP эҷод мекунем, тақрибан дар ҳар 2 соат - он қадар хуб нест... Ман мехоҳам сеансро барои як намуди вазифа ҳангоми оғози кор. Каме бештар дар бораи шумораи зиёди дархостҳо тавассути aiohttp дар ин ҷо.

Дар ин бобат ман чустучу кардам алтернативаҳо ва онро ёфт! Офарандагони карафс, махсусан, чунон ки ман мефаҳмам Аз Солем пурсед, офарида шудааст Фауст, ибтидо барои лоиҳа RobinHood. Фауст аз Ҷараёни Кафка илҳом гирифта, бо Кафка ҳамчун брокер кор мекунад, rocksdb инчунин барои нигоҳ доштани натиҷаҳо аз кори агентҳо истифода мешавад ва муҳимтар аз ҳама он аст, ки китобхона асинхронӣ аст.

Инчунин, шумо метавонед назар кунед муқоисаи зуд карафс ва фауст аз офарандагони охирин: фарқиятҳои онҳо, фарқияти байни брокерҳо, иҷрои вазифаи ибтидоӣ. Ҳама чиз хеле оддӣ аст, аммо як хусусияти зебо дар фауст таваҷҷӯҳро ҷалб мекунад - маълумоти чопшуда барои интиқол ба мавзӯъ.

Мо чӣ кор мекунем?

Ҳамин тавр, дар як қатор мақолаҳои кӯтоҳ, ман ба шумо нишон медиҳам, ки чӣ гуна маълумотро аз вазифаҳои замина бо истифода аз Фауст ҷамъ кунед. Сарчашмаи лоиҳаи намунавии мо, тавре аз номаш бармеояд, хоҳад буд alphavantage.co. Ман нишон медиҳам, ки чӣ гуна агентҳоро нависед (ранк, мавзӯъҳо, қисмҳо), чӣ гуна иҷро кардани мунтазам (cron), фармонҳои қулайи cli faust (печанд болои клик), кластерсозии оддӣ ва дар охир мо datadog замима мекунем ( берун аз қуттӣ кор кунед) ва кӯшиш кунед, ки чизеро бубинед. Барои нигоҳ доштани маълумоти ҷамъшуда, мо барои пайвастшавӣ mongodb ва моторро истифода мебарем.

PS Аз рӯи эътимоде, ки нукта дар бораи мониторинг навишта шудааст, ман фикр мекунам, ки хонанда дар охири мақолаи охирин то ҳол чунин хоҳад буд:

Вазифаҳои заминавӣ дар бораи Фауст, Қисми I: Муқаддима

Талаботи лоиҳа

Аз сабаби он, ки ман аллакай ваъда додаам, биёед як рӯйхати хурдеро тартиб диҳем, ки хидмат бояд чӣ кор карда метавонад:

  1. Боркунии коғазҳои қиматнок ва шарҳи онҳо (аз ҷумла фоида ва зиён, тавозун, гардиши пули нақд - барои соли охир) - мунтазам
  2. Маълумоти таърихиро бор кунед (барои ҳар як соли тиҷорат, арзишҳои шадиди нархи пӯшидаи савдоро пайдо кунед) - мунтазам
  3. Маълумоти охирини савдоро бор кунед - мунтазам
  4. Рӯйхати фармоишии нишондиҳандаҳоро барои ҳар як амният бор кунед - мунтазам

Тавре ки интизор мерафт, мо номеро барои лоиҳа интихоб мекунем: хортон

Мо инфрасохторро омода карда истодаем

Сарлавҳа бешубҳа қавӣ аст, аммо танҳо ба шумо лозим аст, ки конфигуратсияи хурд барои docker-compose бо кафка (ва зоопарк - дар як контейнер), kafdrop (агар мо хоҳем, ки паёмҳоро дар мавзӯъҳо бубинем), 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 *

*Ҳама чизеро, ки ман қайд кардам Мо ҳоло ба он даст нарасонем, мо танҳо файлҳои холӣ эҷод мекунем.**

Мо сохторе таъсис додем. Акнун биёед вобастагиҳои заруриро илова кунем, конфигуратсияро нависед ва ба mongodb пайваст шавед. Ман матни пурраи файлҳоро дар мақола намедиҳам, то ки онро таъхир накунам, аммо ман истинодҳоро ба версияҳои зарурӣ пешкаш мекунам.

Биёед аз вобастагӣ ва мета дар бораи лоиҳа оғоз кунем - pyproject.toml

Баъдан, мо ба насб кардани вобастагӣ ва эҷоди virtualenv шурӯъ мекунем (ё шумо метавонед папкаи venv-ро худатон созед ва муҳити атрофро фаъол созед):

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

Акнун биёед эҷод кунем config.yml - Эътиборнома ва дар куҷо бояд бикӯбед. Шумо метавонед фавран маълумотро барои алфавант дар он ҷо ҷойгир кунед. Хуб, биёед ба config.py — аз конфигуратсияи мо маълумотро барои барнома истихроҷ кунед. Бале, ман иқрор мешавам, ман либи худро истифода кардам - сомри.

Ҳангоми пайваст шудан ба Mongo, ҳама чиз хеле оддӣ аст. эълон кард синфи муштарӣ пайваст кардан ва синфи базавӣ барои cruds, осонтар кардани дархостҳо дар коллексияҳо.

Баъд чӣ мешавад?

Мақола чандон тӯлонӣ нест, зеро дар ин ҷо ман танҳо дар бораи ҳавасмандкунӣ ва омодагӣ гап мезанам, аз ин рӯ маро айбдор накунед - ман ваъда медиҳам, ки қисми оянда амал ва графикӣ хоҳад дошт.

Ҳамин тавр, дар ин қисми оянда мо:

  1. Биёед як муштарии хурдеро барои alphavantage дар aiohttp бо дархостҳо барои нуқтаҳои ниҳоӣ ба мо нависед.
  2. Биёед агентеро эҷод кунем, ки маълумотро дар бораи коғазҳои қиматнок ва нархҳои таърихии онҳо ҷамъоварӣ кунад.

Рамзи лоиҳа

Рамзи ин қисм

Манбаъ: will.com

Илова Эзоҳ