மைட்டோஜனுடன் அன்சிபிளை விரைவுபடுத்துதல்

Ansible மிகவும் பிரபலமான ஒன்றாக ஆனது கணினி கட்டமைப்பு மேலாண்மை. பிறகு Red Hat ஆல் வாங்கப்பட்டது 2015 இல் எண் திட்ட பங்கேற்பாளர்கள் ஆயிரங்களைத் தாண்டியது மற்றும் அன்சிபிள் அநேகமாக அதிகம் பயன்படுத்தப்படும் வரிசைப்படுத்தல் மற்றும் ஆர்கெஸ்ட்ரேஷன் அமைப்பாக மாறியது. அதன் பரந்த அளவிலான பயன்பாடுகள் மிகவும் ஈர்க்கக்கூடியவை.

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

இந்த வழிகளில் ஒன்று SSH குழாய்கள் ஒவ்வொரு முறையும் புதிய அமர்வைத் திறப்பதற்குப் பதிலாக, ஒரு SSH அமர்வைப் பயன்படுத்தி, வழிமுறைகளைச் செயல்படுத்த உங்களை அனுமதிக்கிறது, இது எங்களுக்கு நிறைய நேரத்தை மிச்சப்படுத்தும். (நினைவில் அணைக்கவும் requiretty உங்களில் சூடோவை அமைக்கிறது /etc/sudoers தொலை கணினியில் கோப்பு)

அன்சிபிளை ஓவர்லாக் செய்வதற்கான புதிய வழி பைதான் லைப்ரரி எனப்படும் மைட்டோஜென். யாராவது அதைப் பற்றி கேள்விப்பட்டிருக்கவில்லை என்றால், அதன் செயல்பாட்டை சுருக்கமாக விவரிக்கிறேன். இது ரிமோட் மெஷினில் பைதான் குறியீட்டை வேகமாக செயல்படுத்த அனுமதிக்கிறது, மேலும் அன்சிபிள் பயன்பாட்டிற்கு ஒரு எடுத்துக்காட்டு. Mitogen ரிமோட் இயந்திரத்தில் UNIX பைப்பைப் பயன்படுத்துகிறது மற்றும் பைதான் குறியீட்டை zlib உடன் சுருக்கி ஊறுகாயுடன் வரிசைப்படுத்துகிறது. இது விரைவாக முடிக்க உதவுகிறது மற்றும் போக்குவரத்தை சேமிக்கிறது. நீங்கள் இன்னும் விரிவான விளக்கத்தில் ஆர்வமாக இருந்தால், அதைப் பற்றி பக்கத்தில் படிக்க சிறந்தது "எப்படி இது செயல்படுகிறது". ஆனால் இன்று நாம் நூலகம் அன்சிபில் எவ்வாறு செயல்படுகிறது என்பதில் மட்டுமே கவனம் செலுத்துவோம்.

சில சூழ்நிலைகளில் Mitogen உங்கள் Ansible குறியீட்டை பல முறை வேகப்படுத்தலாம் மற்றும் போக்குவரத்து நுகர்வு கணிசமாக குறைக்கலாம். மிகவும் பிரபலமான பயன்பாட்டு நிகழ்வுகளை சரிபார்த்து, அது நமக்கு எவ்வளவு உதவுகிறது என்பதைப் பார்ப்போம்.

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

போகலாம்!

அன்சிபிலுக்கான மைட்டோஜென் கட்டமைப்பு மிகவும் எளிமையானது:
Mitogen நூலகத்தை நிறுவவும்:

pip install mitogen

இப்போது இரண்டு சமமான வழிகள் உள்ளன - ஒன்று ansible.cfg உள்ளமைவு கோப்பில் உள்ள விருப்பங்களை உள்ளமைக்கவும் அல்லது தேவையான சூழல் மாறிகளை அமைக்கவும்.

நிறுவப்பட்ட Mitogen பாதை இருக்கும் என்று வைத்துக்கொள்வோம் /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. பிறகு:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

அல்லது

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Mitogen உடன் மற்றும் இல்லாமல் Virtualenv இல் Ansible ஐ நிறுவுவோம்:

virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10

மைட்டோஜென் 0.2.7 அன்சிபிள் 2.8 உடன் வேலை செய்யாது என்பதை நினைவில் கொள்ளவும் (மே 2019 வரை)

மாற்றுப்பெயர்களை உருவாக்குதல்:

alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook'
alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook'

இப்போது ரிமோட் மெஷினில் கோப்புகளை உருவாக்கும் பிளேபுக்கை இயக்க முயற்சிப்போம்:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Create files with copy content module
      copy:
        content: |
          test file {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

10 கோப்புகளை உருவாக்க Mitogen உடன் மற்றும் இல்லாமல் இயக்கலாம்:

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null

real    0m2.603s
user    0m1.152s
sys     0m0.096s

time pure-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null

real    0m5.908s
user    0m1.745s
sys     0m0.643s

2 மடங்கு முன்னேற்றத்தைக் காண்கிறோம். 20, 30, ..., 100 கோப்புகளைச் சரிபார்ப்போம்:

time pure-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null

real    0m51.775s
user    0m8.039s
sys     0m6.305s

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null

real    0m4.331s
user    0m1.903s
sys     0m0.197s

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

  • உள்ளூர் ஒன்றிலிருந்து தொலைநிலை ஹோஸ்டுக்கு கோப்புகளை நகலெடுப்பதற்கான ஸ்கிரிப்ட் (தொகுதியுடன் copy):
    மைட்டோஜனுடன் அன்சிபிளை விரைவுபடுத்துதல்

  • ரிமோட் ஹோஸ்டில் கோப்புகளை உருவாக்குவதற்கான ஸ்கிரிப்ட் copy தொகுதி:
    மைட்டோஜனுடன் அன்சிபிளை விரைவுபடுத்துதல்

  • ரிமோட் ஹோஸ்டிலிருந்து உள்ளூர் ஒன்றிற்கு கோப்புகளைப் பதிவிறக்கும் காட்சி:
    மைட்டோஜனுடன் அன்சிபிளை விரைவுபடுத்துதல்

பல (3) ரிமோட் மெஷின்களைக் கொண்ட ஒரு காட்சியை முயற்சிப்போம், எடுத்துக்காட்டாக ரிமோட் ஹோஸ்டுக்கு கோப்புகளை நகலெடுக்கும் காட்சி:
மைட்டோஜனுடன் அன்சிபிளை விரைவுபடுத்துதல்

நீங்கள் பார்க்க முடியும் என, இந்த சூழ்நிலைகளில் Mitogen நேரம் மற்றும் போக்குவரத்து இரண்டையும் சேமிக்கிறது. ஆனால் சிக்கல் அன்சிபில் இல்லாவிட்டாலும், உதாரணமாக வட்டு அல்லது நெட்வொர்க்கின் I/O இல் அல்லது வேறு எங்காவது இருந்தால், Mitogen நமக்கு உதவும் என்று எதிர்பார்ப்பது கடினம்.

pip ஐப் பயன்படுத்தி yum/dnf மற்றும் python தொகுதிகள் கொண்ட தொகுப்புகளை நிறுவும் ஸ்கிரிப்டை முயற்சிப்போம். பிணையக் குறைபாடுகளைச் சார்ந்திருக்காத வகையில் தொகுப்புகள் தற்காலிகமாகச் சேமிக்கப்பட்டன:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Install packages
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Install pip modules
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Mitogen உடன் 12 வினாடிகள் எடுத்தது, அது இல்லாமல் அதே நேரம்.
பக்கத்தில் அன்சிபிள் பக்கத்திற்கான மைட்டோஜென் நீங்கள் மற்ற வரையறைகளையும் சோதனைகளையும் பார்க்கலாம். பக்கம் கூறுவது போல்:

மைட்டோஜென் இயங்கும் போது தொகுதியை வேகப்படுத்த முடியாது. இது இந்த தொகுதியை முடிந்தவரை விரைவாக செயல்படுத்த மட்டுமே முடியும்.

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

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

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