Taustatööd Faust, osa I: Sissejuhatus

Taustatööd Faust, osa I: Sissejuhatus

Kuidas ma sellisele elule jÔudsin?

Hiljaaegu pidin töötama vĂ€ga koormatud projekti tagaplaanil, kus tuli korraldada regulaarne suurte arvu taustatööde tĂ€itmine keeruliste arvutuste ja kolmandate osapoolte teenuste pĂ€ringutega. Projekt on asĂŒnkroonne ja enne minu tulekut oli seal lihtne krondimehhanism ĂŒlesannete kĂ€ivitamiseks: tsĂŒkkel, mis kontrollis praegust aega ja kĂ€ivitas rĂŒhmades korutiine gather kaudu — see lĂ€henemine osutus vastuvĂ”etavaks seni, kuni selliseid korutiine oli kĂŒmneid ja sadu, kuid kui nende kogus ĂŒletas kaks tuhat, tuli hakata mĂ”tlema korraliku ĂŒlesannete jĂ€rjekorra, maakleri, mitme töötaja ja muude asjade korraldamise peale.

Alguses otsustasin proovida Celeryt, mida olin varem kasutanud. Seoses projekti asĂŒnkroonsusega uputasin end kĂŒsimusse ja nĂ€gin artiklile, samuti projekt, autori loodud.

Ütleksin nii, et projekt on vĂ€ga huvitav ja töötab ĂŒsna edukalt ka meie meeskonna teistes rakendustes. Isegi autor rÀÀgib, et on suutnud selle tootmisse viia, kasutades asĂŒnkroonset pulti. Kuid kahjuks ei sobinud see mulle hĂ€sti, kuna selgus, et probleem gruppeeritud ĂŒlesannete kĂ€ivitamine (vt grupp). Artikli kirjutamise hetkel probleem oli juba lĂ”petatud, kuid töö kĂ€idi kuu aega. Igatahes, autorile edu ja kĂ”ike head, kuna tegu on juba töötavate funktsioonidega
 kokkuvĂ”ttes, asi on minusse ja see tööriist tundus mulle veel toores. Lisaks oli mĂ”nedes ĂŒlesannetes 2-3 http-pĂ€ra erinevates teenustes, seega isegi ĂŒlesannete optimeerimise korral loome 4 tuhat tcp ĂŒhendust umbes iga 2 tunni tagant — mitte just ideaalne
 Tahaksin seadistada ĂŒhe seansi ĂŒhe ĂŒlesande tĂŒĂŒbi jaoks tööde kĂ€ivitamisel. Natuke rohkem informatsiooni aiohttp kaudu tehtud suurte pĂ€ringute arvust. siin.

Sellega seoses hakkasin otsima alternatiive ja leidsin! Celery looja, nagu ma aru sain, oli Ask Solem, kes lĂ”i Faust, algselt projekti jaoks robinhood. Faust on kirjutatud Kafka Streams'i inspiratsioonist ja töötab Kafka'ga kui vahendajaga, samuti kasutatakse tulemuste salvestamiseks rocksdb-d. Peamine eelis on see, et raamatukogu on asĂŒnkroonne.

Samuti vĂ”ite vaadata lĂŒhikest vĂ”rdlust celery ja faust'i vahel, mille on loonud viimase autorid: nende erinevused, vahendajate erinevused, lihtsa ĂŒlesande teostamine. KĂ”ik on ĂŒsna lihtne, kuid fausti juures tĂ”mbab tĂ€helepanu meeldiv omadus — tĂŒĂŒbistatud andmed teema edastamiseks.

Mida me teeme?

Nii et vĂ€ikeses artiklite seerias nĂ€itan, kuidas koguda andmeid taustategevustes Faust'i abil. Meie nĂ€idisprojekti allikaks on, nagu nimigi ĂŒtleb, alphavantage.co. Demonstreerin, kuidas kirjutada agente (sink, teemad, partitsioonid), kuidas teha regulaarset (cron) tĂ€itmist, mugavaid faust'i cli-kĂ€ske (wrapper klikiga) ja lihtsat klasterdamist. LĂ”puks ĂŒhendame datadogi (mis töötab kohe) ja proovime midagi nĂ€ha. Kogutud andmete salvestamiseks kasutame mongodb-d ja motorit ĂŒhendamiseks.

P.S. NÀhtavasti on jÀllegi kirjutatud usaldusvÀÀrselt jÀlgimise punkt, arvan, et lugedes viimase artikli lÔppu, nÀeb lugeja tÔenÀoliselt vÀlja umbes nii:

Taustatööd Faust, osa I: Sissejuhatus

Projekti nÔuded

Seoses sellega, et olen juba lubanud, koostame vÀikese nimekirja sellest, mida teenus peaks suutma:

  1. Kandma vĂ€lja vÀÀrtpaberid ja ĂŒlevaade nende kohta (sealhulgas kasumid ja kahjumid, bilanss, rahavoog — viimase aasta jooksul) — regulaarselt
  2. Kandma vĂ€lja ajaloolised andmed (iga kauplemisaasta kohta leidma sulgemishinna ekstreemumid) — regulaarselt
  3. Kandma vĂ€lja viimased kauplemisandmed — regulaarselt
  4. Kandma vĂ€lja konfigureeritud indikaatorite nimekiri iga vÀÀrtpaberi jaoks — regulaarselt

Nagu ikka, valime projekti nime tÀiesti suvaliselt: horton

Valmistame infrastruktuuri ette

Pealdis on muidugi tugev, kuid kĂ”ik, mida tuleb teha, on kirjutada vĂ€ike konfiguraator docker-compose jaoks koos kafka (ja zookeeper — ĂŒhes konteineris), kafdrop (kui soovime vaadata sĂ”numeid teemas), mongodb. Saame [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) jĂ€rgmise vormi:

versioon: '3'

teenused:
  db:
    konteineri_nimi: horton-mongodb-local
    pilt: mongo:4.2-bionic
    kÀsk: mongod --port 20017
    taaskÀivitamine: alati
    pordid:
      - 20017:20017
    keskkond:
      - MONGO_INITDB_DATABASE=horton
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin_password

  kafka-service:
    konteineri_nimi: horton-kafka-local
    pilt: obsidiandynamics/kafka
    taaskÀivitamine: alati
    pordid:
      - "2181:2181"
      - "9092:9092"
    keskkond:
      KAFKA_LISTENERS: "INTERNEER //:29092, VÄLJASPOOL //:9092"
      KAFKA_ADVERTISED_LISTENERS: "INTERNEER //kafka-service:29092, VÄLJASPOOL //localhost:9092"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNEER:PLAINTEXT, VÄLJASPOOL:PLAINTEXT"
      KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNEER"
      KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
      KAFKA_RESTART_ATTEMPTS: "10"
      KAFKA_RESTART_DELAY: "5"
      ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"

  kafdrop:
    konteineri_nimi: horton-kafdrop-local
    pilt: 'obsidiandynamics/kafdrop:latest'
    taaskÀivitamine: alati
    pordid:
      - '9000:9000'
    keskkond:
      KAFKA_BROKERCONNECT: kafka-service:29092
    sÔltub:
      - kafka-service

Siin pole midagi keerulist. Kafka jaoks on mÀÀratud kaks kuulajat: ĂŒks (sisemine) kasutamiseks koosoleku vĂ”rgu sees, ja teine (vĂ€line) vĂ€ljastpoolt pĂ€ringute jaoks, seega suunati see vĂ€lja. 2181 on zookeeper'i port. ÜlejÀÀnud kohta arvan, et on selge.

Valmistame projekti karkassi

Baasmudelis peaks meie projekti struktuur vÀlja nÀgema jÀrgmiselt:

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 *

*KĂ”ik, mida ma mĂ€rkisin hetkel ei puuduta, vaid loome lihtsalt tĂŒhjad failid.**

Loome struktuuri. NĂŒĂŒd lisame vajalikud sĂ”ltuvused, kirjutame konfiguratsiooni ja ĂŒhenduse mongodb-ga. TĂ€ielikke failitekste ma artiklis ei too, et mitte venitada, vaid teen lingid vajalikele versioonidele.

Alustame sĂ”ltuvustest ja projekti metaandmetest — pyproject.toml

Edasi, kÀivitame sÔltuvuste installimise ja virtualenv loomise (vÔi vÔite ise luua kausta venv ja aktiveerida keskkonna):

pip3 install poetry (kui pole veel installitud)
poetry install

NĂŒĂŒd loome config.yml — mandaadid ja kuhu minna. Seal vĂ”ib samuti paigutada andmed alphavantage'ile. NĂŒĂŒd liigume edasi config.py — eraldame rakenduse andmed meie konfiguratsioonist. Jah, tunnistan, et kasutasin oma teeki — sitri.

MongoDB-ga ĂŒhendamiseks on kĂ”ik vĂ€ga lihtne. Meil on klassi klient ĂŒhendamiseks ja pĂ”hiklasse krudode jaoks, et oleks lihtsam teha pĂ€ringuid kogumitele.

Mis juhtub edasi?

Artikkel tuli mitte vĂ€ga suur, kuna rÀÀgin siin ainult motivatsioonist ja ettevalmistusest, seega palun vabandust – luban, et jĂ€rgmises osas tuleb tegevust ja graafikat.

Nii et jÀrgmises osas teeme jÀrgmist:

  1. Kirjutame vÀikese kliendi alphavantage'i jaoks aiohttp'ga, tehes pÀringuid vajalikele lÔpp-punktidele.
  2. Loome agendi, mis kogub andmeid vÀÀrtpaberite kohta ja ajaloolisi hindu nende kohta.

Projekti kood

Selle osa kood

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster