Sut wnes i ddod i fyw fel hyn?
Ddim yn bell yn ôl bu'n rhaid i mi weithio ar gefn prosiect llawn llwyth, lle roedd angen trefnu cyflawni nifer fawr o dasgau cefndir yn rheolaidd gyda chyfrifiadau cymhleth a cheisiadau am wasanaethau trydydd parti. Mae'r prosiect yn anghydamserol a chyn i mi ddod, roedd ganddo fecanwaith syml ar gyfer tasgau lansio cron: dolen yn gwirio'r amser presennol a lansio grwpiau o goroutines trwy ymgynnull - trodd y dull hwn yn dderbyniol nes bod dwsinau a channoedd o goroutines o'r fath , fodd bynnag, pan oedd eu nifer yn fwy na dwy fil, roedd yn rhaid i mi feddwl am drefnu ciw tasg arferol gyda brocer, nifer o weithwyr, ac ati.
Yn gyntaf penderfynais roi cynnig ar Seleri, yr oeddwn wedi'i ddefnyddio o'r blaen. Oherwydd natur asyncronig y prosiect, blymiais i'r cwestiwn a gweld
Fe ddywedaf hyn, mae'r prosiect yn ddiddorol iawn ac yn gweithio'n eithaf llwyddiannus mewn cymwysiadau eraill o'n tîm, ac mae'r awdur ei hun yn dweud ei fod wedi gallu ei gyflwyno i gynhyrchu trwy ddefnyddio pwll asyncronaidd. Ond, yn anffodus, nid oedd yn fy siwtio i mewn gwirionedd, fel y digwyddodd
Yn hyn o beth, dechreuais edrych dewisiadau amgen a dod o hyd iddo! Crewyr seleri, yn benodol, yn ôl yr hyn a ddeallaf
Hefyd, gallwch edrych
Beth ydyn ni'n ei wneud?
Felly, mewn cyfres fer o erthyglau, byddaf yn dangos i chi sut i gasglu data o dasgau cefndir gan ddefnyddio Faust. Y ffynhonnell ar gyfer ein prosiect enghreifftiol fydd, fel y mae'r enw'n awgrymu,
PS A barnu yn ôl yr hyder yr ysgrifennwyd y pwynt am fonitro ag ef, credaf y bydd y darllenydd ar ddiwedd yr erthygl ddiwethaf yn dal i edrych rhywbeth fel hyn:
Gofynion y prosiect
Oherwydd fy mod eisoes wedi addo, gadewch i ni wneud rhestr fach o'r hyn y dylai'r gwasanaeth allu ei wneud:
- Lanlwythwch warantau a throsolwg ohonynt (gan gynnwys elw a cholledion, mantolen, llif arian - ar gyfer y flwyddyn ddiwethaf) - yn rheolaidd
- Llwythwch i fyny data hanesyddol (ar gyfer pob blwyddyn fasnachu, darganfyddwch werthoedd eithafol y pris cau masnachu) - yn rheolaidd
- Llwythwch i fyny'r data masnachu diweddaraf - yn rheolaidd
- Llwythwch i fyny restr wedi'i haddasu o ddangosyddion ar gyfer pob diogelwch - yn rheolaidd
Yn ôl y disgwyl, rydym yn dewis enw ar gyfer y prosiect o'r dechrau: Horton
Rydym yn paratoi’r seilwaith
Mae'r teitl yn sicr yn gryf, fodd bynnag, y cyfan sydd angen i chi ei wneud yw ysgrifennu cyfluniad bach ar gyfer cyfansoddi docwr gyda kafka (a zookeeper - mewn un cynhwysydd), kafdrop (os ydym am edrych ar negeseuon mewn pynciau), mongodb. Cawn [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
Nid oes dim byd cymhleth yma o gwbl. Datganwyd dau wrandäwr ar gyfer kafka: un (mewnol) i'w ddefnyddio y tu mewn i'r rhwydwaith cyfansawdd, a'r ail (allanol) ar gyfer ceisiadau o'r tu allan, felly fe wnaethant ei anfon ymlaen y tu allan. 2181 - porthladd sw. Mae'r gweddill, rwy'n meddwl, yn glir.
Paratoi sgerbwd y prosiect
Yn y fersiwn sylfaenol, dylai strwythur ein prosiect edrych fel hyn:
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 *
*Popeth a nodais Nid ydym yn ei gyffwrdd eto, rydym yn creu ffeiliau gwag.**
Fe wnaethon ni greu strwythur. Nawr, gadewch i ni ychwanegu'r dibyniaethau angenrheidiol, ysgrifennwch y ffurfwedd a chysylltu â mongodb. Ni fyddaf yn darparu testun llawn y ffeiliau yn yr erthygl, er mwyn peidio ag oedi, ond byddaf yn darparu dolenni i'r fersiynau angenrheidiol.
Gadewch i ni ddechrau gyda dibyniaethau a meta am y prosiect -
Nesaf, rydyn ni'n dechrau gosod dibyniaethau a chreu virtualenv (neu gallwch chi greu'r ffolder venv eich hun ac actifadu'r amgylchedd):
pip3 install poetry (если ещё не установлено)
poetry install
Nawr gadewch i ni greu
Wrth gysylltu â Mongo, mae popeth yn eithaf syml. cyhoeddi
Beth fydd yn digwydd nesaf?
Nid yw'r erthygl yn hir iawn, oherwydd yma dim ond am gymhelliant a pharatoi yr wyf yn siarad, felly peidiwch â'm beio - rwy'n addo y bydd gan y rhan nesaf gamau a graffeg.
Felly, yn y rhan nesaf un hon rydym yn:
- Gadewch i ni ysgrifennu cleient bach ar gyfer alphavantage ar aiohttp gyda cheisiadau am y pwyntiau terfyn sydd eu hangen arnom.
- Gadewch i ni greu asiant a fydd yn casglu data ar warantau a phrisiau hanesyddol ar eu cyfer.
Ffynhonnell: hab.com