Би яаж ингэж амьдрах болсон юм бэ?
Тун удалгүй би маш их ачаалалтай төслийн арын хэсэг дээр ажиллах шаардлагатай болсон бөгөөд үүнд нарийн төвөгтэй тооцоолол, гуравдагч талын үйлчилгээ авах хүсэлт бүхий олон тооны суурь даалгавруудыг тогтмол гүйцэтгэх ажлыг зохион байгуулах шаардлагатай болсон. Төсөл нь асинхрон бөгөөд намайг ирэхээс өмнө даалгавруудыг гүйцэтгэх энгийн механизмтай байсан: одоогийн цагийг шалгаж, цуглуулах замаар корутинуудын бүлгүүдийг эхлүүлдэг гогцоо - хэдэн арван, хэдэн зуун ийм корутин гарах хүртэл энэ арга нь зөвшөөрөгдөх боломжтой болсон. Гэсэн хэдий ч тэдний тоо хоёр мянга давсан үед би брокер, хэд хэдэн ажилчин гэх мэт ердийн ажлын дараалал зохион байгуулах талаар бодох хэрэгтэй болсон.
Эхлээд би өмнө нь хэрэглэж байсан Celery-г туршиж үзэхээр шийдсэн. Төслийн асинхрон шинж чанараас шалтгаалан би асуулт руу шумбаж, харсан
Би үүнийг хэлэх болно, төсөл нь маш сонирхолтой бөгөөд манай багийн бусад хэрэглээнд амжилттай ажиллаж байгаа бөгөөд зохиогч өөрөө үүнийг асинхрон усан санг ашиглан үйлдвэрлэлд нэвтрүүлж чадсан гэж хэлсэн. Гэвч харамсалтай нь энэ нь надад тохирохгүй байсан
Үүнтэй холбогдуулан би хайж эхэлсэн өөр хувилбарууд тэгээд оллоо! Селөдерей бүтээгчид, ялангуяа миний ойлгож байгаагаар
Мөн та харж болно
Бид юу хийх вэ?
Тиймээс, богино цуврал нийтлэлд би Фаустыг ашиглан далд ажлуудаас хэрхэн өгөгдөл цуглуулахыг харуулах болно. Бидний жишээ төслийн эх сурвалж нь нэрнээс нь харахад,
Жич Мониторингийн тухай санааг ямар итгэлтэйгээр бичсэнээс харахад сүүлийн нийтлэлийн төгсгөлд уншигчид иймэрхүү харагдах болно гэж би бодож байна.
Төслийн шаардлага
Би аль хэдийн амласан тул үйлчилгээ нь юу хийх боломжтой талаар жижиг жагсаалтыг гаргая:
- Үнэт цаас, тэдгээрийн тоймыг (сүүлийн жилийн ашиг, алдагдал, тайлан баланс, мөнгөн гүйлгээ зэрэг) байршуулах - тогтмол
- Түүхэн мэдээллийг байршуулах (арилжааны жил бүрийн хувьд арилжааны хаалтын үнийн хэт утгыг олох) - тогтмол
- Хамгийн сүүлийн үеийн арилжааны өгөгдлийг байнга байршуулах
- Аюулгүй байдал тус бүрийн шалгуур үзүүлэлтийн жагсаалтыг тогтмол байршуулах
Хүлээгдэж буйгаар бид төслийн нэрийг эхнээс нь сонгоно: хортон
Бид дэд бүтцийг нь бэлдэж байна
Гарчиг нь мэдээж хүчтэй боловч та хийх ёстой зүйл бол 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