Мен бұлай өмір сүруге қалай келдім?
Жақында маған күрделі есептеулер мен үшінші тарап қызметтеріне сұраныстары бар көптеген фондық тапсырмаларды жүйелі түрде орындауды ұйымдастыру қажет болатын жоғары жүктелген жобаның бэкендінде жұмыс істеуге тура келді. Жоба асинхронды және мен келгенге дейін оның тапсырмаларды орындаудың қарапайым механизмі болды: ағымдағы уақытты тексеретін цикл және жинау арқылы корутиндер топтарын іске қосу - бұл тәсіл ондаған және жүздеген осындай корутиндер болғанша қолайлы болып шықты. , алайда, олардың саны екі мыңнан асқанда, мен брокермен, бірнеше жұмысшымен және т.б. бар қалыпты тапсырма кезегін ұйымдастыру туралы ойлауға тура келді.
Алдымен бұрын қолданып жүрген балдыркөкті сынап көрейін деп шештім. Жобаның асинхронды сипатына байланысты мен сұраққа сүңгіп, көрдім
Мен мұны айтайын, жоба өте қызықты және біздің команданың басқа қолданбаларында сәтті жұмыс істейді, автордың өзі оны асинхронды пулды пайдалану арқылы өндіріске шығара алғанын айтады. Бірақ, өкінішке орай, бұл маған сәйкес келмеді, белгілі болды
Осыған байланысты іздей бастадым баламалар және оны тапты! Балдыркөкті жасаушылар, атап айтқанда, мен түсінемін
Сондай-ақ, қарауға болады
Не істейміз?
Сонымен, қысқаша мақалалар топтамасында мен Faust көмегімен фондық тапсырмалардан деректерді қалай жинау керектігін көрсетемін. Біздің мысал жобамыздың көзі, аты айтып тұрғандай,
PS. Мониторинг туралы ойдың жазылғанына сенетін болсақ, соңғы мақаланың соңындағы оқырман әлі де келесідей көрінеді деп ойлаймын:
Жобаға қойылатын талаптар
Мен қазірдің өзінде уәде бергендіктен, қызмет не істей алатыны туралы шағын тізім жасайық:
- Бағалы қағаздарды және оларға шолуды жүктеп салу (соның ішінде пайда мен шығын, баланс, ақша қозғалысы – соңғы жыл үшін) – жүйелі түрде
- Тарихи деректерді жүктеп салыңыз (әрбір сауда жылы үшін сауданың жабылу бағасының экстремалды мәндерін табыңыз) - жүйелі түрде
- Соңғы сауда деректерін жүктеп салыңыз - үнемі
- Әр қауіпсіздік үшін индикаторлардың теңшелген тізімін жүктеп салыңыз - жүйелі түрде
Күтілгендей, біз жобаның атауын нөлден таңдаймыз: Хортон
Біз инфрақұрылымды дайындап жатырмыз
Тақырып әрине күшті, дегенмен сізге тек kafka (және зоопаркшы - бір контейнерде), kafdrop (тақырыптардағы хабарларды қарағымыз келсе), mongodb көмегімен docker-compose үшін шағын конфигурация жазу жеткілікті. Біз алып жатырмыз [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
Мұнда мүлде күрделі ештеңе жоқ. Кафка үшін екі тыңдаушы жарияланды: бірі (ішкі) композиттік желі ішінде пайдалану үшін, екіншісі (сыртқы) сыртқы сұраулар үшін, сондықтан олар оны сыртқа жіберді. 2181 — зоопарк. Қалғаны, менің ойымша, түсінікті.
Жобаның қаңқасын дайындау
Негізгі нұсқада жобамыздың құрылымы келесідей болуы керек:
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-ге қосылайық. Мен оны кешіктірмеу үшін мақаладағы файлдардың толық мәтінін бермеймін, бірақ қажетті нұсқаларға сілтеме беремін.
Жоба туралы тәуелділіктер мен метадан бастайық -
Содан кейін біз тәуелділіктерді орнатуды және virtualenv құруды бастаймыз (немесе сіз venv қалтасын өзіңіз жасап, ортаны белсендіре аласыз):
pip3 install poetry (если ещё не установлено)
poetry install
Енді құрайық
Mongo-ға қосылу кезінде бәрі өте қарапайым. жариялады
Келесіде не болады?
Мақала өте ұзақ емес, өйткені мен мұнда тек мотивация мен дайындық туралы айтып отырмын, сондықтан мені айыптамаңыз - келесі бөлімде әрекет пен графика болады деп уәде беремін.
Сонымен, келесі бөлімде біз:
- Бізге қажетті соңғы нүктелерге сұраныстармен aiohttp-те alphavantage үшін шағын клиентті жазайық.
- Бағалы қағаздар мен олардың тарихи бағалары туралы деректерді жинайтын агент құрайық.
Ақпарат көзі: www.habr.com