ஃபாஸ்டில் பின்னணி பணிகள், பகுதி I: அறிமுகம்

ஃபாஸ்டில் பின்னணி பணிகள், பகுதி I: அறிமுகம்

நான் எப்படி இப்படி வாழ வந்தேன்?

நீண்ட காலத்திற்கு முன்பு நான் மிகவும் ஏற்றப்பட்ட திட்டத்தின் பின்தளத்தில் வேலை செய்ய வேண்டியிருந்தது, இதில் சிக்கலான கணக்கீடுகள் மற்றும் மூன்றாம் தரப்பு சேவைகளுக்கான கோரிக்கைகளுடன் அதிக எண்ணிக்கையிலான பின்னணி பணிகளை வழக்கமான முறையில் செயல்படுத்துவது அவசியம். இந்த திட்டம் ஒத்திசைவற்றது மற்றும் நான் வருவதற்கு முன்பு, கிரான்-லான்சிங் பணிகளுக்கான எளிய வழிமுறையை இது கொண்டிருந்தது: தற்போதைய நேரத்தைச் சரிபார்த்து, சேகரிப்பு மூலம் கரோட்டின்களின் குழுக்களைத் தொடங்கும் ஒரு வளையம் - டஜன் கணக்கான மற்றும் இதுபோன்ற நூற்றுக்கணக்கான கரோட்டின்கள் இருக்கும் வரை இந்த அணுகுமுறை ஏற்றுக்கொள்ளத்தக்கதாக மாறியது. இருப்பினும், அவர்களின் எண்ணிக்கை இரண்டாயிரத்தைத் தாண்டியபோது, ​​ஒரு தரகர், பல தொழிலாளர்கள் மற்றும் பலருடன் ஒரு சாதாரண பணி வரிசையை ஏற்பாடு செய்வது பற்றி நான் சிந்திக்க வேண்டியிருந்தது.

முதலில் நான் முன்பு பயன்படுத்திய செலரியை முயற்சிக்க முடிவு செய்தேன். திட்டத்தின் ஒத்திசைவற்ற தன்மை காரணமாக, நான் கேள்வியில் மூழ்கி பார்த்தேன் ஒரு கட்டுரை, மற்றும் திட்டம், கட்டுரையின் ஆசிரியரால் உருவாக்கப்பட்டது.

நான் இதைச் சொல்வேன், இந்த திட்டம் மிகவும் சுவாரஸ்யமானது மற்றும் எங்கள் குழுவின் பிற பயன்பாடுகளில் மிகவும் வெற்றிகரமாக செயல்படுகிறது, மேலும் ஒரு ஒத்திசைவற்ற குளத்தைப் பயன்படுத்தி அதை உற்பத்தியில் உருட்ட முடிந்தது என்று ஆசிரியரே கூறுகிறார். ஆனால், துரதிர்ஷ்டவசமாக, அது எனக்குப் பொருந்தவில்லை, அது மாறியது ஒரு பிரச்சனை பணிகளின் குழு துவக்கத்துடன் (பார்க்க. குழு) எழுதும் நேரத்தில் பிரச்சினை ஏற்கனவே மூடப்பட்டுள்ளது, இருப்பினும், ஒரு மாதமாக பணிகள் நடந்து வருகின்றன. எப்படியிருந்தாலும், எழுத்தாளருக்கு நல்வாழ்த்துக்கள் மற்றும் அனைத்து நல்வாழ்த்துக்களும், லிப்பில் ஏற்கனவே வேலை செய்யும் விஷயங்கள் இருப்பதால்... பொதுவாக, புள்ளி என்னிடம் உள்ளது மற்றும் கருவி எனக்கு ஈரமாக மாறியது. கூடுதலாக, சில பணிகள் வெவ்வேறு சேவைகளுக்கு 2-3 http கோரிக்கைகளைக் கொண்டிருந்தன, எனவே பணிகளை மேம்படுத்தும் போது கூட, நாங்கள் 4 ஆயிரம் TCP இணைப்புகளை உருவாக்குகிறோம், தோராயமாக ஒவ்வொரு 2 மணிநேரமும் - மிகவும் நன்றாக இல்லை... ஒரு வகைக்கு ஒரு அமர்வை உருவாக்க விரும்புகிறேன். தொழிலாளர்களைத் தொடங்கும் போது பணி. aiohttp வழியாக அதிக எண்ணிக்கையிலான கோரிக்கைகளைப் பற்றி இன்னும் கொஞ்சம் இங்கே.

இது சம்பந்தமாக, நான் தேட ஆரம்பித்தேன் மாற்று மற்றும் அதை கண்டுபிடித்தேன்! செலரியை உருவாக்கியவர்கள், குறிப்பாக, நான் புரிந்துகொண்டபடி சோலமிடம் கேளுங்கள், உருவாக்கப்பட்டது ஃபாஸ்ட்டினுடைய, முதலில் திட்டத்திற்காக ராபின் ஹூட். ஃபாஸ்ட் காஃப்கா ஸ்ட்ரீம்களால் ஈர்க்கப்பட்டு, காஃப்காவுடன் ஒரு தரகராகப் பணிபுரிகிறார், ராக்ஸ்டிபி முகவர்களின் வேலையின் முடிவுகளைச் சேமிக்கவும் பயன்படுத்தப்படுகிறது, மேலும் மிக முக்கியமான விஷயம் என்னவென்றால், நூலகம் ஒத்திசைவற்றதாக உள்ளது.

மேலும், நீங்கள் பார்க்கலாம் சுருக்கமான ஒப்பீடு பிந்தைய படைப்பாளர்களிடமிருந்து செலரி மற்றும் ஃபாஸ்ட்: அவற்றின் வேறுபாடுகள், தரகர்களுக்கு இடையிலான வேறுபாடுகள், ஒரு அடிப்படை பணியை செயல்படுத்துதல். எல்லாம் மிகவும் எளிமையானது, இருப்பினும், ஃபாஸ்டில் ஒரு நல்ல அம்சம் கவனத்தை ஈர்க்கிறது - தலைப்புக்கு பரிமாற்றத்திற்கான தட்டச்சு தரவு.

நாம் என்ன செய்ய வேண்டும்?

எனவே, ஒரு குறுகிய கட்டுரைத் தொடரில், ஃபாஸ்டைப் பயன்படுத்தி பின்னணி பணிகளிலிருந்து தரவை எவ்வாறு சேகரிப்பது என்பதை நான் உங்களுக்குக் காண்பிப்பேன். எங்கள் உதாரணத் திட்டத்திற்கான ஆதாரம், பெயர் குறிப்பிடுவது போல, alphavantage.co. முகவர்களை எவ்வாறு எழுதுவது (மடு, தலைப்புகள், பகிர்வுகள்), வழக்கமான (கிரான்) செயலாக்கம், மிகவும் வசதியான ஃபாஸ்ட் கிளி கட்டளைகள் (கிளிக் மீது ஒரு ரேப்பர்), எளிய கிளஸ்டரிங் ஆகியவற்றை நான் நிரூபிப்பேன், இறுதியில் ஒரு டேட்டாடாக்கை இணைப்போம் ( பெட்டியின் வெளியே வேலை) மற்றும் பார்க்க ஏதாவது முயற்சி. சேகரிக்கப்பட்ட தரவைச் சேமிக்க, இணைப்பிற்கு mongodb மற்றும் மோட்டாரைப் பயன்படுத்துவோம்.

PS கண்காணிப்பு பற்றிய புள்ளி எழுதப்பட்ட நம்பிக்கையின் மூலம் ஆராயும்போது, ​​கடந்த கட்டுரையின் முடிவில் வாசகர் இன்னும் இப்படித்தான் இருப்பார் என்று நினைக்கிறேன்:

ஃபாஸ்டில் பின்னணி பணிகள், பகுதி I: அறிமுகம்

திட்ட தேவைகள்

நான் ஏற்கனவே உறுதியளித்ததன் காரணமாக, சேவை என்ன செய்ய வேண்டும் என்பதற்கான சிறிய பட்டியலை உருவாக்குவோம்:

  1. பத்திரங்களையும் அவற்றின் மேலோட்டத்தையும் பதிவேற்றவும் (லாபம் மற்றும் இழப்புகள், இருப்புநிலை, பணப்புழக்கம் - கடந்த ஆண்டிற்கான) - தொடர்ந்து
  2. வரலாற்றுத் தரவைப் பதிவேற்றவும் (ஒவ்வொரு வர்த்தக ஆண்டிற்கும், வர்த்தகத்தின் இறுதி விலையின் தீவிர மதிப்புகளைக் கண்டறியவும்) - தொடர்ந்து
  3. சமீபத்திய வர்த்தகத் தரவைப் பதிவேற்றவும் - தொடர்ந்து
  4. ஒவ்வொரு பாதுகாப்பிற்கான தனிப்பயனாக்கப்பட்ட குறிகாட்டிகளின் பட்டியலைப் பதிவேற்றவும் - தொடர்ந்து

எதிர்பார்த்தபடி, புதிதாக திட்டத்திற்கான பெயரை நாங்கள் தேர்வு செய்கிறோம்: ஹார்டன்

உள்கட்டமைப்புகளை தயார் செய்து வருகிறோம்

தலைப்பு நிச்சயமாக வலுவாக உள்ளது, இருப்பினும், நீங்கள் செய்ய வேண்டியதெல்லாம், காஃப்கா (மற்றும் ஜூகீப்பர் - ஒரு கொள்கலனில்), காஃப்ட்ராப் (நாங்கள் தலைப்புகளில் உள்ள செய்திகளைப் பார்க்க விரும்பினால்), mongodb உடன் டோக்கர்-கம்போஸ் செய்வதற்கு ஒரு சிறிய கட்டமைப்பை எழுத வேண்டும். நாம் பெறுகிறோம் [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 *

*நான் குறிப்பிட்ட அனைத்தும் நாங்கள் அதை இன்னும் தொடவில்லை, வெற்று கோப்புகளை உருவாக்குகிறோம்.**

நாங்கள் ஒரு கட்டமைப்பை உருவாக்கினோம். இப்போது தேவையான சார்புகளைச் சேர்த்து, கட்டமைப்பை எழுதி mongodb உடன் இணைப்போம். கட்டுரையில் உள்ள கோப்புகளின் முழு உரையையும் நான் வழங்கமாட்டேன், அதனால் தாமதிக்க வேண்டாம், ஆனால் தேவையான பதிப்புகளுக்கான இணைப்புகளை வழங்குவேன்.

திட்டத்தைப் பற்றிய சார்புகள் மற்றும் மெட்டாவுடன் ஆரம்பிக்கலாம் - pyproject.toml

அடுத்து, சார்புகளை நிறுவி ஒரு virtualenv ஐ உருவாக்கத் தொடங்குகிறோம் (அல்லது venv கோப்புறையை நீங்களே உருவாக்கி சூழலைச் செயல்படுத்தலாம்):

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

இப்போது உருவாக்குவோம் config.yml - நற்சான்றிதழ்கள் மற்றும் எங்கு தட்டுவது. எழுத்துக்களுக்கான தரவை நீங்கள் உடனடியாக அங்கு வைக்கலாம். சரி, நாம் செல்லலாம் config.py - எங்கள் கட்டமைப்பிலிருந்து பயன்பாட்டிற்கான தரவைப் பிரித்தெடுக்கவும். ஆம், நான் ஒப்புக்கொள்கிறேன், நான் என் லிப் பயன்படுத்தினேன் - sitri.

மோங்கோவுடன் இணைக்கும்போது, ​​​​எல்லாம் மிகவும் எளிமையானது. அறிவித்தார் வாடிக்கையாளர் வர்க்கம் இணைக்க மற்றும் அடிப்படை வகுப்பு cruds க்கான, சேகரிப்புகளில் வினவல்களை எளிதாக்குவதற்கு.

அடுத்து என்ன நடக்கும்?

கட்டுரை மிக நீளமாக இல்லை, ஏனெனில் இங்கே நான் உந்துதல் மற்றும் தயாரிப்பைப் பற்றி மட்டுமே பேசுகிறேன், எனவே என்னைக் குறை சொல்லாதீர்கள் - அடுத்த பகுதியில் நடவடிக்கை மற்றும் கிராபிக்ஸ் இருக்கும் என்று நான் உறுதியளிக்கிறேன்.

எனவே, இந்த அடுத்த பகுதியில் நாம்:

  1. நமக்குத் தேவையான இறுதிப்புள்ளிகளுக்கான கோரிக்கைகளுடன் aiohttp இல் alphavantageக்காக ஒரு சிறிய கிளையண்டை எழுதுவோம்.
  2. பத்திரங்கள் மற்றும் அவற்றுக்கான வரலாற்று விலைகள் பற்றிய தரவைச் சேகரிக்கும் ஒரு முகவரை உருவாக்குவோம்.

திட்டக் குறியீடு

இந்த பகுதிக்கான குறியீடு

ஆதாரம்: www.habr.com

கருத்தைச் சேர்