Nola heldu nintzen horrela bizitzera?
Duela ez asko karga handiko proiektu baten backend-ean lan egin behar izan nuen, eta bertan beharrezkoa zen atzeko planoko zeregin ugariren exekuzio erregularra antolatzea kalkulu konplexuekin eta hirugarrenen zerbitzuen eskaerarekin. Proiektua asinkronoa da eta ni etorri baino lehen, cron-abiarazte-zereginetarako mekanismo sinple bat zeukan: uneko ordua egiaztatzen zuen begizta bat eta gather-en bidez koroutina-taldeak abiarazten zituen - hurbilketa hau onargarria izan zen, hala nola, dozenaka eta ehunka koroutina egon ziren arte. , ordea, haien kopurua bi milatik gorakoa zenean, artekari batekin, hainbat langilerekin eta abarrekin zeregin-ilara normal bat antolatzea pentsatu behar izan nuen.
Lehenik eta behin, aurretik erabiltzen nuen Apioa probatzea erabaki nuen. Proiektuaren izaera asinkronoa zela eta, galderan murgildu eta ikusi nuen
Hau esango dut, proiektua oso interesgarria dela eta nahiko arrakastatsu funtzionatzen du gure taldeko beste aplikazio batzuetan, eta egileak berak dio ekoizpenera heltzeko gai izan zela pool asinkrono bat erabiliz. Baina, zoritxarrez, ez zitzaidan oso ondo etorri, ondorioztatu zenez
Alde horretatik, bilatzen hasi nintzen alternatibak eta aurkitu! Apioaren sortzaileak, zehazki, nik ulertzen dudan moduan
Gainera, begiratu dezakezu
Zer egiten dugu?
Beraz, artikulu sorta labur batean, Faust erabiliz atzeko zereginetako datuak nola bildu erakutsiko dizut. Gure adibide-proiektuaren iturria izango da, izenak dioen bezala,
PS Jarraipenari buruzko puntua idatzi den konfiantza ikusita, azken artikuluaren amaierako irakurleak honelako itxura izango duela uste dut:
Proiektuaren baldintzak
Dagoeneko hitzeman dudanez, egin dezagun zerrenda txiki bat zer egin behar duen zerbitzuak:
- Kargatu baloreak eta horien ikuspegi orokorra (irabaziak eta galerak, balantzea, diru-fluxua - azken urtekoa barne) - aldizka
- Kargatu datu historikoak (merkataritza-urte bakoitzeko, aurkitu merkataritzaren itxiera-prezioaren muturreko balioak) - aldizka
- Kargatu azken merkataritza-datuak - aldizka
- Kargatu segurtasun bakoitzerako adierazleen zerrenda pertsonalizatua, aldizka
Espero bezala, proiektuaren izen bat aukeratzen dugu hutsetik: Horton
Azpiegiturak prestatzen ari gara
Izenburua, zalantzarik gabe, sendoa da, hala ere, egin behar duzun guztia docker-compose-rako konfigurazio txiki bat idaztea da kafka (eta zookeeper - edukiontzi batean), kafdrop (gaietan mezuak aztertu nahi baditugu), mongodb. Lortzen dugu [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
Hemen ez dago ezer konplikaturik. Bi entzule deklaratu ziren kafkarako: bata (barnekoa) sare konposatuaren barruan erabiltzeko, eta bigarrena (kanpokoa) kanpotik egindako eskaeretarako, beraz, kanpora helarazi zuten. 2181 - zoozainen portua. Gainerakoa, nire ustez, argi dago.
Proiektuaren hezurdura prestatzen
Oinarrizko bertsioan, gure proiektuaren egiturak honelakoa izan beharko luke:
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 *
*Apuntatu nuen guztia Oraindik ez dugu ukitzen, fitxategi hutsak sortzen ditugu.**
Egitura bat sortu dugu. Orain gehitu ditzagun beharrezko mendekotasunak, idatzi konfigurazioa eta konektatu mongodb-era. Ez dut artikuluko artxiboen testu osoa emango, ez atzeratzeko, baina beharrezko bertsioetarako estekak emango ditut.
Has gaitezen proiektuaren menpekotasunekin eta metarekin -
Ondoren, mendekotasunak instalatzen eta virtualenv bat sortzen hasiko gara (edo zuk zeuk sortu dezakezu venv karpeta eta ingurunea aktibatu):
pip3 install poetry (если ещё не установлено)
poetry install
Orain sortu dezagun
Mongo-ra konektatzean, dena nahiko erraza da. iragarri
Zer gertatuko da gero?
Artikulua ez da oso luzea, hemen motibazioari eta prestaketari buruz bakarrik hitz egiten ari naizelako, beraz, ez nazazu errua bota - hurrengo zatiak ekintza eta grafikoak izango dituela agintzen dut.
Beraz, hurrengo zati honetan hauxe dugu:
- Idatzi dezagun bezero txiki bat aiohttp-n alphaavantagerako, behar ditugun amaierako puntuen eskaerarekin.
- Sor dezagun agente bat, baloreei eta prezio historikoei buruzko datuak bilduko dituena.
Iturria: www.habr.com