Ntchito Zoyambira pa Faust, Gawo I: Chiyambi

Ntchito Zoyambira pa Faust, Gawo I: Chiyambi

Ndinakhala bwanji chonchi?

Osati kale kwambiri ndinayenera kugwira ntchito kumbuyo kwa polojekiti yodzaza kwambiri, momwe kunali kofunika kukonzekera kuchitidwa nthawi zonse kwa ntchito zambiri zakumbuyo ndi mawerengedwe ovuta ndi zopempha za ntchito za chipani chachitatu. Pulojekitiyi ndiyosasinthika ndipo ndisanabwere, inali ndi njira yosavuta yopangira ntchito zoyambitsa cron: kuzungulira komwe kumayang'ana nthawi yomwe ilipo ndikuyambitsa magulu a coroutines kudzera pagulu - njira iyi idakhala yovomerezeka mpaka patakhala ma coroutines ambiri. , komabe, pamene chiwerengero chawo chinaposa zikwi ziwiri, ndinayenera kuganiza za kukonza mzere wa ntchito yabwino ndi broker, antchito angapo, ndi zina zotero.

Poyamba ndinaganiza zoyesa Selari, yomwe ndidagwiritsapo kale. Chifukwa cha kusamvana kwa polojekitiyi, ndidalowa mufunso ndikuwona nkhani,ndi kulemba, yopangidwa ndi wolemba nkhaniyo.

Ndikunena izi, polojekitiyi ndi yosangalatsa kwambiri ndipo imagwira ntchito bwino muzogwiritsira ntchito zina za gulu lathu, ndipo wolemba mwiniyo akunena kuti adatha kuyipanga kupanga pogwiritsa ntchito dziwe la asynchronous. Koma, mwatsoka, sizinandigwirizane ndi ine, monga momwe zinakhalira vuto ndi kukhazikitsa gulu la ntchito (onani. gulu). Pa nthawi yolemba nkhani yatsekedwa kale, komabe, ntchito yakhala ikuchitika kwa mwezi umodzi. Mulimonsemo, zabwino zonse kwa wolembayo ndi zabwino zonse, popeza pali zinthu zomwe zikugwira ntchito kale pa lib ... kawirikawiri, mfundoyi ili mwa ine ndipo chida chinasanduka chonyowa kwa ine. Kuonjezera apo, ntchito zina zinali ndi 2-3 http zopempha ku mautumiki osiyanasiyana, kotero ngakhale pamene kukhathamiritsa ntchito, timapanga 4 zikwi TCP kugwirizana, pafupifupi maola 2 aliwonse - osati zabwino kwambiri ... Ndikufuna kupanga gawo la mtundu umodzi wa ntchito poyambira antchito. Zambiri za kuchuluka kwa zopempha kudzera pa aiohttp apa.

Pankhani imeneyi, ndinayamba kuyang'ana njira zina ndipo anapeza! Omwe amapanga udzu winawake, makamaka, momwe ndikumvera Funsani Solem, analengedwa Faust, poyambira ntchitoyo kuba. Faust amalimbikitsidwa ndi Kafka Mitsinje ndipo amagwira ntchito ndi Kafka monga broker, rocksdb imagwiritsidwanso ntchito kusunga zotsatira kuchokera ku ntchito ya othandizira, ndipo chofunika kwambiri ndi chakuti laibulaleyi ndi yofanana.

Komanso, mukhoza kuyang'ana kuyerekeza msanga udzu winawake ndi faust kuchokera kwa omwe adapanga chomaliza: kusiyana kwawo, kusiyana pakati pa ogulitsa, kukhazikitsa ntchito yoyambira. Chilichonse ndi chophweka, komabe, chinthu chabwino mu faust chimakopa chidwi - deta yojambulidwa kuti ipereke mutuwo.

Kodi timatani?

Chifukwa chake, muzolemba zazifupi, ndikuwonetsani momwe mungasonkhanitsire deta kuchokera kuzinthu zakumbuyo pogwiritsa ntchito Faust. Magwero a projekiti yathu yachitsanzo adzakhala, monga dzina likunenera, alphavantage.co. Ndiwonetsa momwe mungalembere othandizira (kuzama, mitu, magawo), momwe angachitire nthawi zonse (cron), malamulo osavuta kwambiri a faust cli (kukulunga pamwamba), kuphatikiza kosavuta, ndipo pamapeto tidzaphatikiza datadog ( kugwira ntchito m'bokosi) ndikuyesera china chake kuti muwone. Kusunga zomwe zasonkhanitsidwa tidzagwiritsa ntchito mongodb ndi mota kulumikiza.

PS Potengera chidaliro chomwe mfundo yowunikira idalembedwa, ndikuganiza kuti wowerenga kumapeto kwa nkhani yomaliza aziwoneka motere:

Ntchito Zoyambira pa Faust, Gawo I: Chiyambi

Zofunikira za polojekiti

Chifukwa chakuti ndalonjeza kale, tiyeni tipange mndandanda wochepa wa zomwe utumiki uyenera kuchita:

  1. Kwezani zotetezedwa ndikuwunika mwachidule (kuphatikiza phindu ndi zotayika, zowerengera, kuyenda kwandalama - kwa chaka chatha) - pafupipafupi
  2. Kwezani mbiri yakale (pachaka chilichonse chamalonda, pezani mitengo yotsika mtengo yotseka) - pafupipafupi
  3. Kwezani zaposachedwa zamalonda - pafupipafupi
  4. Kwezani makonda mndandanda wa zizindikiro pa chitetezo chilichonse - pafupipafupi

Monga zikuyembekezeredwa, timasankha dzina la polojekiti kuyambira pachiyambi: horton

Tikukonzekera zomangamanga

Mutuwo ndi wamphamvu, komabe, zomwe muyenera kuchita ndikulemba kakhazikitsidwe kakang'ono ka docker-compose ndi kafka (ndi zookeeper - mu chidebe chimodzi), kafdrop (ngati tikufuna kuyang'ana mauthenga pamitu), mongodb. Timapeza [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) mwa mawonekedwe awa:

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

Palibe chovuta apa konse. Omvera awiri adalengezedwa kuti kafka: imodzi (yamkati) kuti igwiritsidwe ntchito mkati mwa netiweki yophatikizika, ndipo yachiwiri (yakunja) pazopempha kuchokera kunja, kotero adayitumiza kunja. 2181 - doko la zookeeper. Zina zonse, ndikuganiza, ndizomveka.

Kukonzekera chigoba cha polojekiti

Mu mtundu woyambira, kapangidwe ka polojekiti yathu iyenera kuwoneka motere:

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 *

*Zonse zomwe ndidaziwona Sitikugwirabe, timangopanga mafayilo opanda kanthu.**

Tinapanga dongosolo. Tsopano tiyeni tiwonjezere zodalira zofunika, lembani config ndikulumikiza ku mongodb. Sindidzapereka zolemba zonse za mafayilo omwe ali m'nkhaniyi, kuti ndisachedwe, koma ndipereka maulalo kumasulidwe oyenera.

Tiyeni tiyambe ndi kudalira ndi meta za polojekiti - pyproject.toml

Kenako, tikuyamba kukhazikitsa zodalira ndikupanga virtualenv (kapena mutha kupanga chikwatu cha venv nokha ndikuyambitsa chilengedwe):

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

Tsopano tiyeni tipange config.yml - Zizindikiro ndi komwe mungagogode. Mutha kuyika nthawi yomweyo deta ya alphavantage pamenepo. Chabwino, tiyeni tipitirire config.py - Chotsani deta yogwiritsira ntchito ku config. Inde, ndikuvomereza, ndidagwiritsa ntchito lib - sitri.

Mukalumikizana ndi Mongo, zonse ndi zophweka. adalengeza kalasi ya kasitomala kugwirizanitsa ndi kalasi yoyambira kwa cruds, kuti zikhale zosavuta kupanga mafunso pazosonkhanitsa.

Nanga n’ciani cidzacitika pambuyo pake?

Nkhaniyi siitalika kwambiri, popeza pano ndikungonena za chilimbikitso ndi kukonzekera, choncho musandidzudzule - ndikulonjeza kuti gawo lotsatira lidzakhala ndi zochitika ndi zojambula.

Kotero, mu gawo lotsatirali ife:

  1. Tiyeni tilembe makasitomala ang'onoang'ono a alphavantage pa aiohttp ndi zopempha zomaliza zomwe tikufuna.
  2. Tiyeni tipange wothandizila yemwe angasonkhanitse zidziwitso zachitetezo ndi mitengo yakale ya iwo.

Project kodi

Khodi ya gawoli

Source: www.habr.com

Kuwonjezera ndemanga