Tugas Latar Belakang Faust Bagian I: Pengantar

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



  1. Bagian I: Pendahuluan
  2. Bagian II: Agen dan Tim


Bagaimana saya bisa hidup seperti ini?



Belum lama ini, saya harus mengerjakan bagian belakang proyek yang sangat padat, di mana saya perlu mengatur eksekusi reguler sejumlah besar tugas latar belakang dengan perhitungan dan permintaan yang rumit untuk layanan pihak ketiga. Proyek ini tidak sinkron dan sebelum saya melakukannya, ia memiliki mekanisme sederhana untuk meluncurkan tugas dalam sebuah mahkota: satu putaran dengan memeriksa waktu saat ini dan meluncurkan grup coroutine melalui kumpul - pendekatan ini ternyata dapat diterima hingga ada lusinan dan ratusan coroutine seperti itu, namun, ketika jumlah mereka melebihi dua ribu, saya harus memikirkan untuk mengatur antrian tugas normal dengan seorang perantara, beberapa pekerja, dan sebagainya.



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. ( ) —


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