Faust මත පසුබිම් කාර්යයන්, I කොටස: හැඳින්වීම

Faust මත පසුබිම් කාර්යයන්, I කොටස: හැඳින්වීම

මට මෙහෙම ජීවත් වෙන්න ආවේ කොහොමද?

බොහෝ කලකට පෙර මට අධික ලෙස පටවන ලද ව්‍යාපෘතියක පසුබිම මත වැඩ කිරීමට සිදු වූ අතර, එහි සංකීර්ණ ගණනය කිරීම් සහ තෙවන පාර්ශවීය සේවාවන් සඳහා වන ඉල්ලීම් සමඟ පසුබිම් කාර්යයන් විශාල සංඛ්‍යාවක් නිතිපතා ක්‍රියාත්මක කිරීම සංවිධානය කිරීම අවශ්‍ය විය. ව්‍යාපෘතිය අසමමුහුර්ත වන අතර මා පැමිණීමට පෙර එහි ක්‍රෝන් දියත් කිරීමේ කාර්යයන් සඳහා සරල යාන්ත්‍රණයක් තිබුණි: වත්මන් වේලාව පරීක්ෂා කිරීම සහ එකතු කිරීම හරහා coroutines කණ්ඩායම් දියත් කිරීම ලූපයක් - එවැනි coroutines දුසිම් ගණනක් සහ සිය ගණනක් සිටින තෙක් මෙම ප්‍රවේශය පිළිගත හැකි විය. , කෙසේ වෙතත්, ඔවුන්ගේ සංඛ්යාව දෙදහස ඉක්මවා ගිය විට, තැරැව්කරුවකු, කම්කරුවන් කිහිප දෙනෙකු සමඟ සාමාන්ය කාර්ය පෝලිමක් සංවිධානය කිරීම ගැන සිතා බැලීමට සිදු විය.

මුලින්ම මම කලින් භාවිතා කළ සැල්දිරි අත්හදා බැලීමට තීරණය කළා. ව්‍යාපෘතියේ අසමමුහුර්ත ස්වභාවය නිසා මම ප්‍රශ්නයට කිමිදී බැලුවෙමි ලිපිය, එසේම ව්‍යාපෘතිය, ලිපියේ කතුවරයා විසින් නිර්මාණය කරන ලදී.

මම මෙය කියමි, ව්‍යාපෘතිය ඉතා සිත්ගන්නාසුළු වන අතර අපගේ කණ්ඩායමේ අනෙකුත් යෙදුම්වල තරමක් සාර්ථකව ක්‍රියා කරන අතර කතුවරයාම පවසන්නේ අසමමුහුර්ත සංචිතයක් භාවිතා කිරීමෙන් එය නිෂ්පාදනයට පෙරළීමට ඔහුට හැකි වූ බවයි. එහෙත්, අවාසනාවකට මෙන්, එය මට ගැලපෙන්නේ නැත ගැටලුව කණ්ඩායම් දියත් කිරීමේ කාර්යයන් සමඟ (බලන්න. සමූහය) ලියන මොහොතේ නිකුත් කිරීම දැනටමත් වසා ඇත, කෙසේ වෙතත්, වැඩ මාසයක් තිස්සේ සිදුවෙමින් පවතී. ඕනෑම අවස්ථාවක, කතුවරයාට සුබ පැතුම් සහ සියලු සුභ පැතුම්, ලිබ් එකේ දැනටමත් වැඩ කරන දේවල් ඇති බැවින් ... පොදුවේ ගත් කල, කාරණය මා තුළ ඇති අතර මෙවලම මට තෙත් විය. මීට අමතරව, සමහර කාර්යයන් විවිධ සේවාවන් සඳහා 2-3 http ඉල්ලීම් තිබුනා, එබැවින් කාර්යයන් ප්‍රශස්ත කිරීමේදී පවා, අපි TCP සම්බන්ධතා 4 දහසක් සාදන්නෙමු, ආසන්න වශයෙන් සෑම පැය 2 කට වරක් - ඉතා හොඳ නැත ... මම එක් වර්ගයක් සඳහා සැසියක් නිර්මාණය කිරීමට කැමතියි. කම්කරුවන් ආරම්භ කිරීමේදී කාර්යය. aiohttp හරහා විශාල ඉල්ලීම් සංඛ්‍යාවක් ගැන තව ටිකක් මෙහි.

මේ සම්බන්ධයෙන්, මම සොයා බැලීමට පටන් ගත්තා විකල්ප සහ එය සොයා ගත්තා! සැල්දිරි වල නිර්මාතෘවරුන්, විශේෂයෙන්, මම තේරුම් ගත් පරිදි සොලෙම්ගෙන් අසන්න, නිර්මාණය කරන ලදී ෆාස්ට්, මුලින් ව්යාපෘතිය සඳහා රොබින් හුඩ්. Faust Kafka Streams වෙතින් ආභාෂය ලබා ඇති අතර Kafka සමඟ තැරැව්කරුවෙකු ලෙස ක්‍රියා කරයි, නියෝජිතයින්ගේ වැඩවලින් ලැබෙන ප්‍රතිඵල ගබඩා කිරීමට rocksdb ද භාවිතා කරයි, සහ වඩාත්ම වැදගත් දෙය වන්නේ පුස්තකාලය අසමමිතික වීමයි.

එසේම, ඔබට බැලිය හැකිය කෙටි සංසන්දනය පසුකාලීන නිර්මාණකරුවන්ගෙන් සැල්දිරි සහ ෆාස්ට්: ඔවුන්ගේ වෙනස්කම්, තැරැව්කරුවන් අතර වෙනස්කම්, මූලික කාර්යයක් ක්රියාත්මක කිරීම. සෑම දෙයක්ම තරමක් සරල ය, කෙසේ වෙතත්, Faust හි ඇති ලස්සන අංගයක් අවධානය ආකර්ෂණය කරයි - මාතෘකාවට සම්ප්රේෂණය සඳහා ටයිප් කළ දත්ත.

අපි මොකද කරන්නේ?

ඉතින්, කෙටි ලිපි මාලාවකින්, Faust භාවිතා කර පසුබිම් කාර්යයන් වලින් දත්ත එකතු කරන ආකාරය මම ඔබට පෙන්වන්නම්. අපගේ උදාහරණ ව්‍යාපෘතිය සඳහා මූලාශ්‍රය වනුයේ, නමට අනුව, alphavantage.co. මම නියෝජිතයන් ලියන ආකාරය (සින්ක්, මාතෘකා, කොටස්), නිතිපතා (ක්‍රෝන්) ක්‍රියාත්මක කරන්නේ කෙසේද, වඩාත් පහසු ෆාස්ට් ක්ලි විධාන (ක්ලික් කිරීම හරහා එතීම), සරල පොකුරු කිරීම සහ අවසානයේ අපි දත්ත ඩොග් එකක් අමුණන්නෙමි ( කොටුවෙන් පිටත වැඩ) සහ බැලීමට යමක් උත්සාහ කරන්න. එකතු කරන ලද දත්ත ගබඩා කිරීම සඳහා අපි සම්බන්ධ කිරීම සඳහා mongodb සහ මෝටර් භාවිතා කරන්නෙමු.

PS අධීක්‍ෂණය පිළිබඳ කාරණය ලියා ඇති විශ්වාසය අනුව විනිශ්චය කිරීම, පසුගිය ලිපියේ අවසානයේ පාඨකයා තවමත් මේ වගේ දෙයක් පෙනෙනු ඇතැයි මම සිතමි:

Faust මත පසුබිම් කාර්යයන්, I කොටස: හැඳින්වීම

ව්යාපෘති අවශ්යතා

මම දැනටමත් පොරොන්දු වී ඇති නිසා, සේවාවට කළ හැකි දේ පිළිබඳ කුඩා ලැයිස්තුවක් සාදන්න:

  1. සුරැකුම්පත් උඩුගත කිරීම සහ ඒවා පිළිබඳ දළ විශ්ලේෂණයක් (ලාභ හා අලාභ, ශේෂ පත්‍රය, මුදල් ප්‍රවාහය - පසුගිය වසර සඳහා) - නිතිපතා
  2. ඓතිහාසික දත්ත උඩුගත කරන්න (එක් එක් වෙළඳ වසර සඳහා, වෙළඳාමේ අවසාන මිලෙහි ආන්තික අගයන් සොයා ගන්න) - නිතිපතා
  3. නවතම වෙළඳ දත්ත උඩුගත කරන්න - නිතිපතා
  4. එක් එක් ආරක්ෂාව සඳහා අභිරුචි කළ දර්ශක ලැයිස්තුවක් උඩුගත කරන්න - නිතිපතා

අපේක්ෂා කළ පරිදි, අපි මුල සිට ව්‍යාපෘතිය සඳහා නමක් තෝරා ගනිමු: හෝටන්

අපි යටිතල පහසුකම් සකස් කරනවා

මාතෘකාව නිසැකවම ශක්තිමත් ය, කෙසේ වෙතත්, ඔබ කළ යුත්තේ kafka (සහ zookeeper - එක භාජනයක), kafdrop (අපට මාතෘකා වල පණිවිඩ බැලීමට අවශ්‍ය නම්), mongodb සමඟ docker-compose සඳහා කුඩා වින්‍යාසයක් ලිවීමයි. අපිට ලැබෙනවා [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

මෙහි කිසිසේත්ම සංකීර්ණ කිසිවක් නොමැත. කෆ්කා සඳහා සවන්දෙන්නන් දෙදෙනෙකු ප්‍රකාශ කරන ලදී: එකක් (අභ්‍යන්තර) සංයුක්ත ජාලය තුළ භාවිතා කිරීම සඳහා සහ දෙවැන්න (බාහිර) පිටතින් ඉල්ලීම් සඳහා, එබැවින් ඔවුන් එය පිටතට යොමු කරන ලදී. 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 වෙත සම්බන්ධ කරමු. ලිපියේ ලිපිගොනු වල සම්පූර්ණ පාඨය මම ලබා නොදෙනු ඇත, එය ප්රමාද නොකිරීමට, නමුත් මම අවශ්ය අනුවාද සඳහා සබැඳි ලබා දෙන්නෙමි.

ව්‍යාපෘතිය පිළිබඳ පරායත්තතා සහ මෙටා සමඟ ආරම්භ කරමු - pyproject.toml

මීළඟට, අපි පරායත්තයන් ස්ථාපනය කිරීම සහ virtualenv නිර්මාණය කිරීම ආරම්භ කරමු (නැතහොත් ඔබට venv ෆෝල්ඩරය ඔබම සාදා පරිසරය සක්‍රිය කළ හැක):

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

දැන් අපි නිර්මාණය කරමු config.yml - අක්තපත්‍ර සහ තට්ටු කළ යුතු ස්ථානය. ඔබට වහාම අක්ෂර සඳහා දත්ත එහි තැබිය හැකිය. හොඳයි, අපි ඉදිරියට යමු config.py - අපගේ වින්‍යාසයෙන් යෙදුම සඳහා දත්ත උපුටා ගන්න. ඔව්, මම පාපොච්චාරණය කරනවා, මම මගේ ලිබ් එක පාවිච්චි කළා - සිතිනි.

Mongo වෙත සම්බන්ධ වන විට, සියල්ල තරමක් සරල ය. නිවේදනය කළේය සේවාදායක පන්තිය සම්බන්ධ කිරීමට සහ මූලික පන්තිය cruds සඳහා, එකතු කිරීම් පිළිබඳ විමසීම් කිරීම පහසු කිරීම සඳහා.

ඊළඟට කුමක් සිදුවේද?

ලිපිය ඉතා දිගු නොවේ, මන්ද මෙහි මම කතා කරන්නේ අභිප්‍රේරණය සහ සූදානම ගැන පමණි, එබැවින් මට දොස් නොකියන්න - ඊළඟ කොටසේ ක්‍රියාව සහ ග්‍රැෆික්ස් ඇති බවට මම පොරොන්දු වෙමි.

ඉතින්, මෙම ඊළඟ කොටසේදී අපි:

  1. අපට අවශ්‍ය අන්ත ලක්ෂ්‍ය සඳහා ඉල්ලීම් සමඟ aiohttp හි alphavantage සඳහා කුඩා සේවාලාභියෙකු ලියමු.
  2. සුරැකුම්පත් සහ ඒවා සඳහා ඓතිහාසික මිල ගණන් පිළිබඳ දත්ත රැස් කරන නියෝජිතයෙකු නිර්මාණය කරමු.

ව්යාපෘති කේතය

මෙම කොටස සඳහා කේතය

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න