Faust တွင် နောက်ခံလုပ်ဆောင်စရာများ၊ အပိုင်း ၁- နိဒါန်း

Faust တွင် နောက်ခံလုပ်ဆောင်စရာများ၊ အပိုင်း ၁- နိဒါန်း

ဒီလိုမျိုး ဘဝကို ဘယ်လိုအဆုံးသတ်ခဲ့တာလဲ။

မကြာသေးမီက ကျွန်ုပ်သည် ရှုပ်ထွေးသော တွက်ချက်မှုများနှင့် ပြင်ပကုမ္ပဏီဝန်ဆောင်မှုများအတွက် တောင်းဆိုမှုများနှင့်အတူ များပြားလှသော နောက်ခံအလုပ်များကို ပုံမှန်လုပ်ဆောင်ရန် လိုအပ်သော မြင့်မားသော loaded ပရောဂျက်တစ်ခု၏ နောက်ကွယ်တွင် အလုပ်လုပ်ခဲ့ရသည်။ ပရောဂျက်သည် တစ်ပြိုင်နက်တည်းဖြစ်ပြီး ကျွန်ုပ်မလာမီတွင်၊ ၎င်းတွင် cron- launching လုပ်ဆောင်စရာများအတွက် ရိုးရှင်းသော ယန္တရားတစ်ခုပါရှိသည်- လက်ရှိအချိန်ကို စစ်ဆေးခြင်းနှင့် စုရုံးခြင်းမှတစ်ဆင့် coroutines အဖွဲ့များကို စတင်ခြင်း - ဤနည်းလမ်းသည် ဒါဇင်နှင့်ချီသော အကျင့်ရိုးထုံးစံများအထိ လက်ခံနိုင်ဖွယ်ဖြစ်လာပါသည်။ ဒါပေမယ့် သူတို့ရဲ့ အရေအတွက်က နှစ်ထောင်ကျော်သွားတဲ့အခါ ပွဲစား၊ အလုပ်သမားများစွာနဲ့ ပုံမှန်အလုပ်တန်းစီဖို့ စဉ်းစားခဲ့ရတယ်။

အရင်သုံးဖူးတဲ့ ဆလရီကို စမ်းကြည့်ဖို့ ဆုံးဖြတ်လိုက်တယ်။ ပရောဂျက်၏ တပြိုင်နက်တည်း သဘောသဘာဝကြောင့်၊ မေးခွန်းထဲသို့ စေ့စေ့ငုကြည့်မိသည်။ ဆောင်းပါး, လည်းပဲ စီမံကိန်း၏ဆောင်းပါးရေးသားသူမှဖန်တီးခဲ့သည်။

ဒါကိုပြောရမယ်၊ ဒီပရောဂျက်က အရမ်းစိတ်ဝင်စားစရာကောင်းပြီး ကျွန်တော်တို့အဖွဲ့ရဲ့ တခြား applications တွေမှာလည်း အောင်မြင်စွာ လုပ်ဆောင်နိုင်ခဲ့ပြီး၊ စာရေးသူကိုယ်တိုင်က asynchronous pool ကို အသုံးပြုပြီး ထုတ်လုပ်နိုင်ခဲ့တယ်လို့ ဆိုပါတယ်။ ဒါပေမယ့် ကံမကောင်းစွာပဲ၊ အဲဒါက ကျွန်မနဲ့ တကယ်ကို မကိုက်ညီပါဘူး။ ပြဿနာ အလုပ်များကို အဖွဲ့လိုက်စတင်ခြင်းဖြင့် (ကြည့်ပါ။ အုပ်စု) စာရေးနေချိန် ထုတ်ပြန်သည် ပိတ်ထားပေမယ့် အလုပ်က တစ်လလောက်ရှိပြီ။ မည်သို့ပင်ဆိုစေ၊ lib တွင်အလုပ်လုပ်နေပြီဖြစ်သောကြောင့် စာရေးသူနှင့်အားလုံး ကံကောင်းပါစေ... ယေဘုယျအားဖြင့် အချက်မှာ ကျွန်ုပ်အတွက်ဖြစ်ပြီး tool သည် ကျွန်ုပ်အတွက် စိုစွတ်နေပါသည်။ ထို့အပြင်၊ အချို့သောလုပ်ငန်းဆောင်တာများသည် မတူညီသောဝန်ဆောင်မှုများအတွက် 2-3 http တောင်းဆိုမှုများရှိပါသည်၊ ထို့ကြောင့် အလုပ်များကိုအကောင်းဆုံးဖြစ်အောင်လုပ်ဆောင်သည့်အခါတွင်ပင်၊ ခန့်မှန်းခြေအားဖြင့် 4 နာရီတိုင်း TCP ချိတ်ဆက်မှုပေါင်း 2 ကိုဖန်တီးပေးပါသည်။ - အမျိုးအစားတစ်ခုအတွက် session တစ်ခုဖန်တီးလိုပါသည်။ အလုပ်သမားများစတင်သောအခါတာဝန်။ aiohttp မှတဆင့်တောင်းဆိုမှုအများအပြားအကြောင်းအနည်းငယ်ပို ဒီမှာ.

ဒီကိစ္စနဲ့ ပတ်သက်ပြီးတော့ ကျနော်က စပြီးရှာတယ်။ အခြားနည်းလမ်းများ တွေ့ပြီ! အထူးသဖြင့် ငါနားလည်သလောက် တရုတ်နံနံကို ဖန်တီးသူတွေ Solem ကိုမေးပါ။, ဖန်တီးခဲ့သည်။ Faustပရောဂျက်အတွက်မူလဖြစ်သည်။ ရော်ဘင်ဟုဒ်. Faust ကို Kafka Streams မှ မှုတ်သွင်းထားပြီး Kafka သည် ပွဲစားတစ်ဦးအနေဖြင့် လုပ်ဆောင်ပြီး အေးဂျင့်များ၏ အလုပ်မှရလဒ်များကို သိမ်းဆည်းရန် rocksdb ကို အသုံးပြုထားပြီး အရေးကြီးဆုံးအချက်မှာ စာကြည့်တိုက်သည် အဆက်မပြတ်ဖြစ်နေခြင်းပင်ဖြစ်သည်။

ဒါ့အပြင် သင်ကြည့်ရှုနိုင်ပါတယ်။ အမြန်နှိုင်းယှဉ် နောက်ပိုင်းဖန်တီးသူများထံမှ တရုတ်နံနံနှင့် faust- ၎င်းတို့၏ ကွာခြားချက်များ၊ ပွဲစားများကြား ကွာခြားချက်များ၊ မူလလုပ်ငန်းတာဝန်ကို အကောင်အထည်ဖော်ခြင်း။ အရာအားလုံးသည်အတော်လေးရိုးရှင်းသော်လည်း၊ faust တွင်ကောင်းမွန်သောအင်္ဂါရပ်တစ်ခုသည်အကြောင်းအရာသို့ကူးစက်ရန်အတွက်ရိုက်ထည့်ထားသောဒေတာကိုအာရုံစိုက်စေသည်။

ငါတို့ဘာလုပ်ကြမလဲ?

ထို့ကြောင့်၊ ဆောင်းပါးတိုတိုလေးတွင် Faust ကို အသုံးပြု၍ နောက်ခံအလုပ်များမှ ဒေတာစုဆောင်းနည်းကို သင်ပြပါမည်။ ကျွန်ုပ်တို့၏နမူနာပရောဂျက်အတွက် ရင်းမြစ်သည် အမည်ဖော်ပြသည့်အတိုင်း ဖြစ်လိမ့်မည်။ alphavantage.co. အေးဂျင့်များ (နစ်၊ အကြောင်းအရာများ၊ အခန်းကန့်များ)၊ ပုံမှန် (cron) လုပ်ဆောင်ပုံ၊ အဆင်ပြေဆုံး faust cli commands (wrapper over click)၊ ရိုးရှင်းသောအစုအဝေးများကို သရုပ်ပြမည်ဖြစ်ပြီး၊ အဆုံးတွင် datadog (သို့) ပူးတွဲပါရှိပါမည်။ box မှအလုပ်လုပ်သည်) တစ်ခုခုကိုမြင်ရန်ကြိုးစားပါ။ စုဆောင်းထားသော ဒေတာများကို သိမ်းဆည်းရန်အတွက် ချိတ်ဆက်ရန်အတွက် mongodb နှင့် motor ကို အသုံးပြုပါမည်။

PS စောင့်ကြည့်လေ့လာခြင်းဆိုင်ရာအချက်ကို ရေးထားသည့်ယုံကြည်ချက်ဖြင့် အကဲဖြတ်ရာတွင် နောက်ဆုံးဆောင်းပါး၏အဆုံးတွင် စာဖတ်သူသည် ဤကဲ့သို့ဖြစ်နေမည်ထင်ပါသည်။

Faust တွင် နောက်ခံလုပ်ဆောင်စရာများ၊ အပိုင်း ၁- နိဒါန်း

စီမံကိန်းလိုအပ်ချက်များ

ကျွန်ုပ်ကတိပေးထားပြီးဖြစ်သည့်အချက်ကြောင့်၊ ဝန်ဆောင်မှုပေးသင့်သည်များကို စာရင်းအသေးစိတ်လုပ်ကြည့်ရအောင်။

  1. ငွေချေးစာချုပ်များ အပ်လုဒ်တင်ခြင်းနှင့် ၎င်းတို့၏ ခြုံငုံသုံးသပ်ချက် (အမြတ်အစွန်းများ၊ လက်ကျန်ရှင်းတမ်း၊ ငွေသားစီးဆင်းမှု - ပြီးခဲ့သည့်နှစ်အတွက်) - ပုံမှန်
  2. သမိုင်းဒေတာကို အပ်လုဒ်လုပ်ပါ (ကုန်သွယ်နှစ်တစ်ခုစီအတွက်၊ အရောင်းအပိတ်ဈေး၏ လွန်ကဲသောတန်ဖိုးများကို ရှာဖွေပါ) - ပုံမှန်
  3. နောက်ဆုံးပေါ်ကုန်သွယ်ဒေတာကို ပုံမှန်တင်ပါ။
  4. လုံခြုံရေးတစ်ခုစီအတွက် စိတ်ကြိုက်ညွှန်းကိန်းများစာရင်းကို အပ်လုဒ်လုပ်ပါ - ပုံမှန်

မျှော်လင့်ထားသည့်အတိုင်း၊ ကျွန်ုပ်တို့သည် ပရောဂျက်အတွက် အမည်တစ်ခုကို အစမှစ၍ ရွေးချယ်သည်- ဟော်တန်

အခြေခံအဆောက်အအုံတွေ ပြင်ဆင်နေတယ်။

ခေါင်းစဉ်သည် သေချာပေါက် ခိုင်မာသော်လည်း၊ သင်လုပ်ရန်လိုအပ်သည်မှာ kafka (နှင့် zookeeper - ကွန်တိန်နာတစ်ခုတွင်)၊ kafdrop (ကျွန်ုပ်တို့၏အကြောင်းအရာများကိုကြည့်လိုပါက) mongodb ဖြင့် docker-compose အတွက် အသေးစား config တစ်ခုရေးပါ။ ကျွန်တော်တို [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/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

ဤနေရာတွင် လုံးဝရှုပ်ထွေးမှု မရှိပါ။ နားထောင်သူ နှစ်ဦးကို kafka အတွက် ကြေညာထားသည်- တစ်ခု (အတွင်းပိုင်း) ပေါင်းစပ်ကွန်ရက်အတွင်း အသုံးပြုရန်၊ နှင့် ဒုတိယ (ပြင်ပ) မှ ပြင်ပမှ တောင်းဆိုမှုများအတွက် ၎င်းတို့သည် အပြင်သို့ ထပ်ဆင့်ပို့လိုက်ပါသည်။ 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 *

*ငါမှတ်သားထားသမျှ အဲဒါကို မထိရသေးဘူး၊ အလွတ်ဖိုင်တွေပဲ ဖန်တီးတယ်။**

ကျွန်တော်တို့က ဖွဲ့စည်းပုံကို ဖန်တီးတယ်။ ယခု လိုအပ်သော မှီခိုမှုများကို ပေါင်းထည့်ကာ config ကိုရေးပြီး mongodb သို့ ချိတ်ဆက်ကြပါစို့။ ကျွန်ုပ်သည် ဆောင်းပါးရှိ ဖိုင်များ၏ စာသားအပြည့်အစုံကို ပေးမည်မဟုတ်သောကြောင့် ၎င်းကိုနှောင့်နှေးစေရန်အတွက် လိုအပ်သောဗားရှင်းများသို့ လင့်ခ်များကို ပေးပါမည်။

ပရောဂျက်အကြောင်း မှီခိုမှုနှင့် meta တို့ဖြင့် စတင်ကြပါစို့။ pyproject.toml

ထို့နောက်၊ ကျွန်ုပ်တို့သည် မှီခိုအားထားမှုကို စတင်ထည့်သွင်းပြီး virtualenv တစ်ခုကို ဖန်တီးခြင်း (သို့မဟုတ် သင်ကိုယ်တိုင် venv ဖိုင်တွဲကို ဖန်တီးပြီး ပတ်ဝန်းကျင်ကို အသက်သွင်းနိုင်သည်)။

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

အခုဖန်တီးလိုက်ရအောင် config.yml - အထောက်အထားများနှင့် ခေါက်ရမည့်နေရာ။ ထိုနေရာတွင် alphavantage အတွက် ဒေတာကို သင် ချက်ချင်း နေရာချနိုင်ပါသည်။ ကောင်းပြီ၊ ဆက်သွားကြရအောင် config.py - ကျွန်ုပ်တို့၏ config မှ အပလီကေးရှင်းအတွက် ဒေတာကို ထုတ်ယူပါ။ ဟုတ်ကဲ့ ကျွန်တော် ဝန်ခံပါတယ် ကျွန်တော် Lib ကို သုံးပါတယ် sitri.

Mongo နှင့်ချိတ်ဆက်သောအခါ၊ အရာအားလုံးသည်အတော်လေးရိုးရှင်းသည်။ ကြေငြာခဲ့သည်။ client အတန်း ချိတ်ဆက်ရန်နှင့် အခြေခံလူတန်းစား cruds အတွက်၊ စုဆောင်းမှုများအပေါ် စုံစမ်းမေးမြန်းရန် ပိုမိုလွယ်ကူစေရန်။

နောက်ဘာဆက်ဖြစ်မလဲ။

ဆောင်းပါးက သိပ်မရှည်ပါဘူး၊ ဒီနေရာမှာ ကျွန်တော်က စိတ်အားထက်သန်မှုနဲ့ ပြင်ဆင်မှုအကြောင်းပဲ ပြောနေတာဖြစ်တဲ့အတွက်ကြောင့် အပြစ်မတင်ပါနဲ့ - နောက်အပိုင်းမှာ လုပ်ဆောင်ချက်နဲ့ ဂရပ်ဖစ်ပါမယ်လို့ ကတိပေးပါတယ်။

ဒီတော့ ဒီနောက်အပိုင်းမှာ၊

  1. ကျွန်ုပ်တို့လိုအပ်သော အဆုံးမှတ်များအတွက် တောင်းဆိုမှုများဖြင့် aiohttp တွင် alphavantage အတွက် သေးငယ်သော client တစ်ခုကို ရေးကြပါစို့။
  2. ၎င်းတို့အတွက် ငွေချေးစာချုပ်များနှင့် သမိုင်းဝင်စျေးနှုန်းများဆိုင်ရာ အချက်အလက်များကို စုဆောင်းမည့် ကိုယ်စားလှယ်တစ်ဦးကို ဖန်တီးကြပါစို့။

ပရောဂျက်ကုဒ်

ဤအပိုင်းအတွက် ကုဒ်

source: www.habr.com

မှတ်ချက် Add