Wéi sinn ech komm fir esou ze liewen?
Net viru laanger Zäit hunn ech um Backend vun engem héichbelaaschte Projet ze schaffen, an deem et néideg war, déi regelméisseg Ausféierung vun enger grousser Unzuel vun Hannergrondaufgaben mat komplexe Berechnungen an Ufroe fir Drëtt-Partei-Servicer ze organiséieren. De Projet ass asynchron a ier ech komm sinn, hat et en einfache Mechanismus fir Cron-Start Aufgaben: eng Loop déi aktuell Zäit iwwerpréift a Gruppe vu Coroutines iwwer Sammelen lancéiert - dës Approche huet sech als akzeptabel erausgestallt bis et Dosende an Honnerte vu sou Coroutine goufen , Wéi och ëmmer, wann hir Zuel zweedausend iwwerschratt ass, hunn ech missen nodenken, eng normal Taskschlaang mat engem Broker, e puer Aarbechter, a sou weider ze organiséieren.
Als éischt hunn ech decidéiert Sellerie auszeprobéieren, déi ech virdru benotzt hunn. Wéinst der asynchroner Natur vum Projet hunn ech an d'Fro gedaucht a gesinn
Ech wäert dat soen, de Projet ass ganz interessant a funktionnéiert ganz erfollegräich an aneren Applikatiounen vun eisem Team, an den Auteur selwer seet datt hien et an d'Produktioun konnt ausrollen andeems en asynchrone Pool benotzt. Awer leider huet et mir net wierklech gepasst, wéi et sech erausstellt
An dëser Hisiicht hunn ech ugefaang ze sichen Alternativen an et fonnt! D'Creatoren vun Sellerie, speziell, wéi ech et verstinn
Och kënnt Dir kucken
Wat maache mir?
Also, an enger kuerzer Serie vun Artikelen, wäert ech Iech weisen wéi Dir Daten aus Hannergrond Aufgaben sammelt mat Faust. D'Quell fir eise Beispillprojet wäert sinn, wéi den Numm et scho seet,
PS Beuerteelt no dem Vertrauen mat deem de Punkt iwwer d'Iwwerwaachung geschriwwe gouf, denken ech datt de Lieser um Enn vum leschten Artikel nach ëmmer esou ausgesäit:
Projet Ufuerderunge
Wéinst der Tatsaach, datt ech scho versprach hunn, loosst eis eng kleng Lëscht maachen wat de Service maache soll:
- Eroplueden Wäertpabeieren an en Iwwerbléck vun hinnen (och Gewënn a Verloschter, Bilan, Cash Flow - fir d'lescht Joer) - regelméisseg
- Eroplueden historesch Donnéeën (fir all Handelsjoer, fannt extrem Wäerter vum Ofschlosspräis vum Handel) - regelméisseg
- Eroplueden lescht Handelsdaten - regelméisseg
- Luet eng personaliséiert Lëscht vun Indikatoren fir all Sécherheet erop - regelméisseg
Wéi erwaart, wielt mir en Numm fir de Projet vun Null: Horton
Mir preparéieren d'Infrastruktur
Den Titel ass sécherlech staark, awer alles wat Dir maache musst ass eng kleng Configuratioun fir Docker-Compose mat Kafka (an Zookeeper - an engem Container), kafdrop (wa mir Messagen an Themen kucke wëllen), mongodb schreiwen. Mir kréien [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
Et gëtt näischt komplizéiert hei iwwerhaapt. Zwee Nolauschterer goufen fir Kafka deklaréiert: een (intern) fir am Komposit-Netz ze benotzen, an déi zweet (extern) fir Ufroe vu baussen, sou datt se et dobausse weiderginn. 2181 - Zookeeper Hafen. De Rescht, mengen ech, ass kloer.
Virbereedung vum Skelett vum Projet
An der Basisversioun soll d'Struktur vun eisem Projet esou ausgesinn:
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 *
*Alles wat ech notéiert hunn Mir beréieren et nach net, mir erstellen just eidel Dateien.**
Mir hunn eng Struktur erstallt. Loosst eis elo déi néideg Ofhängegkeeten addéieren, d'Konfiguratioun schreiwen a mat mongodb verbannen. Ech ginn net de ganzen Text vun den Dateien am Artikel, fir et net ze verzögeren, awer ech ginn Linken op déi néideg Versiounen.
Loosst eis mat Ofhängegkeeten a Meta iwwer de Projet ufänken -
Als nächst fänken mir Ofhängegkeeten z'installéieren an e virtualenv ze kreéieren (oder Dir kënnt de venv Dossier selwer erstellen an d'Ëmfeld aktivéieren):
pip3 install poetry (если ещё не установлено)
poetry install
Loosst eis elo erstellen
Wann Dir mat Mongo verbënnt, ass alles ganz einfach. ugekënnegt
Wat wäert dann geschéien?
Den Artikel ass net ganz laang, well ech hei nëmmen iwwer Motivatioun a Virbereedung schwätzen, also schued mech net - ech verspriechen datt den nächsten Deel Handlung a Grafiken huet.
Also, an dësem ganz nächsten Deel mir:
- Loosst eis e klenge Client fir Alphavantage op aiohttp schreiwen mat Ufroe fir d'Endpunkte déi mir brauchen.
- Loosst eis en Agent erstellen deen Daten iwwer Wäertpabeieren an historesch Präisser fir si sammelt.
Source: will.com