Kepiye carane aku bisa urip kaya ngono?
Ora suwe aku kudu nggarap backend proyek sing akeh dimuat, sing perlu kanggo ngatur eksekusi reguler saka akeh tugas latar mburi kanthi petungan rumit lan panjaluk layanan pihak katelu. Proyek kasebut ora sinkron lan sadurunge aku teka, ana mekanisme sing gampang kanggo tugas cron-launching: daur ulang mriksa wektu saiki lan ngluncurake grup coroutine liwat kumpul - pendekatan iki bisa ditampa nganti ana puluhan lan atusan coroutine kasebut. Nanging, nalika jumlahe ngluwihi rong ewu, aku kudu mikir babagan ngatur antrian tugas normal karo makelar, sawetara buruh, lan liya-liyane.
Pisanan aku mutusake kanggo nyoba Celery, sing wis digunakake sadurunge. Amarga sifat asynchronous saka project, Aku nyilem menyang pitakonan lan weruh
Aku bakal ngomong iki, proyek kasebut menarik banget lan bisa digunakake kanthi sukses ing aplikasi liyane saka tim kita, lan penulis dhewe ujar manawa dheweke bisa nggawe produksi kanthi nggunakake blumbang asynchronous. Nanging, sayangé, ora cocog karo aku, kaya sing nyata
Ing babagan iki, aku wiwit nggoleki alternatif lan ketemu! Pencipta celery, khusus, kaya sing dakmangerteni
Uga, sampeyan bisa ndeleng
Apa sing kita lakoni?
Dadi, ing seri artikel cekak, aku bakal nuduhake sampeyan carane ngumpulake data saka tugas latar mburi nggunakake Faust. Sumber kanggo proyek conto kita bakal, kaya jeneng kasebut,
PS Dideleng saka kapercayan sing ditulis babagan pemantauan, aku mikir yen maca ing pungkasan artikel pungkasan isih bakal katon kaya iki:
Persyaratan proyek
Amarga kasunyatane aku wis janji, ayo nggawe dhaptar cilik babagan apa sing kudu ditindakake layanan kasebut:
- Unggah sekuritas lan ringkesan kasebut (kalebu bathi lan kerugian, neraca, arus kas - kanggo taun kepungkur) - kanthi rutin
- Unggah data historis (kanggo saben taun dagang, temokake nilai ekstrem saka rega penutupan dagang) - kanthi rutin
- Unggah data dagang paling anyar - kanthi rutin
- Unggah dhaptar indikator khusus kanggo saben keamanan - kanthi rutin
Kaya sing dikarepake, kita milih jeneng kanggo proyek kasebut saka awal: Horton
Kita lagi nyiapake infrastruktur
Judhul mesthi kuwat, Nanging, sampeyan mung kudu nulis konfigurasi cilik kanggo docker-compose karo kafka (lan zookeeper - ing siji wadhah), kafdrop (yen kita pengin ndeleng pesen ing topik), mongodb. We njaluk [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
Ora ana sing rumit ing kene. Rong pamireng diumumake kanggo kafka: siji (internal) kanggo digunakake ing jaringan komposit, lan sing kapindho (eksternal) kanggo panjalukan saka njaba, mula diterusake ing njaba. 2181 - pelabuhan zookeeper. Liyane, aku, wis cetha.
Nyiapake kerangka proyek
Ing versi dhasar, struktur proyek kita kudu katon kaya iki:
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 *
*Kabeh aku nyathet Durung ndemek, mung nggawe file kosong.**
Kita nggawe struktur. Saiki ayo nambah dependensi sing dibutuhake, tulis konfigurasi lan sambung menyang mongodb. Aku ora bakal nyedhiyakake teks lengkap file ing artikel kasebut, supaya ora ditundha, nanging aku bakal menehi tautan menyang versi sing dibutuhake.
Ayo miwiti karo dependensi lan meta babagan proyek -
Sabanjure, kita miwiti nginstal dependensi lan nggawe virtualenv (utawa sampeyan bisa nggawe folder venv dhewe lan ngaktifake lingkungan):
pip3 install poetry (если ещё не установлено)
poetry install
Saiki ayo nggawe
Nalika nyambung menyang Mongo, kabeh cukup prasaja. ngumumake
Apa sing bakal kelakon mengko?
Artikel kasebut ora dawa banget, amarga ing kene aku mung ngomong babagan motivasi lan persiapan, mula aja nyalahake aku - aku janji yen bagean sabanjure bakal duwe aksi lan grafis.
Dadi, ing bagean sabanjure kita:
- Ayo nulis klien cilik kanggo alphavantage ing aiohttp kanthi panjaluk kanggo titik pungkasan sing dibutuhake.
- Ayo nggawe agen sing bakal ngumpulake data sekuritase lan rega historis kanggo dheweke.
Source: www.habr.com