Cùl-fhiosrachadh air Faust, Pàirt I: Ro-ràdh

Cùl-fhiosrachadh air Faust, Pàirt I: Ro-ràdh

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 artaigilcuideachd dreachd, air a chruthachadh le ùghdar an artaigil.

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 duilgheadas le cur air bhog buidheann de ghnìomhan (faic. buidheann). Aig àm sgrìobhaidh cùis dùinte mar-thà, ge-tà, tha obair air a bhith a' dol air adhart airson mìos. Co-dhiù, deagh fhortan don ùghdar agus gach soirbheachas, leis gu bheil rudan ag obair air an lib mu thràth ... san fharsaingeachd, tha a’ phuing annam agus thionndaidh an inneal gu bhith tais dhomh. A bharrachd air an sin, bha 2-3 iarrtas http aig cuid de ghnìomhan gu diofar sheirbheisean, agus mar sin eadhon nuair a bhios sinn a’ dèanamh an fheum as fheàrr de ghnìomhan, bidh sinn a’ cruthachadh 4 mìle ceangal TCP, timcheall air a h-uile 2 uair - chan eil e glè mhath... bu mhath leam seisean a chruthachadh airson aon seòrsa de obair nuair a thòisicheas tu air luchd-obrach. Beagan a bharrachd mun àireamh mhòr de dh'iarrtasan tro aiohttp an seo.

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 Faighnich Solem, air a chruthachadh Faust, airson a’ phròiseict bho thùs robinhood. Tha Faust air a bhrosnachadh le Kafka Streams agus ag obair le Kafka mar broker, tha rocksdb cuideachd air a chleachdadh gus toraidhean bho obair riochdairean a stòradh, agus is e an rud as cudromaiche gu bheil an leabharlann asyncronach.

Cuideachd, faodaidh tu coimhead coimeas luath soilire agus faust bho luchd-cruthachaidh an fheadhainn mu dheireadh: na h-eadar-dhealachaidhean aca, eadar-dhealachaidhean eadar brocairean, buileachadh gnìomh bunaiteach. Tha a h-uile dad gu math sìmplidh, ge-tà, tha feart snog ann am faust a’ tarraing aire - dàta clò-sgrìobhte airson a chuir chun chuspair.

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, alphavantage.co. Seallaidh mi mar a sgrìobhas tu riochdairean (sinc, cuspairean, sgaradh), mar a nì thu coileanadh cunbhalach (cron), na h-òrdughan faust cli as freagarraiche (còmhdaich thairis air cliog), cruinneachadh sìmplidh, agus aig an deireadh cuiridh sinn datadog ( ag obair a-mach às a’ bhogsa) agus feuch ri rudeigin ri fhaicinn. Gus an dàta cruinnichte a stòradh cleachdaidh sinn mongodb agus motair airson ceangal.

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:

Cùl-fhiosrachadh air Faust, Pàirt I: Ro-ràdh

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:

  1. 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
  2. Luchdaich suas dàta eachdraidheil (airson gach bliadhna malairt, lorg fìor luachan prìs dùnaidh malairt) - gu cunbhalach
  3. Luchdaich suas an dàta malairt as ùire - gu cunbhalach
  4. 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](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) den fhoirm a leanas:

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 - pròiseict.toml

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 config.yml - Teisteanasan agus càite am bu chòir dhut gnogadh. Faodaidh tu dàta airson alphavantage a chuir an sin sa bhad. Uill, gluaisidh sinn air adhart gu config.py - thoir a-mach dàta airson an aplacaid bhon config againn. Seadh, tha mi ag aideachadh, chleachd mi mo lib - sitri.

Nuair a cheanglas tu ri Mongo, tha a h-uile dad gu math sìmplidh. ainmeachadh clas cliant ceangal agus bun-chlas airson cruds, gus a dhèanamh nas fhasa ceistean a thogail mu chruinneachaidhean.

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:

  1. Sgrìobhamaid neach-dèiligidh beag airson alphavantage air aiohttp le iarrtasan airson na puingean crìochnachaidh a dh’ fheumas sinn.
  2. Cruthaichidh sinn àidseant a chruinnicheas dàta mu thèarainteachdan agus prìsean eachdraidheil dhaibh.

Còd pròiseact a

Còd airson am pìos seo a

Source: www.habr.com

Cuir beachd ann