Kako sem tako živel?
Nedolgo nazaj sem moral delati na zaledju zelo obremenjenega projekta, v katerem je bilo treba organizirati redno izvajanje velikega števila opravil v ozadju z zapletenimi izračuni in zahtevami po storitvah tretjih oseb. Projekt je asinhron in preden sem prišel, je imel preprost mehanizem za opravila zagona crona: zanka, ki preverja trenutni čas in zaganja skupine korutin prek gathera - ta pristop se je izkazal za sprejemljivega, dokler ni bilo na desetine in stotine takšnih korutin , ko pa je njihovo število preseglo dva tisoč, sem moral razmišljati o organizaciji običajne čakalne vrste opravil s posrednikom, več delavci itd.
Najprej sem se odločil preizkusiti zeleno, ki sem jo že uporabljal. Zaradi asinhrone narave projekta sem se poglobil v vprašanje in videl
Rekel bom, da je projekt zelo zanimiv in precej uspešno deluje v drugih aplikacijah naše ekipe, avtor sam pa pravi, da mu ga je uspelo prenesti v produkcijo z uporabo asinhronega bazena. A na žalost mi ni prav ustrezalo, kot se je izkazalo
V zvezi s tem sem začel iskati alternative in našel! Ustvarjalci zelene, posebej, kot razumem
Prav tako lahko pogledate
Kaj počnemo?
Torej, v kratkem nizu člankov vam bom pokazal, kako zbirati podatke iz opravil v ozadju s Faustom. Vir za naš primer projekta bo, kot že ime pove,
PS Sodeč po samozavesti, s katero je bila napisana točka o monitoringu, mislim, da bo bralec na koncu zadnjega članka vseeno videti nekako takole:
Projektne zahteve
Glede na dejstvo, da sem že obljubil, naredimo majhen seznam tega, kar bi morala storiti:
- Nalaganje vrednostnih papirjev in pregled le-teh (vključno z dobički in izgubami, bilanca stanja, denarni tok - za zadnje leto) - redno
- Naložite zgodovinske podatke (za vsako trgovalno leto poiščite ekstremne vrednosti zaključne cene trgovanja) - redno
- Nalagajte najnovejše podatke o trgovanju – redno
- Redno nalagajte prilagojen seznam indikatorjev za vsak vrednostni papir
Po pričakovanjih izberemo ime za projekt iz nič: horton
Pripravljamo infrastrukturo
Naslov je vsekakor močan, a vse kar morate storiti je, da napišete majhno konfiguracijo za docker-compose s kafko (in zookeeper - v enem vsebniku), kafdrop (če želimo gledati sporočila v temah), mongodb. Dobimo [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
Tukaj sploh ni nič zapletenega. Za kafko sta bila prijavljena dva poslušalca: eden (notranji) za uporabo znotraj kompozitnega omrežja in drugi (zunanji) za zahteve od zunaj, zato so ga posredovali ven. 2181 — pristanišče za oskrbnika živalskega vrta. Ostalo je, mislim, jasno.
Priprava okostja projekta
V osnovni različici naj bi struktura našega projekta izgledala takole:
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 *
*Vse, kar sem opazil Tega se še ne dotikamo, samo ustvarjamo prazne datoteke.**
Ustvarili smo strukturo. Zdaj pa dodamo potrebne odvisnosti, napišemo konfiguracijo in se povežemo z mongodb. V članku ne bom navedel celotnega besedila datotek, da ne bi zavlačeval, vendar bom navedel povezave do potrebnih različic.
Začnimo z odvisnostmi in meta o projektu -
Nato začnemo nameščati odvisnosti in ustvarjati virtualenv (lahko pa sami ustvarite mapo venv in aktivirate okolje):
pip3 install poetry (если ещё не установлено)
poetry install
Zdaj pa ustvarjajmo
Pri povezovanju z Mongo je vse precej preprosto. napovedal
Kaj bo potem?
Članek ni zelo dolg, saj tukaj govorim samo o motivaciji in pripravi, zato mi ne zamerite - obljubim, da bo naslednji del vseboval akcijo in grafiko.
Torej, v tem naslednjem delu bomo:
- Napišimo majhen odjemalec za alphavantage na aiohttp z zahtevami za končne točke, ki jih potrebujemo.
- Ustvarimo agenta, ki bo zbiral podatke o vrednostnih papirjih in zgodovinskih tečajih zanje.
Vir: www.habr.com