Sfond Kompiti dwar Faust, Parti I: Introduzzjoni

Sfond Kompiti dwar Faust, Parti I: Introduzzjoni

Kif sirt ngħix hekk?

Ftit ilu kelli naħdem fuq il-backend ta 'proġett mgħobbi ħafna, li fih kien meħtieġ li torganizza l-eżekuzzjoni regolari ta' numru kbir ta 'kompiti fl-isfond b'kalkoli kumplessi u talbiet għal servizzi ta' partijiet terzi. Il-proġett huwa asinkroniku u qabel ma ġejt, kellu mekkaniżmu sempliċi għal ħidmiet ta' tnedija ta' cron: loop li jiċċekkja l-ħin attwali u tniedi gruppi ta' coroutines permezz ta' gather - dan l-approċċ irriżulta li kien aċċettabbli sakemm kien hemm għexieren u mijiet ta' tali coroutines. , madankollu, meta n-numru tagħhom qabeż l-elfejn, kelli naħseb biex norganizza kju ta 'kompiti normali ma' sensar, diversi ħaddiema, eċċ.

L-ewwel iddeċidejt li nipprova Karfus, li kont użajt qabel. Minħabba n-natura asinkronika tal-proġett, għaddejt fil-mistoqsija u rajt oġġett, kif ukoll proġett, maħluqa mill-awtur tal-artiklu.

Se ngħid dan, il-proġett huwa interessanti ħafna u jaħdem pjuttost b'suċċess f'applikazzjonijiet oħra tat-tim tagħna, u l-awtur innifsu jgħid li kien kapaċi jdaħħalha fil-produzzjoni billi juża pool asinkroniku. Iżda, sfortunatament, ma tantx jaqbel lili, kif irriżulta problema bit-tnedija tal-kompiti tal-grupp (ara. grupp). Fil-ħin tal-kitba kwistjoni diġà magħluq, iżda, ix-xogħol ilu għaddej xahar. Fi kwalunkwe każ, xorti tajba lill-awtur u l-aħjar, peress li diġà hemm affarijiet tax-xogħol fuq il-lib... b'mod ġenerali, il-punt huwa fija u l-għodda rriżultat li kienet niedja għalija. Barra minn hekk, xi kompiti kellhom 2-3 talbiet http għal servizzi differenti, għalhekk anke meta ottimizzaw il-kompiti, noħolqu 4 elf konnessjoni TCP, bejn wieħed u ieħor kull sagħtejn - mhux tajjeb ħafna... Nixtieq noħloq sessjoni għal tip wieħed ta' kompitu meta jibdew il-ħaddiema. Ftit aktar dwar in-numru kbir ta 'talbiet permezz ta' aiohttp hawn.

F'dan ir-rigward, bdejt infittex alternattivi u sabha! Il-ħallieqa tal-karfus, speċifikament, kif nifhem jien Staqsi lil Solem, inħoloq Faust, oriġinarjament għall-proġett robinhood. Faust huwa ispirat minn Kafka Streams u jaħdem ma 'Kafka bħala sensar, rocksdb jintuża wkoll biex jaħżen ir-riżultati mix-xogħol tal-aġenti, u l-iktar ħaġa importanti hija li l-librerija hija asinkronika.

Ukoll, tista 'tfittex paragun malajr karfus u faust mill-ħallieqa ta 'l-aħħar: id-differenzi tagħhom, id-differenzi bejn is-sensara, l-implimentazzjoni ta' kompitu elementari. Kollox huwa pjuttost sempliċi, madankollu, karatteristika sabiħa f'faust tiġbed l-attenzjoni - data ittajpjata għat-trażmissjoni għas-suġġett.

X'nagħmlu?

Allura, f'serje qasira ta 'artikoli, ser nuruk kif tiġbor data minn kompiti fl-isfond bl-użu ta' Faust. Is-sors għall-proġett eżempju tagħna se jkun, kif jissuġġerixxi l-isem, alphaavantage.co. Ser nuri kif tikteb aġenti (sink, suġġetti, diviżorji), kif tagħmel eżekuzzjoni regolari (cron), l-aktar kmandi ta' faust cli konvenjenti (wrapper over click), raggruppament sempliċi, u fl-aħħar se nehmeż datadog ( taħdem barra mill-kaxxa) u tipprova xi ħaġa biex tara. Biex naħżnu d-dejta miġbura se nużaw mongodb u motor għall-konnessjoni.

PS Meta wieħed jiġġudika mill-kunfidenza li biha nkiteb il-punt dwar il-monitoraġġ, naħseb li l-qarrej fl-aħħar tal-aħħar artiklu xorta se jidher xi ħaġa bħal din:

Sfond Kompiti dwar Faust, Parti I: Introduzzjoni

Rekwiżiti tal-proġett

Minħabba l-fatt li diġà wiegħed, ejja nagħmlu lista żgħira ta 'dak li s-servizz għandu jkun kapaċi jagħmel:

  1. Ittella' titoli u ħarsa ġenerali tagħhom (inklużi profitti u telf, karta tal-bilanċ, likwidità - għall-aħħar sena) - regolarment
  2. Ittella 'dejta storika (għal kull sena ta' kummerċ, sib valuri estremi tal-prezz tal-għeluq tal-kummerċ) - regolarment
  3. Ittella' l-aħħar data tal-kummerċ - regolarment
  4. Ittella' lista personalizzata ta' indikaturi għal kull sigurtà - regolarment

Kif mistenni, aħna nagħżlu isem għall-proġett mill-bidu nett: Horton

Qed nippreparaw l-infrastruttura

It-titlu huwa ċertament b'saħħtu, madankollu, kull ma trid tagħmel hu li tikteb konfigurazzjoni żgħira għal docker-compose b'kafka (u zookeeper - f'kontenitur wieħed), kafdrop (jekk irridu nħarsu lejn messaġġi f'suġġetti), mongodb. Ikollna [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) tal-forma li ġejja:

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

M'hemm xejn ikkumplikat hawn. Żewġ semmiegħa ġew iddikjarati għall-kafka: wieħed (intern) għall-użu ġewwa n-netwerk kompost, u t-tieni (estern) għal talbiet minn barra, u għalhekk bagħtuh barra. 2181 — port taż-zookeeper. Il-bqija, naħseb, huwa ċar.

Tħejjija tal-iskeletru tal-proġett

Fil-verżjoni bażika, l-istruttura tal-proġett tagħna għandha tidher bħal din:

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 *

*Dak kollu li nnutajt Għadna ma nmissux, aħna biss noħolqu fajls vojta.**

Ħloqna struttura. Issa ejja nżidu d-dipendenzi meħtieġa, ikteb il-konfigurazzjoni u qabbad ma 'mongodb. Jien mhux se nipprovdi t-test sħiħ tal-fajls fl-artiklu, sabiex ma ndewwimx, iżda se nipprovdi links għall-verżjonijiet meħtieġa.

Nibdew bid-dipendenzi u l-meta dwar il-proġett - pyproject.toml

Sussegwentement, nibdew ninstallaw id-dipendenzi u noħolqu virtualenv (jew tista' toħloq il-folder tal-venv lilek innifsek u tattiva l-ambjent):

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

Issa ejja noħolqu config.yml - Kredenzjali u fejn iħabbtu. Tista' immedjatament tpoġġi d-data għall-alphaavantage hemmhekk. Ukoll, ejja nimxu fuq config.py — estratt id-dejta għall-applikazzjoni mill-konfigurazzjoni tagħna. Iva, nistqarr, użajt il-lib tiegħi - sitri.

Meta tikkonnettja ma 'Mongo, kollox huwa pjuttost sempliċi. imħabbra klassi tal-klijent biex jgħaqqdu u klassi bażi għall-cruds, biex tagħmilha aktar faċli li jsiru mistoqsijiet dwar kollezzjonijiet.

X'se jiġri wara?

L-artiklu mhuwiex twil ħafna, peress li hawn qed nitkellem biss dwar il-motivazzjoni u l-preparazzjoni, għalhekk ma twaħħalnix - inwiegħed li l-parti li jmiss se jkollha azzjoni u grafika.

Allura, f'din il-parti li jmiss aħna:

  1. Ejja niktbu klijent żgħir għal alphaavantage fuq aiohttp b'talbiet għall-endpoints li għandna bżonn.
  2. Ejja noħolqu aġent li jiġbor data dwar it-titoli u l-prezzijiet storiċi għalihom.

Kodiċi tal-proġett

Kodiċi għal din il-parti

Sors: www.habr.com

Żid kumment