- Partie I: Introduction
- Partie II: Agents et Ă©quipes
Comment suis-je arrivé à cette vie?
Il n'y a pas si longtemps, je devais travailler sur le backend d'un projet trÚs chargé, dans lequel je devais organiser l'exécution réguliÚre d'un grand nombre de tùches en arriÚre-plan avec des calculs complexes et des demandes de services tiers. Le projet est asynchrone et avant d'y arriver, il disposait d'un mécanisme simple pour lancer des tùches dans une couronne: une boucle avec vérification de l'heure actuelle et lancement de groupes de coroutines via rassembler - cette approche s'est avérée acceptable jusqu'à ce qu'il y ait des dizaines et des centaines de telles coroutines, cependant, lorsque leur nombre dépassait deux mille, j'ai dû penser à organiser une file d'attente de tùches normale avec un courtier, plusieurs travailleurs et ainsi de suite.
, , , , . , , , (. group). issue , , . , , ⊠, . , 2-3 http- , 4 tcp , 2 â ⊠. - aiohttp .
, ! celery, , Ask Solem, Faust, robinhood. Faust Kafka Streams Kafka , rocksdb, â , .
, celery faust : , , . , , faust â .
?
, , Faust. - , , alphavantage.co. , (sink, , ), (cron) , cli- faust ( click), , datadog ( ) , - . mongodb motor .
P.S. , , , - , - :
, , , :
- overview ( .. , , cash flow â ) â
- ( ) â
- â
- â
, : horton
, , â docker-compose kafka ( zookeeper â ), kafdrop ( ), mongodb. [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) :
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
. kafka listener': (internal) , (external) , . 2181 â zookeeper'. , , .
:
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 *
, , .
. , mongodb. , , .
â pyproject.toml
, virtualenv (, venv ):
pip3 install poetry ( )
poetry install
config.yml â . alphavantage. config.py â . , , â sitri.
?
, , â , .
, :
- alphavantage aiohttp .
- , .