Ọrụ ndabere na Faust, Nkebi nke Mbụ: Okwu Mmalite

Ọrụ ndabere na Faust, Nkebi nke Mbụ: Okwu Mmalite

Olee otú m si bie ndụ otú a?

N'oge na-adịbeghị anya, m na-arụ ọrụ na backend nke a ukwuu kwajuru oru ngo, nke ọ dị mkpa iji hazie mgbe ogbugbu nke a nnukwu ọnụ ọgụgụ nke ndabere aga-eme na mgbagwoju mgbako na arịrịọ maka ndị ọzọ ọrụ. Ihe oru ngo a asynchronous na tupu m abịa, o nwere usoro dị mfe maka ọrụ cron-launching: loop na-enyocha oge dị ugbu a na ịmepụta otu coroutines site na ikpokọta - usoro a wee bụrụ nke a na-anabata ruo mgbe enwere ọtụtụ iri na narị narị ndị dị otú ahụ. Otú ọ dị, mgbe ọnụ ọgụgụ ha karịrị puku abụọ, aghaghị m iche echiche banyere ịhazi kwụ n'ahịrị ọrụ nkịtị na onye na-ere ahịa, ọtụtụ ndị ọrụ, na ihe ndị ọzọ.

Mbụ m kpebiri ịnwale Celery, nke m na-ejibu. N'ihi ọdịdị asynchronous nke ọrụ ahụ, etinyere m n'ime ajụjụ ahụ wee hụ ederede, na ọrụ ahụ, nke onye dere edemede ahụ kere.

M ga-ekwu nke a, oru ngo ahụ na-adọrọ mmasị ma na-arụ ọrụ nke ọma na ngwa ndị ọzọ nke otu anyị, na onye edemede n'onwe ya na-ekwu na ya nwere ike ibugharị ya na mmepụta site na iji ọdọ mmiri asynchronous. Ma, dị mwute ikwu, ọ dabara m n'ezie, dị ka ọ tụgharịrị nsogbu ahụ site na mmalite otu ọrụ (lee. otu). N'oge ederede nke emechielarị, mana ọrụ na-aga n'ihu otu ọnwa. N'ọnọdụ ọ bụla, jisie ike nye onye edemede na ihe niile kachasị mma, ebe ọ bụ na enweelarị ihe na-arụ ọrụ na lib ... n'ozuzu, isi ihe dị n'ime m na ngwá ọrụ ahụ wee ghọọ m. Tụkwasị na nke a, ụfọdụ ọrụ nwere arịrịọ 2-3 http maka ọrụ dị iche iche, ya mere, ọbụna mgbe ị na-arụ ọrụ kachasị mma, anyị na-emepụta njikọ 4 puku TCP, dịka ọ bụla awa 2 - adịghị mma nke ukwuu ... Ọ ga-amasị m ịmepụta nnọkọ maka otu ụdị. ọrụ mgbe ịmalitere ndị ọrụ. Obere ntakịrị gbasara ọnụ ọgụgụ buru ibu nke arịrịọ site aiohttp ebe a.

N'akụkụ a, m malitere ile anya uzo ozo wee chọta ya! Ndị na-emepụta celery, kpọmkwem, dịka m ghọtara ya Jụọ Solem, e kere nwetaghachi, mbụ maka oru ngo robinụ. Faust sitere n'ike mmụọ nsọ Kafka Streams ma na-arụ ọrụ na Kafka dị ka onye na-ere ahịa, rocksdb na-ejikwa echekwa nsonaazụ sitere na ọrụ ndị ọrụ, na ihe kachasị mkpa bụ na ọbá akwụkwọ ahụ enweghị atụ.

Ọzọkwa, ị nwere ike ile anya ntụnyere nkenke celery na faust sitere na ndị okike nke ikpeazụ: ọdịiche ha, ọdịiche dị n'etiti ndị na-ere ahịa, mmejuputa ọrụ elementrị. Ihe niile dị nnọọ mfe, Otú ọ dị, ihe mara mma na faust na-adọta mmasị - data pịnyere maka nnyefe na isiokwu ahụ.

Gịnị ka anyị na-eme?

Yabụ, n'ime akụkọ dị mkpirikpi, m ga-egosi gị otu esi enweta data sitere na ọrụ ndabere site na iji Faust. Isi mmalite maka ihe atụ anyị ga-abụ, dị ka aha na-egosi, alfavantage.co. M ga-egosi otú e si ede ndị ọrụ (sink, isiokwu, partitions), otú e si eme mgbe (cron) ogbugbu, ndị kasị adaba faust cli iwu (a wrapper over click), mfe clustering, na na njedebe anyị ga-etinye a datadog ( na-arụ ọrụ site na igbe) ma gbalịa ka ị hụ ihe. Iji chekwaa data anakọtara anyị ga-eji mongodb na moto maka njikọ.

PS Na-ekpe ikpe site na obi ike nke e dere isi ihe banyere nlekota oru, echere m na onye na-agụ na njedebe nke isiokwu gara aga ka ga-ele anya dị ka nke a:

Ọrụ ndabere na Faust, Nkebi nke Mbụ: Okwu Mmalite

Ihe oru ngo chọrọ

N'ihi na m kwere nkwa, ka anyị mee obere ndepụta nke ihe ọrụ kwesịrị inwe ike ime:

  1. Bulite ihe nchekwa na nyocha nke ha (gụnyere uru na mfu, akwụkwọ nguzozi, usoro ego - maka afọ gara aga) - mgbe niile.
  2. Bulite data akụkọ ihe mere eme (maka afọ azụmaahịa ọ bụla, chọta oke uru nke ọnụ ahịa mmechi nke azụmaahịa) - mgbe niile
  3. Bulite data azụmaahịa kacha ọhụrụ - mgbe niile
  4. Bulite ndepụta ahaziri ahazi maka nchekwa ọ bụla - mgbe niile

Dị ka a tụrụ anya, anyị na-ahọrọ aha maka ọrụ ahụ site na mmalite: horton

Anyị na-akwado akụrụngwa

Aha ahụ siri ike, agbanyeghị, naanị ihe ị ga - eme bụ dee obere nhazi maka docker - compose na kafka (na zookeeper - n'otu akpa), kafdrop (ọ bụrụ na anyị chọrọ ilele ozi na isiokwu), mongodb. Anyị na-enweta [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) nke ụdị a:

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

Ọ dịghị ihe mgbagwoju anya ebe a ma ọlị. Ekwuwapụtara ndị na-ege ntị abụọ maka kafka: otu (n'ime) maka iji n'ime netwọk mejupụtara, na nke abụọ (mpụga) maka arịrịọ sitere n'èzí, ya mere ha zigara ya n'èzí. 2181 - ọdụ ụgbọ mmiri zookeeper. Ndị ọzọ, echere m, doro anya.

Ịkwadebe ọkpụkpụ nke ọrụ ahụ

N'ụdị nke isi, nhazi nke ọrụ anyị kwesịrị ịdị ka nke a:

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 *

*Ihe niile m kwuru Anyị emetụghị ya aka, anyị na-emepụta faịlụ efu.**

Anyị kere ihe owuwu. Ugbu a, ka anyị tinye ihe ndabere dị mkpa, dee nhazi wee jikọọ na mongodb. Agaghị m enye nkọwa zuru ezu nke faịlụ ndị dị na isiokwu ahụ, ka ọ ghara igbu oge, mana m ga-enye njikọ na nsụgharị ndị dị mkpa.

Ka anyị bido na ịdabere na meta gbasara ọrụ a - pyproject.toml

Ọzọ, anyị na-amalite ịwụnye ndabere na ịmepụta virtualenv (ma ọ bụ ị nwere ike ịmepụta folda venv n'onwe gị wee rụọ ọrụ gburugburu):

pip3 install poetry (если ещё не установлено)
poetry install

Ugbu a ka anyị mepụta nhazi.yml - nzere na ebe ịkụ aka. Ị nwere ike idowe data maka mkpụrụedemede ozugbo ebe ahụ. Ọfọn, ka anyị gaa n'ihu nhazi.py - wepụ data maka ngwa site na nhazi anyị. Ee, m na-ekwupụta, ejiri m lib m - sitri.

Mgbe ị na-ejikọ na Mongo, ihe niile dị nnọọ mfe. ekwuputala klas ndị ahịa jikọọ na isi klas maka croods, ka ọ dị mfe ime ajụjụ na mkpokọta.

Gịnị ga-eme ọzọ?

Akụkọ ahụ adịchaghị ogologo, ebe ọ bụ na ebe a ka m na-ekwu maka mkpali na nkwadebe, yabụ atala m ụta - M na-ekwe nkwa na akụkụ nke ọzọ ga-enwe ihe omume na eserese.

Ya mere, n'akụkụ a nke na-esote anyị:

  1. Ka anyị dee obere onye ahịa maka mkpụrụedemede na aiohttp yana arịrịọ maka njedebe njedebe anyị chọrọ.
  2. Ka anyị mepụta onye nnọchi anya ga-anakọta data gbasara nchekwa na ọnụ ahịa akụkọ ihe mere eme maka ha.

Koodu oru ngo

Koodu maka akụkụ a

isi: www.habr.com

Tinye a comment