Miten päädyin elämään tuollaista?
Jouduin vähän aikaa sitten työskentelemään erittäin kuormitetun projektin taustalla, jossa oli tarpeen järjestää useiden taustatehtävien säännöllinen suorittaminen monimutkaisilla laskelmilla ja kolmannen osapuolen palvelupyynnöillä. Projekti on asynkroninen ja ennen tuloani siinä oli yksinkertainen mekanismi cron-käynnistystehtäviin: silmukka, joka tarkastaa kellonajan ja käynnistää korutiiniryhmiä kerän kautta - tämä lähestymistapa osoittautui hyväksyttäväksi, kunnes tällaisia korutiineja oli kymmeniä ja satoja , kun niiden määrä kuitenkin ylitti kaksituhatta, jouduin miettimään normaalin tehtäväjonon järjestämistä välittäjän, useiden työntekijöiden ja niin edelleen.
Ensin päätin kokeilla Seleria, jota olin käyttänyt aiemmin. Projektin asynkronisen luonteen vuoksi sukelsin kysymykseen ja näin
Sanon tämän, että projekti on erittäin mielenkiintoinen ja toimii melko menestyksekkäästi muissa tiimimme sovelluksissa, ja kirjoittaja itse kertoo pystyneensä viemään sen tuotantoon asynkronisen poolin avulla. Mutta valitettavasti se ei todellakaan sopinut minulle, kuten kävi ilmi
Tältä osin aloin etsimään vaihtoehtoja ja löytyi! Nimenomaan sellerin luojat, kuten minä sen ymmärrän
Voit myös katsoa
Mitä me teemme?
Joten lyhyessä artikkelisarjassa näytän sinulle, kuinka voit kerätä tietoja taustatehtävistä Faustin avulla. Esimerkkiprojektimme lähde on, kuten nimestä voi päätellä,
PS Tarkasteltaessa sitä luottamusta, jolla tarkkailua koskeva kohta kirjoitettiin, uskon, että lukija viimeisen artikkelin lopussa näyttää edelleen suunnilleen tältä:
Hankkeen vaatimukset
Koska olen jo luvannut, tehdään pieni lista siitä, mitä palvelun pitäisi pystyä:
- Lataa arvopapereita ja yleiskatsaus niistä (mukaan lukien voitot ja tappiot, tase, kassavirta - viimeiseltä vuodelta) - säännöllisesti
- Lataa historialliset tiedot (jokaiselle kaupankäyntivuodelle, etsi kaupankäynnin päätöshinnan ääriarvot) - säännöllisesti
- Lataa uusimmat kaupankäyntitiedot - säännöllisesti
- Lataa mukautettu luettelo kunkin tietoturvan indikaattoreista - säännöllisesti
Kuten odotettiin, valitsemme projektille nimen tyhjästä: Horton
Valmistelemme infrastruktuuria
Otsikko on varmasti vahva, mutta sinun tarvitsee vain kirjoittaa pieni konfiguraatio docker-composelle kafka (ja zookeeper - yhdessä säiliössä), kafdrop (jos haluamme katsoa viestejä aiheissa), mongodb. Saamme [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
Tässä ei ole ollenkaan mitään monimutkaista. Kafkalle ilmoitettiin kaksi kuuntelijaa: yksi (sisäinen) käytettäväksi yhdistelmäverkon sisällä ja toinen (ulkoinen) ulkopuolelta tulevia pyyntöjä varten, joten he välittivät sen eteenpäin. 2181 - eläintarhanhoitajan satama. Loput on mielestäni selvää.
Projektin rungon valmistelu
Perusversiossa projektimme rakenteen pitäisi näyttää tältä:
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 *
*Kaikki mitä huomautin Emme koske siihen vielä, luomme vain tyhjiä tiedostoja.**
Loimme rakenteen. Lisätään nyt tarvittavat riippuvuudet, kirjoitetaan konfiguraatio ja yhdistetään mongodb. En anna artikkelissa olevien tiedostojen koko tekstiä, jotta se ei viivästyisi, mutta annan linkit tarvittaviin versioihin.
Aloitetaan riippuvuuksista ja metasta projektista -
Seuraavaksi aloitamme riippuvuuksien asentamisen ja virtualenv:n luomisen (tai voit luoda venv-kansion itse ja aktivoida ympäristön):
pip3 install poetry (если ещё не установлено)
poetry install
Nyt luodaan
Kun muodostat yhteyden Mongoon, kaikki on melko yksinkertaista. ilmoitti
Mitä seuraavaksi tapahtuu?
Artikkeli ei ole kovin pitkä, koska tässä puhun vain motivaatiosta ja valmistautumisesta, joten älä syytä minua - lupaan, että seuraavassa osassa on toimintaa ja grafiikkaa.
Joten, tässä aivan seuraavassa osassa:
- Kirjoitetaan pieni asiakas alfavantagelle aiohttp:lle, jossa pyydetään tarvitsemiamme päätepisteitä.
- Luodaan agentti, joka kerää tietoja arvopapereista ja niiden historiallisista hinnoista.
Lähde: will.com