Qanday qilib men shunday yashashga keldim?
Yaqinda men juda yuklangan loyihaning orqa tomonida ishlashim kerak edi, unda murakkab hisob-kitoblar va uchinchi tomon xizmatlariga so'rovlar bilan ko'p sonli fon vazifalarini muntazam ravishda bajarishni tashkil qilish kerak edi. Loyiha asinxrondir va men kelishimdan oldin u vazifalarni bajarish uchun oddiy mexanizmga ega edi: joriy vaqtni tekshirish va yig'ish orqali korutinlar guruhlarini ishga tushirish - bu yondashuv o'nlab va yuzlab shunday koroutinlar mavjud bo'lmaguncha maqbul bo'lib chiqdi. , ammo, ularning soni ikki mingdan oshganda, men broker, bir nechta ishchi va boshqalar bilan oddiy vazifa navbatini tashkil qilish haqida o'ylashim kerak edi.
Avvaliga men ilgari ishlatgan Seldereyni sinab ko'rishga qaror qildim. Loyihaning asinxron tabiati tufayli men savolga sho'ng'idim va ko'rdim
Men shuni aytamanki, loyiha juda qiziqarli va bizning jamoamizning boshqa ilovalarida juda muvaffaqiyatli ishlaydi va muallifning o'zi uni asinxron hovuz yordamida ishlab chiqarishga chiqarishga muvaffaq bo'lganligini aytadi. Ammo, afsuski, bu menga to'g'ri kelmadi, chunki ma'lum bo'ldi
Shu munosabat bilan men izlay boshladim muqobillar va topildi! Seldereyni yaratuvchilar, xususan, men tushunganimdek
Bundan tashqari, siz qarashingiz mumkin
Nima qilamiz?
Shunday qilib, qisqacha maqolalar turkumida men sizga Faust yordamida fon vazifalaridan ma'lumotlarni qanday yig'ishni ko'rsataman. Bizning namunaviy loyihamiz uchun manba, nomidan ko'rinib turibdiki,
PS. Monitoring haqidagi fikr qay darajada yozilganligiga qarab, oxirgi maqolaning oxiridagi o'quvchi hali ham shunday ko'rinishda bo'ladi deb o'ylayman:
Loyiha talablari
Men allaqachon va'da qilganim sababli, keling, xizmat nima qilishi kerakligi haqida kichik ro'yxat tuzaylik:
- Qimmatli qog'ozlarni va ularning umumiy ko'rinishini (shu jumladan foyda va zararlar, balans, pul oqimi - oxirgi yil uchun) yuklash - muntazam ravishda
- Tarixiy ma'lumotlarni yuklang (har bir savdo yili uchun savdoning yopilish narxining ekstremal qiymatlarini toping) - muntazam ravishda
- So'nggi savdo ma'lumotlarini yuklang - muntazam ravishda
- Har bir xavfsizlik uchun moslashtirilgan ko'rsatkichlar ro'yxatini muntazam ravishda yuklang
Kutilganidek, biz noldan loyiha nomini tanlaymiz: Xorton
Biz infratuzilmani tayyorlayapmiz
Sarlavha albatta kuchli, ammo siz qilishingiz kerak bo'lgan narsa kafka (va zookeeper - bitta konteynerda), kafdrop (agar mavzulardagi xabarlarni ko'rib chiqmoqchi bo'lsak), mongodb bilan docker-compose uchun kichik konfiguratsiyani yozish. olamiz [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
Bu erda hech qanday murakkab narsa yo'q. Kafka uchun ikkita tinglovchi e'lon qilindi: biri (ichki) kompozit tarmoq ichida foydalanish uchun, ikkinchisi (tashqi) tashqaridan so'rovlar uchun, shuning uchun ular uni tashqariga yo'naltirdilar. 2181 - hayvonot bog'i porti. Qolganlari, menimcha, aniq.
Loyihaning skeletini tayyorlash
Asosiy versiyada loyihamizning tuzilishi quyidagicha ko'rinishi kerak:
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 *
*Men qayd etgan hamma narsa Biz unga hali tegmayapmiz, shunchaki boʻsh fayllar yaratamiz.**
Biz tuzilma yaratdik. Endi kerakli bog'liqliklarni qo'shamiz, konfiguratsiyani yozamiz va mongodb ga ulanamiz. Men uni kechiktirmaslik uchun maqoladagi fayllarning to'liq matnini bermayman, lekin kerakli versiyalarga havolalar beraman.
Loyiha haqida bog'liqliklar va metadan boshlaylik -
Keyinchalik, biz bog'liqliklarni o'rnatishni va virtualenv yaratishni boshlaymiz (yoki siz venv papkasini o'zingiz yaratishingiz va muhitni faollashtirishingiz mumkin):
pip3 install poetry (если ещё не установлено)
poetry install
Endi yarataylik
Mongo-ga ulanishda hamma narsa juda oddiy. e'lon qildi
Keyingi nima bo'ladi?
Maqola unchalik uzoq emas, chunki bu erda men faqat motivatsiya va tayyorgarlik haqida gapiryapman, shuning uchun meni ayblamang - keyingi qismda harakatlar va grafikalar bo'lishiga va'da beraman.
Shunday qilib, keyingi qismda biz:
- Bizga kerakli so'nggi nuqtalar uchun so'rovlar bilan aiohttp-da alfavantage uchun kichik mijoz yozamiz.
- Keling, qimmatli qog'ozlar va ular uchun tarixiy narxlar to'g'risida ma'lumot to'playdigan agent yarataylik.
Manba: www.habr.com