Ciamar a thàinig mi a dh'fhuireach mar seo?
Chan eil fada air ais bha agam ri bhith ag obair air cùl pròiseact làn luchdaichte, anns an robh feum air coileanadh cunbhalach àireamh mhòr de ghnìomhan cùl-fhiosrachaidh a chuir air dòigh le àireamhachadh iom-fhillte agus iarrtasan airson seirbheisean treas-phàrtaidh. Tha am pròiseact asyncronach agus mus tàinig mi, bha dòigh shìmplidh aige airson gnìomhan cur air bhog cron: lùb a’ sgrùdadh na h-ùine làithreach agus a’ cur air bhog buidhnean de coroutines tro chruinneachadh - bha an dòigh-obrach seo iomchaidh gus an robh dusanan is ceudan de coroutines ann. , ge-tà, nuair a chaidh an àireamh aca thairis air dà mhìle, bha agam ri smaoineachadh air ciudha gnìomh àbhaisteach a chuir air dòigh le broker, grunn luchd-obrach, agus mar sin air adhart.
An toiseach chuir mi romham feuchainn air Celery, a bha mi air a chleachdadh roimhe. Air sgàth nàdar asyncronach a’ phròiseict, chaidh mi a-steach don cheist agus chunnaic mi
Canaidh mi seo, tha am pròiseact gu math inntinneach agus ag obair gu math soirbheachail ann an tagraidhean eile den sgioba againn, agus tha an t-ùghdar fhèin ag ràdh gun robh e comasach dha a chuir a-steach gu cinneasachadh le bhith a ’cleachdadh amar asyncronach. Ach, gu mì-fhortanach, cha do chòrd e rium idir, mar a thachair
A thaobh seo, thòisich mi a 'coimhead roghainnean eile agus lorg e! Luchd-cruthachaidh an soilire, gu sònraichte, mar a tha mi ga thuigsinn
Cuideachd, faodaidh tu coimhead
Dè nì sinn?
Mar sin, ann an sreath ghoirid de artaigilean, seallaidh mi dhut mar a chruinnicheas tu dàta bho ghnìomhan cùl-fhiosrachaidh a’ cleachdadh Faust. Is e an stòr airson ar pròiseact eisimpleir, mar a tha an t-ainm a’ moladh,
PS A ’breithneachadh leis a’ mhisneachd leis an deach a ’phuing mu sgrùdadh a sgrìobhadh, tha mi a’ smaoineachadh gum bi an leughadair aig deireadh an artaigil mu dheireadh fhathast a ’coimhead rudeigin mar seo:
Riatanasan pròiseict
Leis gu bheil mi air gealltainn mar-thà, dèanamaid liosta bheag de na bu chòir don t-seirbheis a bhith comasach:
- Luchdaich suas thèarainteachdan agus sealladh farsaing orra (a ’toirt a-steach prothaidean is call, clàr cothromachaidh, sruth airgid - airson na bliadhna a dh’ fhalbh) - gu cunbhalach
- Luchdaich suas dàta eachdraidheil (airson gach bliadhna malairt, lorg fìor luachan prìs dùnaidh malairt) - gu cunbhalach
- Luchdaich suas an dàta malairt as ùire - gu cunbhalach
- Luchdaich suas liosta gnàthaichte de chomharran airson gach tèarainteachd - gu cunbhalach
Mar a bhiodh dùil, bidh sinn a’ taghadh ainm airson a’ phròiseict bhon fhìor thoiseach: Horton
Tha sinn ag ullachadh a’ bhun-structair
Tha an tiotal gu cinnteach làidir, ge-tà, chan eil agad ach config beag a sgrìobhadh airson docker-compose le kafka (agus zookeeper - ann an aon ghobhar), kafdrop (ma tha sinn airson sùil a thoirt air teachdaireachdan ann an cuspairean), mongodb. Gheibh sinn [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
Chan eil dad iom-fhillte an seo idir. Chaidh dithis luchd-èisteachd ainmeachadh airson kafka: aon (a-staigh) airson a chleachdadh taobh a-staigh an lìonra measgaichte, agus an dàrna fear (taobh a-muigh) airson iarrtasan bhon taobh a-muigh, agus mar sin chuir iad air adhart e taobh a-muigh. 2181 - port zookeeper. Tha an còrr, tha mi a’ smaoineachadh, soilleir.
Ag ullachadh cnàimhneach a’ phròiseict
Anns an dreach bunaiteach, bu chòir structar a 'phròiseict againn a bhith a' coimhead mar seo:
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 *
*A h-uile dad a thug mi fa-near Cha bhith sinn a’ suathadh ris fhathast, dìreach cruthaichidh sinn faidhlichean falamh.**
Chruthaich sinn structar. A-nis leig dhuinn na h-eisimeileachd riatanach a chuir ris, sgrìobh an config agus ceangail ri mongodb. Cha toir mi seachad teacsa iomlan nam faidhlichean san artaigil, gus nach cuir mi dàil air, ach bheir mi ceanglaichean gu na dreachan riatanach.
Feuch an tòisich sinn le eisimeileachd agus meta mun phròiseact -
An uairsin, tòisichidh sinn a’ stàladh eisimeileachd agus a’ cruthachadh virtualenv (no faodaidh tu am pasgan venv a chruthachadh thu fhèin agus an àrainneachd a chuir an gnìomh):
pip3 install poetry (если ещё не установлено)
poetry install
A-nis cruthaichidh sinn
Nuair a cheanglas tu ri Mongo, tha a h-uile dad gu math sìmplidh. ainmeachadh
Dè thachras a-nis?
Chan eil an artaigil glè fhada, oir an seo chan eil mi a’ bruidhinn ach mu bhrosnachadh agus ullachadh, mar sin na cuir a ’choire orm - tha mi a’ gealltainn gum bi gnìomh agus grafaigean aig an ath phàirt.
Mar sin, anns an ath phàirt seo tha sinn:
- Sgrìobhamaid neach-dèiligidh beag airson alphavantage air aiohttp le iarrtasan airson na puingean crìochnachaidh a dh’ fheumas sinn.
- Cruthaichidh sinn àidseant a chruinnicheas dàta mu thèarainteachdan agus prìsean eachdraidheil dhaibh.
Source: www.habr.com