Hawlaha asalka ah ee Faust, Qaybta I: Hordhac

Hawlaha asalka ah ee Faust, Qaybta I: Hordhac

Sideen ku imid inaan sidan u noolaado?

Muddo aan dheerayn ka hor waa inaan ka shaqeeyo dhabarka mashruuc aad loo raray, kaas oo ay lagama maarmaan ahayd in la abaabulo fulinta joogtada ah ee tiro badan oo hawlo asal ah oo leh xisaabo adag iyo codsiyo adeegyo dhinac saddexaad ah. Mashruucu waa mid isku mid ah oo ka hor intaanan imid, waxay lahayd habab fudud oo loogu talagalay hawlaha soo-bandhigista: loop hubinta waqtiga hadda jira iyo bilaabista kooxaha coroutines iyada oo loo marayo ururinta - habkani wuxuu noqday mid la aqbali karo ilaa ay jiraan daraasiin iyo boqolaal sida coroutines. , si kastaba ha ahaatee, markii ay tiradoodu kor u dhaaftay laba kun, waxaan ku qasbanaaday in aan ka fekero abaabulka safka shaqada caadiga ah oo leh dilaal, shaqaale badan, iyo wixii la mid ah.

Marka hore waxaan go'aansaday inaan tijaabiyo Celery, oo aan horay u isticmaalay. Dabeecadda is-maandhaafka ah ee mashruuca awgeed, waxaan dhex galay su'aasha oo aan arkay maqaalsidoo kale qabyo-qorid, oo uu sameeyay qoraaga maqaalka.

Waxaan dhihi doonaa tan, mashruucu waa mid aad u xiiso badan oo si guul leh ugu shaqeeya codsiyada kale ee kooxdayada, qoraaga laftiisa ayaa sheegay in uu awooday inuu u soo saaro wax soo saarka isagoo isticmaalaya barkad asynchronous ah. Laakiin, nasiib darro, runtii iguma habboonayn, sidii ay u soo baxday dhibaato iyada oo kooxda la bilaabay hawlo (eeg. group). Waqtiga qorista arrin waa la xidhay, si kastaba ha ahaatee, shaqadu waxay socotay muddo bil ah. Si kastaba ha ahaatee, nasiib wacan qoraaga iyo inta ugu wanaagsan, mar haddii ay jiraan waxyaabo hore u shaqeynaya oo ku saabsan lib ... guud ahaan, ujeeddadu waa aniga oo qalabku wuxuu ii noqday mid qoyan. Intaa waxaa dheer, hawlaha qaarkood waxay lahaayeen 2-3 http codsiyo adeegyo kala duwan, sidaas darteed xitaa marka la hagaajinayo hawlaha, waxaan abuurnaa 4 kun oo isku xira TCP, qiyaastii 2 saacadood kasta - maaha mid aad u wanaagsan ... Waxaan jeclaan lahaa inaan abuuro kalfadhi hal nooc oo ka mid ah shaqada marka la bilaabayo shaqaalaha. Wax yar oo dheeraad ah oo ku saabsan tirada badan ee codsiyada iyada oo loo marayo aiohttp halkan.

Arintan, waxaan bilaabay inaan eego beddelka oo helay! Abuurayaasha celery, gaar ahaan, sida aan u fahmay Weydii Solem, la abuuray Faust, asal ahaan mashruuca robinhood. Faust waxaa dhiirigeliyay Kafka Streams wuxuuna la shaqeeyaa Kafka dilaali ahaan, rocksdb sidoo kale waxaa loo isticmaalaa in lagu kaydiyo natiijooyinka shaqada wakiilada, iyo waxa ugu muhiimsan waa in maktabaddu ay tahay mid isku mid ah.

Sidoo kale, waad eegi kartaa isbarbardhigga degdega ah celery iyo faust ka abuurayaasha dambe: kala duwanaanshahooda, kala duwanaansho u dhexeeya dilaaliinta, fulinta hawl hoose. Wax walba waa sahlan yihiin, si kastaba ha ahaatee, muuqaal fiican oo faust ah ayaa soo jiidanaya dareenka - xogta la qoray ee gudbinta mawduuca.

Maxaan qabanaa?

Marka, maqaallo taxane ah oo gaaban, waxaan ku tusi doonaa sida loo ururiyo xogta hawlaha asalka ah adoo isticmaalaya Faust. Isha mashruuca tusaalahayagu wuxuu noqon doonaa, sida magacaba ka muuqata, alfavantage.co. Waxaan soo bandhigi doonaa sida loo qoro wakiilada (qol, mawduucyo, qaybo), sida loo sameeyo si joogto ah (cron) fulinta, amarrada faust cli ugu habboon ( duubabka ka sarreeya), koox fudud, iyo dhamaadka waxaan ku soo lifaaqi doonaa datadog ( ka shaqaynta bannaanka sanduuqa) oo isku day inaad wax aragto. Si loo kaydiyo xogta la ururiyey waxaan u isticmaali doonaa mongodb iyo motor si loogu xidho.

PS Marka la eego kalsoonida lagu qoray qodobka ku saabsan dabagalka, waxaan filayaa in akhristuhu dhamaadka maqaalka u dambeeya uu weli u ekaan doono sidan:

Hawlaha asalka ah ee Faust, Qaybta I: Hordhac

Shuruudaha mashruuca

Xaqiiqda ah in aan horay u ballan qaaday, aan samayno liis yar oo ah waxa adeeggu uu awoodo inuu sameeyo:

  1. Soo rar dammaanad iyo dulmar iyaga ah (ay ku jiraan faa'iidada iyo khasaaraha, xaashida baaqiga, socodka lacagta caddaanka ah - sannadkii u dambeeyay) - si joogto ah
  2. Soo rar xogta taariikhiga ah (sanad kasta oo ganacsi, hel qiimayaal xad dhaaf ah oo ah qiimaha xidhitaanka ganacsiga) - si joogto ah
  3. Soo rar xogta ganacsi ee ugu dambeysay - si joogto ah
  4. Soo rar liis la habeeyey ee tilmaamayaasha amni kasta - si joogto ah

Sida la filayo, waxaan magaca mashruuca ka dooranay meel eber: Horton

Waxaan diyaarineynaa kaabayaasha dhaqaalaha

Cinwaanka hubaal waa xoog badan yahay, si kastaba ha ahaatee, waxa kaliya ee aad u baahan tahay inaad sameyso waa inaad qorto qaab yar oo loogu talagalay docker-compose leh kafka (iyo zookeeper - hal weel), kafdrop (haddii aan rabno inaan eegno fariimaha mawduucyada), mongodb. Waxaan helnaa [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) ee foomkan:

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

Ma jiraan wax adag halkan gabi ahaanba. Laba dhegeyste ayaa lagu dhawaaqay kafka: mid (gudaha) loogu isticmaalo gudaha shabakadda isku-dhafka ah, iyo tan labaad (dibadda) codsiyada dibadda, sidaas darteed waxay u gudbiyeen dibadda. 2181 - deked zookeeper. Inta kale, waxay ila tahay, way caddahay.

Diyaarinta qalfoofka mashruuca

Nooca aasaasiga ah, qaab dhismeedka mashruucayagu waa inuu u ekaado sidan:

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 *

*Wax kasta oo aan xusay Wali ma taaban, kaliya waxaan abuurnaa faylal madhan.**

Waxaan abuurnay qaab dhismeed. Hadda aan ku darno ku-tiirsanaanta lagama maarmaanka ah, qor config oo ku xidho mongodb. Ma bixin doono qoraalka buuxa ee faylasha ku jira maqaalka, si aan dib loo dhigin, laakiin waxaan ku siin doonaa xiriirinta noocyada lagama maarmaanka ah.

Aan ku bilowno ku tiirsanaanta iyo xogta ku saabsan mashruuca - pyproject.toml

Marka xigta, waxaan bilaabeynaa rakibidda ku-tiirsanaanta oo aan abuurno virtualenv (ama waxaad adigu abuuri kartaa galka venv oo aad dhaqaajiso deegaanka):

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

Hadda aynu abuurno config.yml - Shahaadooyinka iyo meesha la garaaco. Isla markiiba waxaad meel dhigi kartaa xogta alfavantage halkaas. Hagaag, aan u gudubno config.py - ka soo saar xogta codsiga qaabkeena Haa, waan qirayaa, waxaan isticmaalay libkayga - xafiis.

Markaad ku xidhidhiyaha Mongo, wax walbaa waa iska fudud yihiin. lagu dhawaaqay fasalka macmiilka isku xidhka iyo fasalka salka cruds, si ay u fududaato in la sameeyo su'aalo ku saabsan ururinta.

Maxaa xigi doona?

Maqaalku maaha mid aad u dheer, tan iyo halkan waxaan ka hadlayaa oo kaliya dhiirigelinta iyo diyaarinta, markaa ha i eedeyn - waxaan ballan qaadayaa in qaybta xigta ay yeelan doonto ficil iyo sawirro.

Haddaba, qaybtan dambe waxaynu:

  1. Aynu ku qorno macmiil yar oo alfavantage ah aiohttp oo ay ku jiraan codsiyada dhamaadka-dhamaadka ee aan u baahanahay.
  2. Aan abuurno wakiil ururin doona xogta dammaanadaha iyo qiimaha taariikhiga ah iyaga.

Koodhka mashruuca

Koodhka qaybtan

Source: www.habr.com

Add a comment