
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 , samuti , 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 gruppeeritud ĂŒlesannete kĂ€ivitamine (vt ). Artikli kirjutamise hetkel 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. .
Sellega seoses hakkasin otsima alternatiive ja leidsin! Celery looja, nagu ma aru sain, oli , kes lĂ”i , algselt projekti jaoks . 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 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, . 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:

Projekti nÔuded
Seoses sellega, et olen juba lubanud, koostame vÀikese nimekirja sellest, mida teenus peaks suutma:
- Kandma vĂ€lja vÀÀrtpaberid ja ĂŒlevaade nende kohta (sealhulgas kasumid ja kahjumid, bilanss, rahavoog â viimase aasta jooksul) â regulaarselt
- Kandma vĂ€lja ajaloolised andmed (iga kauplemisaasta kohta leidma sulgemishinna ekstreemumid) â regulaarselt
- Kandma vĂ€lja viimased kauplemisandmed â regulaarselt
- 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]() 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-serviceSiin 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 â
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 installNĂŒĂŒd loome â mandaadid ja kuhu minna. Seal vĂ”ib samuti paigutada andmed alphavantage'ile. NĂŒĂŒd liigume edasi â eraldame rakenduse andmed meie konfiguratsioonist. Jah, tunnistan, et kasutasin oma teeki â .
MongoDB-ga ĂŒhendamiseks on kĂ”ik vĂ€ga lihtne. Meil on ĂŒhendamiseks ja 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:
- Kirjutame vÀikese kliendi alphavantage'i jaoks aiohttp'ga, tehes pÀringuid vajalikele lÔpp-punktidele.
- Loome agendi, mis kogub andmeid vÀÀrtpaberite kohta ja ajaloolisi hindu nende kohta.
Allikas: habr.com
