Tareas de fondo de Fausto Parte I: IntroducciĂłn

https://habrastorage.org/webt/wo/6b/ui/wo6buieqgfwzr4y5tczce4js0rc.png



  1. Parte I: IntroducciĂłn
  2. Parte II: Agentes y equipos


¿Cómo llegué a esta vida?



No hace mucho, tuve que trabajar en el backend de un proyecto muy cargado, en el que necesitaba organizar la ejecución regular de una gran cantidad de tareas en segundo plano con cálculos complejos y solicitudes de servicios de terceros. El proyecto es asincrónico y antes de que yo llegara a él, tenía un mecanismo simple para lanzar tareas en una corona: un bucle con la verificación de la hora actual y el lanzamiento de grupos de corrutinas a través de recopilación; este enfoque resultó ser aceptable hasta que hubo docenas y cientos de tales corrutinas, sin embargo, cuando su número excedía los dos mil, tuve que pensar en organizar una cola de tareas normal con un corredor, varios trabajadores y así sucesivamente.



Celery, . , , , .



, , , , . , , , (. 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. , , , - , - :



https://habrastorage.org/webt/e5/v1/pl/e5v1plkcyvxyoawde4motgq7vpm.png





, , , :



  1. overview ( .. , , cash flow — ) —
  2. ( ) —
  3. —
  4. —


, : 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.



— . , .



?



, , — , .



, :



  1. alphavantage aiohttp .
  2. , .







All Articles