Mən necə yaşamağa gəldim?
Bir müddət əvvəl mən mürəkkəb hesablamalar və üçüncü tərəf xidmətləri üçün sorğularla çox sayda fon tapşırıqlarının müntəzəm icrasını təşkil etmək lazım olan yüksək yüklənmiş bir layihənin arxa tərəfində işləməli oldum. Layihə asinxrondur və mən gəlməmişdən əvvəl onun cron-başlatma tapşırıqları üçün sadə mexanizmi var idi: cari vaxtı yoxlayan dövrə və toplama vasitəsilə koroutin qruplarını işə salmaq - bu yanaşma onlarla və yüzlərlə belə koroutinlər olana qədər məqbul oldu. , lakin onların sayı iki mini keçdikdə mən makler, bir neçə işçi və s. ilə normal tapşırıq növbəsi təşkil etmək barədə düşünməli oldum.
Əvvəlcə əvvəllər istifadə etdiyim Kərəvizi sınamaq qərarına gəldim. Layihənin asinxron olması səbəbindən suala daldım və gördüm
Bunu deyəcəyəm, layihə çox maraqlıdır və komandamızın digər tətbiqlərində kifayət qədər uğurla işləyir və müəllif özü deyir ki, asinxron hovuzdan istifadə edərək onu istehsala çıxara bilib. Ancaq təəssüf ki, göründüyü kimi, bu, mənə uyğun gəlmədi
Bu baxımdan axtarmağa başladım alternativlər və tapdı! Kərəvizin yaradıcıları, konkret olaraq, mən başa düşdüyüm kimi
Həm də baxa bilərsiniz
Biz nə edirik?
Beləliklə, qısa məqalələr silsiləsində sizə Faust istifadə edərək fon tapşırıqlarından məlumat toplamaq yollarını göstərəcəyəm. Nümunə layihəmizin mənbəyi adından da göründüyü kimi,
P.S. Monitorinqlə bağlı mətləbin hansı inamla yazıldığını nəzərə alsaq, düşünürəm ki, sonuncu məqalənin sonundakı oxucu hələ də belə görünəcək:
Layihə tələbləri
Artıq söz verdiyimə görə, xidmətin nə edə biləcəyinin kiçik bir siyahısını verək:
- Qiymətli kağızları və onların icmalını (son bir il üçün mənfəət və zərər, balans hesabatı, pul vəsaitlərinin hərəkəti daxil olmaqla) yükləyin - müntəzəm olaraq
- Tarixi məlumatları yükləyin (hər ticarət ili üçün ticarətin bağlanma qiymətinin həddindən artıq dəyərlərini tapın) - müntəzəm olaraq
- Ən son ticarət məlumatlarını yükləyin - müntəzəm olaraq
- Hər bir təhlükəsizlik üçün göstəricilərin fərdiləşdirilmiş siyahısını yükləyin - müntəzəm olaraq
Gözlənildiyi kimi, biz sıfırdan layihə üçün bir ad seçirik: horton
Biz infrastrukturu hazırlayırıq
Başlıq sözsüz ki, güclüdür, lakin sizə lazım olan şey kafka (və zookeeper - bir konteynerdə), kafdrop (əgər mövzulardakı mesajlara baxmaq istəsək), mongodb ilə docker-compose üçün kiçik bir konfiqurasiya yazmaqdır. alırıq [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
Burada ümumiyyətlə mürəkkəb bir şey yoxdur. Kafka üçün iki dinləyici elan edildi: biri (daxili) kompozit şəbəkə daxilində istifadə üçün, ikincisi (xarici) xaricdən gələn sorğular üçün, ona görə də onu xaricə yönləndirdilər. 2181 - zookeper limanı. Qalanları, məncə, aydındır.
Layihənin skeletinin hazırlanması
Əsas versiyada layihəmizin strukturu belə görünməlidir:
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 *
*Qeyd etdiyim hər şey Biz hələ ona toxunmuruq, sadəcə boş fayllar yaradırıq.**
Biz struktur yaratdıq. İndi lazım olan asılılıqları əlavə edək, konfiqurasiyanı yazıb mongodb-a qoşulaq. Gecikməmək üçün məqalədəki faylların tam mətnini verməyəcəyəm, lakin lazımi versiyalara keçidlər verəcəyəm.
Layihə haqqında asılılıqlar və meta ilə başlayaq -
Sonra, asılılıqları quraşdırmağa və virtualenv yaratmağa başlayırıq (yaxud venv qovluğunu özünüz yarada və mühiti aktivləşdirə bilərsiniz):
pip3 install poetry (если ещё не установлено)
poetry install
İndi yaradaq
Mongo-ya qoşulduqda hər şey olduqca sadədir. elan etdi
Bundan sonra nə olacaq?
Məqalə çox uzun deyil, çünki burada mən yalnız motivasiya və hazırlıqdan danışıram, buna görə də məni günahlandırmayın - söz verirəm ki, növbəti hissədə hərəkət və qrafika olacaq.
Beləliklə, növbəti hissədə biz:
- Bizə lazım olan son nöqtələr üçün sorğularla aiohttp-də alfavantage üçün kiçik bir müştəri yazaq.
- Gəlin qiymətli kağızlar və onlar üçün tarixi qiymətlər haqqında məlumat toplayan agent yaradaq.
Mənbə: www.habr.com