KÄ es nonÄcu lÄ«dz Å”Ädai dzÄ«vei?
Pirms neilga laika man bija jÄstrÄdÄ pie ļoti noslogota projekta aizmugures, kurÄ bija jÄorganizÄ regulÄra liela skaita fona uzdevumu izpilde ar sarežģītiem aprÄÄ·iniem un treÅ”o puÅ”u pakalpojumu pieprasÄ«jumiem. Projekts ir asinhrons, un pirms es atnÄcu, tam bija vienkÄrÅ”s mehÄnisms cron palaiÅ”anas uzdevumiem: cilpa, kas pÄrbauda paÅ”reizÄjo laiku un palaist korutÄ«nu grupas, izmantojot apkopoÅ”anu - Ŕī pieeja izrÄdÄ«jÄs pieÅemama, kamÄr nebija desmitiem un simtiem Å”Ädu korutÄ«nu. , tomÄr, kad to skaits pÄrsniedza divus tÅ«kstoÅ”us, nÄcÄs domÄt par parastu uzdevumu rindas organizÄÅ”anu ar brokeri, vairÄkiem strÄdniekiem utt.
Vispirms nolÄmu izmÄÄ£inÄt Selerijas, ko izmantoju iepriekÅ”. Projekta asinhronÄ rakstura dÄļ es iedziļinÄjos jautÄjumÄ un redzÄju
TeikÅ”u tÄ, projekts ir ļoti interesants un diezgan veiksmÄ«gi darbojas arÄ« citÄs mÅ«su komandas lietojumprogrammÄs, un pats autors stÄsta, ka viÅÅ” to spÄjis izrullÄt ražoÅ”anÄ, izmantojot asinhrono pÅ«lu. Bet diemžÄl tas man Ä«sti nederÄja, kÄ izrÄdÄ«jÄs
Å ajÄ sakarÄ es sÄku meklÄt alternatÄ«vas un atrada! Seleriju radÄ«tÄji, konkrÄti, kÄ es saprotu
TurklÄt jÅ«s varat skatÄ«ties
Ko mÄs darÄm?
TÄpÄc Ä«sÄ rakstu sÄrijÄ es jums parÄdÄ«Å”u, kÄ iegÅ«t datus no fona uzdevumiem, izmantojot Faust. MÅ«su paraugprojekta avots bÅ«s, kÄ norÄda nosaukums,
PS Spriežot pÄc pÄrliecÄ«bas, ar kÄdu tika uzrakstÄ«ts punkts par monitoringu, domÄju, ka lasÄ«tÄjs pÄdÄjÄ raksta beigÄs tomÄr izskatÄ«sies apmÄram Å”Ädi:
Projekta prasības
SakarÄ ar to, ka esmu jau apsolÄ«jis, izveidosim nelielu sarakstu ar to, kas pakalpojumam bÅ«tu jÄspÄj:
- AugÅ”upielÄdÄjiet vÄrtspapÄ«rus un pÄrskatu par tiem (ieskaitot peļÅu un zaudÄjumus, bilanci, naudas plÅ«smu - par pÄdÄjo gadu) - regulÄri
- AugÅ”upielÄdÄjiet vÄsturiskos datus (katram tirdzniecÄ«bas gadam atrodiet tirdzniecÄ«bas slÄgÅ”anas cenas galÄjÄs vÄrtÄ«bas) - regulÄri
- AugÅ”upielÄdÄjiet jaunÄkos tirdzniecÄ«bas datus - regulÄri
- RegulÄri augÅ”upielÄdÄjiet pielÄgotu indikatoru sarakstu katrai droŔībai
KÄ paredzÄts, mÄs izvÄlamies projekta nosaukumu no jauna: Horton
MÄs gatavojam infrastruktÅ«ru
Virsraksts noteikti ir spÄcÄ«gs, tomÄr atliek tikai uzrakstÄ«t nelielu konfigurÄciju docker-compose ar kafka (un zookeeper - vienÄ konteinerÄ), kafdrop (ja gribam skatÄ«t ziÅas tÄmÄs), mongodb. MÄs saÅemam [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
Å eit vispÄr nav nekÄ sarežģīta. Kafka tika deklarÄti divi klausÄ«tÄji: viens (iekÅ”Äjais) lietoÅ”anai saliktajÄ tÄ«klÄ un otrs (ÄrÄjais) pieprasÄ«jumiem no Ärpuses, tÄpÄc viÅi to pÄrsÅ«tÄ«ja uz Äru. 2181 ā zoodÄrza osta. PÄrÄjais, manuprÄt, ir skaidrs.
Projekta skeleta sagatavoŔana
Pamata versijÄ mÅ«su projekta struktÅ«rai vajadzÄtu izskatÄ«ties Å”Ädi:
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 *
*Viss, ko atzÄ«mÄju MÄs tam vÄl nepieskaramies, mÄs tikai izveidojam tukÅ”us failus.**
MÄs izveidojÄm struktÅ«ru. Tagad pievienosim nepiecieÅ”amÄs atkarÄ«bas, uzrakstÄ«sim konfigurÄciju un izveidosim savienojumu ar mongodb. RakstÄ nesniegÅ”u pilnu failu tekstu, lai tas neaizkavÄtos, bet sniegÅ”u saites uz nepiecieÅ”amajÄm versijÄm.
SÄksim ar atkarÄ«bÄm un meta par projektu -
TÄlÄk mÄs sÄkam instalÄt atkarÄ«bas un izveidot virtualenv (vai arÄ« varat pats izveidot venv mapi un aktivizÄt vidi):
pip3 install poetry (ŠµŃŠ»Šø ŠµŃŃ Š½Šµ ŃŃŃŠ°Š½Š¾Š²Š»ŠµŠ½Š¾)
poetry install
Tagad veidosim
PieslÄdzoties Mongo, viss ir pavisam vienkÄrÅ”i. paziÅoja
Kas notiks tÄlÄk?
Raksts nav Ä«paÅ”i garÅ”, jo Å”eit es runÄju tikai par motivÄciju un sagatavoÅ”anos, tÄpÄc nepÄrmetiet mani - apsolu, ka nÄkamajÄ daÄ¼Ä bÅ«s darbÄ«ba un grafika.
TÄtad, Å”ajÄ paÅ”Ä nÄkamajÄ daÄ¼Ä mÄs:
- Uzrakstīsim nelielu klientu alfavantage vietnei aiohttp ar pieprasījumiem par mums nepiecieŔamajiem galapunktiem.
- Izveidosim aÄ£entu, kas apkopos datus par vÄrtspapÄ«riem un to vÄsturiskajÄm cenÄm.
Avots: www.habr.com