Ez çawa hatim ku bi vî rengî bijîm?
Demek berê ez neçar bûm ku li ser pişta projeyek pir barkirî bixebitim, ku tê de hewce bû ku bi rêkûpêk pêkanîna hejmareke mezin ji karên paşerojê bi hesabên tevlihev û daxwazên ji bo karûbarên sêyemîn organîze bikim. Proje asynkron e û berî ku ez bêm, mekanîzmayek wê ya hêsan bû ji bo peywirên destpêkirina kronan: xelekek ku dema heyî kontrol dike û komên kortînan bi riya berhevkirinê ve dimeşîne - ev nêzîkatî derket holê ku qebûl bû heya ku bi dehan û bi sedan kortûnên weha hebûn. Lêbelê, gava ku hejmara wan ji du hezarî derbas bû, ez neçar bûm ku li ser organîzekirina rêzek karekî normal bi brokerek, çend karker û hwd re bifikirim.
Pêşî min biryar da ku Celery, ku min berê bikar anîbû biceribînim. Ji ber xwezaya asynkron a projeyê, ez ketim nav pirsê û min dît
Ez ê vê yekê bibêjim, proje pir balkêş e û di serîlêdanên din ên tîmê me de bi rengek serketî dixebite, û nivîskar bixwe jî dibêje ku wî bi karanîna hewzek asynchronous karîbû wê di hilberînê de derxîne. Lê, mixabin, ew bi rastî ji min re ne xweş bû, wekî ku derket
Di vî warî de min dest bi lêgerînê kir alternatîf û dît! Afirînerên kerfesê, bi taybetî, wekî ku ez jê fêm dikim
Her weha, hûn dikarin bibînin
Em çi dikin?
Ji ber vê yekê, di rêzek kurt a gotaran de, ez ê nîşanî we bidim ka meriv çawa bi karanîna Faust daneyan ji peywirên paşîn berhev dike. Çavkaniya projeya me ya nimûne dê bibe, wekî ku ji navê xwe diyar dike,
PS Li gorî pêbaweriya ku xala li ser çavdêriyê hatî nivîsandin dadbar dikim, ez difikirim ku xwendevan di dawiya gotara paşîn de dê hîn jî tiştek wusa xuya bike:
Pêdiviyên projeyê
Ji ber rastiya ku min berê jî soz daye, bila navnîşek piçûk a ku karûbar divê karibe bike çêbikin:
- Ewlekariyê û nerînek li ser wan barkirin (di nav de qezenc û zirar, bîlanço, herikîna drav - ji bo sala borî) - bi rêkûpêk
- Daneyên dîrokî barkirin (ji bo her salek bazirganiyê, nirxên giran ên bihayê girtina bazirganiyê bibînin) - bi rêkûpêk
- Daneyên bazirganiyê yên herî dawî barkirin - bi rêkûpêk
- Ji bo her ewlehiyê navnîşek xwerû ya nîşanan barkirin - bi rêkûpêk
Wekî ku tê hêvî kirin, em ji nû ve navek ji bo projeyê hilbijêrin: Horton
Em binesaziyê amade dikin
Sernav bê guman xurt e, di heman demê de, ya ku divê hûn bikin ev e ku ji bo docker-compose bi kafka (û zookeeper - di yek konteynerê de), kafdrop (heke em dixwazin li peyaman di mijaran de binihêrin), mongodb vesaziyek piçûk binivîsin. Em distînin [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
Li vir qet tiştek tevlihev tune. Du guhdar ji bo kafka hatin ragihandin: yek (hundirîn) ji bo karanîna di hundurê tora pêkhatî de, û ya duyemîn (derveyî) ji bo daxwazên ji derve, ji ber vê yekê wan ew li derve şandin. 2181 - bendera zookparêz. Ya mayî, ez difikirim, zelal e.
Amadekirina îskeleta projeyê
Di guhertoya bingehîn de, avahiya projeya me divê bi vî rengî xuya bike:
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 *
*Her tiştê ku min destnîşan kir Em hê dest nadin wê, em tenê pelên vala çêdikin.**
Me avahiyek çêkir. Naha em pêwendiyên pêwîst lê zêde bikin, vesazkirinê binivîsin û bi mongodb ve girêbidin. Ez ê di gotarê de nivîsa tevahî pelan peyda nekim, da ku dereng nemînim, lê ez ê girêdanên guhertoyên pêwîst peyda bikim.
Ka em bi girêdan û meta di derbarê projeyê de dest pê bikin -
Dûv re, em dest bi sazkirina girêdanan dikin û virtualenv diafirînin (an jî hûn dikarin peldanka venv bi xwe biafirînin û jîngehê çalak bikin):
pip3 install poetry (если ещё не установлено)
poetry install
Niha em biafirînin
Dema ku bi Mongo ve girêdayî ye, her tişt pir hêsan e. ragihand
Dê paşê çi bibe?
Gotar ne pir dirêj e, ji ber ku li vir ez tenê behsa motîvasyon û amadekariyê dikim, ji ber vê yekê min sûcdar nekin - ez soz didim ku beşa paşîn dê çalak û grafîk be.
Ji ber vê yekê, di vê beşa paşîn de em:
- Ka em ji bo alphavantage xerîdarek piçûk li aiohttp bi daxwazên xalên dawî yên ku em hewce ne binivîsin.
- Ka em ajanek biafirînin ku dê ji wan re daneyên li ser ewlekarî û bihayên dîrokî berhev bike.
Source: www.habr.com