Bakgrunnsverkefni um Faust, I. hluti: Inngangur

Bakgrunnsverkefni um Faust, I. hluti: Inngangur

Hvernig komst ég að því að lifa svona?

Ekki er langt síðan ég þurfti að vinna á bakhlið mjög hlaðins verkefnis, þar sem nauðsynlegt var að skipuleggja reglubundna framkvæmd fjölda bakgrunnsverkefna með flóknum útreikningum og beiðnum um þjónustu þriðja aðila. Verkefnið er ósamstillt og áður en ég kom hafði það einfalt kerfi til að ræsa verkefni: lykkja sem athugar núverandi tíma og ræsir hópa af coroutines í gegnum safna - þessi aðferð reyndist vera ásættanleg þar til það voru tugir og hundruðir af slíkum coroutines Hins vegar, þegar fjöldi þeirra fór yfir tvö þúsund, þurfti ég að hugsa um að skipuleggja venjulega verkefnaröð með miðlara, nokkrum starfsmönnum og svo framvegis.

Fyrst ákvað ég að prófa sellerí sem ég hafði notað áður. Vegna þess hversu ósamstilltur verkefnið var, kafaði ég ofan í spurninguna og sá greinsem og verkefni, búin til af höfundi greinarinnar.

Ég segi þetta, verkefnið er mjög áhugavert og virkar mjög vel í öðrum forritum teymisins okkar, og höfundurinn sjálfur segir að hann hafi getað rúllað því út í framleiðslu með því að nota ósamstillt laug. En því miður hentaði það mér ekki eins og það kom í ljós vandamál með hópræsingu á verkefnum (sjá. hópurinn). Þegar þetta er skrifað mál er þegar lokað, þó hefur verið unnið í mánuð. Í öllu falli, gangi þér vel fyrir höfundinn og gangi þér vel, þar sem það eru nú þegar að vinna hluti á lib... almennt séð er málið í mér og tólið reyndist vera rakt fyrir mig. Að auki höfðu sum verkefni 2-3 http beiðnir til mismunandi þjónustu, þannig að jafnvel við fínstillingu verkefna búum við til 4 þúsund TCP tengingar, um það bil á 2 tíma fresti - ekki mjög gott... Mig langar að búa til lotu fyrir eina tegund af verkefni við að hefja starfsmenn. Aðeins meira um fjölda beiðna í gegnum aiohttp hér.

Í þessu sambandi fór ég að leita valkostir og fann það! Höfundar sellerísins, sérstaklega, eins og ég skil það Spyrðu Solem, var búinn til Faust, upphaflega fyrir verkefnið robinhood. Faust er innblásinn af Kafka Streams og vinnur með Kafka sem miðlara, rocksdb er einnig notað til að geyma niðurstöður úr starfi umboðsmanna og mikilvægast er að safnið sé ósamstillt.

Einnig er hægt að skoða fljótur samanburður sellerí og faust frá höfundum þess síðarnefnda: munur þeirra, munur milli miðlara, framkvæmd grunnverkefnis. Allt er frekar einfalt, hins vegar vekur ágætur eiginleiki í faust athygli - vélrituð gögn til að senda á efnið.

Hvað gerum við?

Svo, í stuttri greinaröð, mun ég sýna þér hvernig á að safna gögnum úr bakgrunnsverkefnum með Faust. Heimildin að dæmiverkefninu okkar verður, eins og nafnið gefur til kynna, alphavantage.co. Ég mun sýna hvernig á að skrifa umboðsmenn (vaskur, efni, skipting), hvernig á að framkvæma reglulega (cron) framkvæmd, þægilegustu faust cli skipanir (umbúðir yfir smell), einfalda þyrping, og í lokin munum við tengja við gagnahund ( vinna út úr kassanum) og reyna að sjá eitthvað. Til að geyma söfnuð gögn munum við nota mongodb og mótor fyrir tengingu.

PS Miðað við sjálfstraustið sem punkturinn um eftirlit var skrifaður með, held ég að lesandinn í lok síðustu greinar muni samt líta einhvern veginn svona út:

Bakgrunnsverkefni um Faust, I. hluti: Inngangur

Verkefnakröfur

Vegna þeirrar staðreyndar sem ég hef þegar lofað, skulum við gera lítinn lista yfir hvað þjónustan ætti að geta gert:

  1. Hladdu upp verðbréfum og yfirliti yfir þau (þar á meðal hagnað og tap, efnahagsreikning, sjóðstreymi - fyrir síðasta ár) - reglulega
  2. Hladdu upp sögulegum gögnum (fyrir hvert viðskiptaár, finndu öfgagildi á lokaverði viðskipta) - reglulega
  3. Hladdu upp nýjustu viðskiptagögnum - reglulega
  4. Hladdu upp sérsniðnum lista yfir vísbendingar fyrir hvert öryggi - reglulega

Eins og við var að búast veljum við nafn á verkefnið frá grunni: Horton

Við erum að undirbúa innviðina

Titillinn er vissulega sterkur, en allt sem þú þarft að gera er að skrifa litla stillingu fyrir docker-compose með kafka (og dýragarðsvörður - í einum íláti), kafdrop (ef við viljum skoða skilaboð í efni), mongodb. Við fáum [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) af eftirfarandi formi:

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

Hér er alls ekkert flókið. Tveir hlustendur voru lýstir yfir fyrir kafka: einn (innri) til notkunar innan samsetta netsins og hinn (ytri) fyrir beiðnir utan frá, svo þeir sendu það út. 2181 — dýragarðshafnarhöfn. Restin held ég að sé á hreinu.

Undirbúningur beinagrind verkefnisins

Í grunnútgáfunni ætti uppbygging verkefnisins okkar að líta svona út:

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 *

*Allt sem ég tók eftir Við snertum það ekki ennþá, við búum bara til tómar skrár.**

Við bjuggum til uppbyggingu. Nú skulum við bæta við nauðsynlegum ósjálfstæðum, skrifa stillinguna og tengjast mongodb. Ég mun ekki gefa upp allan texta skránna í greininni, til að tefja það ekki, en ég mun útvega tengla á nauðsynlegar útgáfur.

Byrjum á ósjálfstæði og meta um verkefnið - pyproject.toml

Næst byrjum við að setja upp ósjálfstæði og búa til virtualenv (eða þú getur búið til venv möppuna sjálfur og virkjað umhverfið):

pip3 install poetry (если ещё не установлено)
poetry install

Nú skulum við búa til config.yml - Skilríki og hvar á að banka. Þú getur strax sett gögn fyrir alphavantage þar. Jæja, við skulum halda áfram að config.py - draga gögn fyrir forritið úr stillingum okkar. Já, ég játa, ég notaði líf mitt - sitri.

Þegar þú tengist Mongo er allt frekar einfalt. tilkynnti flokki viðskiptavina að tengja og grunnflokkur fyrir cruds, til að gera það auðveldara að gera fyrirspurnir um söfn.

Hvað gerist næst?

Greinin er ekki mjög löng, þar sem ég er aðeins að tala um hvatningu og undirbúning, svo ekki ásaka mig - ég lofa að næsti hluti mun hafa hasar og grafík.

Svo, í þessum næsta hluta:

  1. Við skulum skrifa lítinn viðskiptavin fyrir alphavantage á aiohttp með beiðnum um endapunktana sem við þurfum.
  2. Búum til umboðsmann sem mun safna gögnum um verðbréf og sögulegt verð fyrir þau.

Verkefnakóði

Kóði fyrir þennan hluta

Heimild: www.habr.com

Bæta við athugasemd