Asa fototra momba an'i Faust, Fizarana I: Fampidirana

Asa fototra momba an'i Faust, Fizarana I: Fampidirana

Ahoana no nahatonga ahy hiaina toy izany?

Tsy ela akory izay dia tsy maintsy niasa teo amin'ny lamosin'ny tetikasa iray feno entana aho, izay nilaina ny nandaminana ny fanatanterahana tsy tapaka ny asa maro be miaraka amin'ny kajy sarotra sy ny fangatahana serivisy an'ny antoko fahatelo. Ny tetikasa dia asynchronous ary talohan'ny nahatongavako dia nanana rafitra tsotra ho an'ny asa fanokafana cron izy io: tadio iray manamarina ny fotoana ankehitriny ary manokatra vondrona coroutine amin'ny alàlan'ny fanangonana - io fomba io dia azo ekena mandra-pahatongan'ny coroutine am-polony sy an-jatony. , na izany aza, rehefa nihoatra ny roa arivo ny isan'izy ireo, dia tsy maintsy nieritreritra ny handamina filaharana ara-dalàna miaraka amin'ny broker iray aho, mpiasa maromaro, sy ny sisa.

Voalohany dia nanapa-kevitra ny hanandrana Seleria, izay efa nampiasaiko teo aloha aho. Noho ny toetra asynchronous ny tetikasa, dia niditra tao amin'ny fanontaniana aho ary nahita lahatsoratra, ary tetikasa, noforonin'ny mpanoratra ny lahatsoratra.

Izao no holazaiko, tena mahaliana ny tetikasa ary miasa tsara amin'ny fampiharana hafa an'ny ekipanay, ary ny mpanoratra mihitsy no nilaza fa afaka namoaka izany ho famokarana izy tamin'ny fampiasana dobo asynchronous. Saingy, indrisy, tsy tena nety tamiko izany, araka ny hita olana miaraka amin'ny fanombohana ny asa ataon'ny vondrona (jereo. vondrona). Tamin'ny fotoana nanoratana olana efa mihidy anefa, efa iray volana ny asa. Na izany na tsy izany dia mirary soa ho an'ny mpanoratra ary mirary soa, fa efa misy ny miasa ao amin'ny lib... amin'ny ankapobeny dia ato amiko ny hevitra ary lasa mando ho ahy ilay fitaovana. Ho fanampin'izay, ny asa sasany dia manana fangatahana http 2-3 amin'ny serivisy samihafa, ka na dia manatsara ny asa aza dia mamorona fifandraisana TCP 4 arivo izahay, eo ho eo isaky ny adiny 2 - tsy dia tsara loatra... Te-hamorona fivoriana ho an'ny karazana iray aho. asa rehefa manomboka mpiasa. Fanampiny kely momba ny habetsahan'ny fangatahana amin'ny alalan'ny aiohttp eto.

Amin'io lafiny io dia nanomboka nijery aho safidy ary nahita azy! Ny mpamorona ny seleria, indrindra, araka ny fahazoako azy Anontanio i Solem, dia noforonina Faust, tany am-boalohany ho an'ny tetikasa robinhood. Faust dia aingam-panahy avy amin'ny Kafka Streams ary miara-miasa amin'ny Kafka amin'ny maha-mpikaroka azy, ny rocksdb dia ampiasaina ihany koa hitahirizana vokatra avy amin'ny asan'ny mpiasa, ary ny zava-dehibe indrindra dia ny famakiam-boky dia asynchronous.

Azonao atao koa ny mijery fampitahana haingana seleria sy faust avy amin'ny mpamorona ny farany: ny fahasamihafan'izy ireo, ny fahasamihafana eo amin'ny mpivarotra, ny fanatanterahana asa fototra. Tsotra ny zava-drehetra, na izany aza, ny endri-javatra mahafinaritra amin'ny faust dia misarika ny saina - angona voatendry ho an'ny fampitana amin'ny lohahevitra.

Inona no ataontsika?

Noho izany, amin'ny andian-dahatsoratra fohy, hasehoko anao ny fomba fanangonana angon-drakitra avy amin'ny asa any ambadika mampiasa Faust. Ny loharano ho an'ny tetikasa ohatra ataontsika dia, araka ny hevitr'ilay anarana, alphavantage.co. Hasehoko ny fomba fanoratana mpiasa (sink, lohahevitra, fizarazarana), ny fomba famonoana tsy tapaka (cron), ny baiko faust cli mety indrindra (fampidirana amin'ny tsindry), clustering tsotra, ary amin'ny farany dia hametraka datadog ( miasa ivelan'ny boaty) ary manandrana zavatra hojerena. Mba hitahiry ny angon-drakitra voaangona dia hampiasa mongodb sy motera izahay mba hifandraisana.

P.S. Raha jerena amin'ny fahatokisana nanoratana ny fehintsoratra momba ny fanaraha-maso, dia heveriko fa mbola hijery toy izao ny mpamaky amin'ny faran'ny lahatsoratra farany:

Asa fototra momba an'i Faust, Fizarana I: Fampidirana

Ny fepetra takian'ny tetikasa

Noho ny zava-misy izay efa nampanantenaiko dia andao hanao lisitra kely ny zavatra tokony ho vitan'ny serivisy:

  1. Ampidiro ny antoka sy ny topimaso momba azy ireo (anisan'izany ny tombom-barotra sy ny fatiantoka, ny fifandanjana, ny vola miditra - nandritra ny taona lasa) - tsy tapaka
  2. Ampidiro ny angona ara-tantara (isaky ny taom-pivarotana, tadiavo ny sanda faran'izay henjana amin'ny vidin'ny varotra) - tsy tapaka
  3. Mampiakara angon-drakitra farany momba ny varotra - tsy tapaka
  4. Mampiakara lisitry ny tondro ho an'ny fiarovana tsirairay - tsy tapaka

Araka ny efa nampoizina, misafidy anarana ho an'ny tetikasa hatrany am-boalohany izahay: Horton

Manomana ny fotodrafitrasa izahay

Ny lohateny dia azo antoka fa matanjaka, na izany aza, ny hany ilainao atao dia ny manoratra config kely ho an'ny docker-compose miaraka amin'ny kafka (sy zookeeper - ao anaty container iray), kafdrop (raha te hijery hafatra amin'ny lohahevitra isika), mongodb. Mahazo izahay [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) amin'ny endrika manaraka:

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

Tsy misy zavatra sarotra mihitsy eto. Mpihaino roa no nambara ho an'ny kafka: ny iray (anatiny) hampiasaina ao anatin'ny tambajotra mitambatra, ary ny faharoa (ivelany) ho an'ny fangatahana avy any ivelany, ka nampita izany tany ivelany. 2181 - seranan-tsambo zookeeper. Ny ambiny, heveriko, mazava.

Fanomanana ny taolan'ny tetikasa

Amin'ny dikan-teny fototra, ny firafitry ny tetikasantsika dia tokony ho toy izao:

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 *

*Izay rehetra nomarihiko Mbola tsy kitihinay fa mamorona rakitra poakaty fotsiny.**

Namorona rafitra izahay. Andeha isika hanampy ny miankina ilaina, soraty ny config ary mifandray amin'ny mongodb. Tsy hanome ny lahatsoratra feno amin'ny rakitra ao amin'ny lahatsoratra aho, mba tsy hanemotra izany, fa hanome rohy mankany amin'ireo dikan-teny ilaina aho.

Andao hanomboka amin'ny fiankinan-doha sy meta momba ny tetikasa - pyproject.toml

Manaraka, manomboka mametraka fiankinan-doha isika ary mamorona virtualenv (na azonao atao ny mamorona ny lahatahiry venv anao ary manetsika ny tontolo iainana):

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

Andeha isika hamorona config.yml - Taratasy sy toerana handondona. Azonao atao ny mametraka avy hatrany ny angona momba ny alphavantage eo. Eny ary, andao hiroso amin'ny config.py - maka angon-drakitra ho an'ny fampiharana avy amin'ny config. Eny, miaiky aho, nampiasa ny lib-ko aho - sitri.

Rehefa mifandray amin'ny Mongo dia tsotra ny zava-drehetra. nanambara kilasin'ny mpanjifa hifandray ary kilasy fototra ho an'ny cruds, mba hanamora ny fanaovana fanontaniana momba ny fanangonana.

Inona no hitranga manaraka?

Tsy dia lava loatra ilay lahatsoratra, satria ny antony manosika sy ny fiomanana ihany no resahiko eto, koa aza omena tsiny aho - Mampanantena aho fa ny ampahany manaraka dia hisy hetsika sy sary.

Noho izany, amin'ity ampahany manaraka ity isika:

  1. Andao hanoratra mpanjifa kely ho an'ny alphavantage amin'ny aiohttp miaraka amin'ny fangatahana ireo teboka farany ilaintsika.
  2. Andao hamorona mpandraharaha iray izay hanangona angona momba ny antoka sy ny vidin'ny tantara ho azy ireo.

Kaody tetikasa

Code ho an'ity ampahany ity

Source: www.habr.com

Add a comment