ಮೈಟೊಜೆನ್‌ನೊಂದಿಗೆ ಅನ್ಸಿಬಲ್ ಅನ್ನು ವೇಗಗೊಳಿಸುವುದು

ಅನುಕಂಪ ಅತ್ಯಂತ ಜನಪ್ರಿಯವಾಯಿತು ಸಿಸ್ಟಮ್ ಕಾನ್ಫಿಗರೇಶನ್ ಮ್ಯಾನೇಜ್ಮೆಂಟ್. ನಂತರ Red Hat ಖರೀದಿಸಿತು 2015 ರಲ್ಲಿ ಸಂಖ್ಯೆ ಯೋಜನೆಯ ಭಾಗವಹಿಸುವವರು ಸಾವಿರಗಳನ್ನು ಮೀರಿದೆ ಮತ್ತು ಅನ್ಸಿಬಲ್ ಬಹುಶಃ ಹೆಚ್ಚು ಬಳಸಿದ ನಿಯೋಜನೆ ಮತ್ತು ಆರ್ಕೆಸ್ಟ್ರೇಶನ್ ವ್ಯವಸ್ಥೆಯಾಗಿದೆ. ಇದರ ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಅನ್ವಯಗಳು ಬಹಳ ಪ್ರಭಾವಶಾಲಿಯಾಗಿದೆ.

ರಿಮೋಟ್ ಹೋಸ್ಟ್‌ಗಳಿಗೆ SSH ಸಂಪರ್ಕಗಳ ಮೂಲಕ Ansible ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು SSH ಸೆಶನ್ ಅನ್ನು ತೆರೆಯುತ್ತದೆ, ಲಾಗ್ ಇನ್ ಮಾಡುತ್ತದೆ, ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಪೈಥಾನ್ ಕೋಡ್ ಅನ್ನು ನಕಲಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಪ್ರತ್ಯೇಕ ತಾತ್ಕಾಲಿಕ ಫೈಲ್‌ಗೆ ಬರೆಯುತ್ತದೆ. ಅದರ ನಂತರ, ಇದು ರಿಮೋಟ್ ಯಂತ್ರದಲ್ಲಿ ಈ ಫೈಲ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ. ಕಾರ್ಯಾಚರಣೆಗಳ ಈ ಸಂಪೂರ್ಣ ಅನುಕ್ರಮವು ಸಾಕಷ್ಟು ಉದ್ದವಾಗಿದೆ ಮತ್ತು ಬೇಸರವಾಗಿದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ವಿವಿಧ ಮಾರ್ಗಗಳಿವೆ.

ಈ ಮಾರ್ಗಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ SSH ಪೈಪ್‌ಲೈನ್‌ಗಳು ಸೂಚನೆಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಒಂದು SSH ಸೆಷನ್ ಅನ್ನು ಬಳಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಪ್ರತಿ ಬಾರಿ ಹೊಸ ಸೆಶನ್ ಅನ್ನು ತೆರೆಯುವ ಬದಲು, ಇದು ನಮಗೆ ಸಾಕಷ್ಟು ಸಮಯವನ್ನು ಉಳಿಸುತ್ತದೆ. (ಆಫ್ ಮಾಡಲು ಮರೆಯದಿರಿ requiretty ನಿಮ್ಮಲ್ಲಿ ಸುಡೋವನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ /etc/sudoers ರಿಮೋಟ್ ಯಂತ್ರದಲ್ಲಿ ಫೈಲ್)

ಅನ್ಸಿಬಲ್ ಅನ್ನು ಓವರ್‌ಲಾಕ್ ಮಾಡಲು ಹೊಸ ಮಾರ್ಗವೆಂದರೆ ಪೈಥಾನ್ ಲೈಬ್ರರಿ ಎಂದು ಕರೆಯಲ್ಪಡುತ್ತದೆ ಮೈಟೊಜೆನ್. ಯಾರಾದರೂ ಅದರ ಬಗ್ಗೆ ಕೇಳದಿದ್ದರೆ, ನಾನು ಅದರ ಕಾರ್ಯವನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ವಿವರಿಸುತ್ತೇನೆ. ಇದು ರಿಮೋಟ್ ಗಣಕದಲ್ಲಿ ಪೈಥಾನ್ ಕೋಡ್ ಅನ್ನು ವೇಗವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ಅನ್ಸಿಬಲ್ ಬಳಕೆಯ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ. Mitogen ರಿಮೋಟ್ ಯಂತ್ರದಲ್ಲಿ UNIX ಪೈಪ್ ಅನ್ನು ಬಳಸುತ್ತದೆ ಮತ್ತು ಪೈಥಾನ್ ಕೋಡ್ ಅನ್ನು zlib ನೊಂದಿಗೆ ಸಂಕುಚಿತಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಉಪ್ಪಿನಕಾಯಿಯೊಂದಿಗೆ ಧಾರಾವಾಹಿಯಾಗಿ ವರ್ಗಾಯಿಸುತ್ತದೆ. ಇದು ವೇಗವಾಗಿ ಪೂರ್ಣಗೊಳಿಸಲು ಮತ್ತು ಸಂಚಾರವನ್ನು ಉಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನೀವು ಹೆಚ್ಚು ವಿವರವಾದ ವಿವರಣೆಯಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ಪುಟದಲ್ಲಿ ಅದರ ಬಗ್ಗೆ ಓದುವುದು ಉತ್ತಮ "ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ". ಆದರೆ ಇಂದು ನಾವು ಅನ್ಸಿಬಲ್‌ನೊಂದಿಗೆ ಲೈಬ್ರರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದರ ಮೇಲೆ ಮಾತ್ರ ಕೇಂದ್ರೀಕರಿಸುತ್ತೇವೆ.

ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಮೈಟೊಜೆನ್ ನಿಮ್ಮ ಅನ್ಸಿಬಲ್ ಕೋಡ್ ಅನ್ನು ಹಲವಾರು ಬಾರಿ ವೇಗಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಟ್ರಾಫಿಕ್ ಬಳಕೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಬಳಕೆಯ ಪ್ರಕರಣಗಳನ್ನು ಪರಿಶೀಲಿಸೋಣ ಮತ್ತು ಅದು ನಮಗೆ ಎಷ್ಟು ಸಹಾಯ ಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡೋಣ.

ನಾನು Ansible ಅನ್ನು ಹೆಚ್ಚಾಗಿ ಬಳಸುತ್ತೇನೆ: ರಿಮೋಟ್ ಗಣಕದಲ್ಲಿ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್‌ಗಳನ್ನು ರಚಿಸುವುದು, ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದು, ರಿಮೋಟ್ ಯಂತ್ರಕ್ಕೆ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ನಕಲಿಸುವುದು. ಬಹುಶಃ ನೀವು ಇತರ ಉದಾಹರಣೆಗಳನ್ನು ಹೊಂದಿದ್ದೀರಿ - ಕಾಮೆಂಟ್ಗಳಲ್ಲಿ ಬರೆಯಿರಿ.

ಹೋಗೋಣ!

ಅನ್ಸಿಬಲ್‌ಗಾಗಿ ಮೈಟೊಜೆನ್ ಸಂರಚನೆಯು ತುಂಬಾ ಸರಳವಾಗಿದೆ:
ಮೈಟೊಜೆನ್ ಲೈಬ್ರರಿಯನ್ನು ಸ್ಥಾಪಿಸಿ:

pip install mitogen

ಈಗ ಎರಡು ಸಮಾನ ಮಾರ್ಗಗಳಿವೆ - ಒಂದೋ ansible.cfg ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್‌ನಲ್ಲಿ ಆಯ್ಕೆಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ, ಅಥವಾ ಅಗತ್ಯ ಪರಿಸರ ವೇರಿಯಬಲ್‌ಗಳನ್ನು ಹೊಂದಿಸಿ.

ಸ್ಥಾಪಿಸಲಾದ ಮೈಟೊಜೆನ್‌ಗೆ ಮಾರ್ಗವು ಇರುತ್ತದೆ ಎಂದು ಭಾವಿಸೋಣ /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

ಮೈಟೊಜೆನ್‌ನೊಂದಿಗೆ ಮತ್ತು ಇಲ್ಲದೆ ವರ್ಚುವಲ್‌ನಲ್ಲಿ ಅನ್ಸಿಬಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸೋಣ:

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 ಫೈಲ್‌ಗಳನ್ನು ರಚಿಸಲು ಮೈಟೊಜೆನ್‌ನೊಂದಿಗೆ ಮತ್ತು ಇಲ್ಲದೆ ರನ್ ಮಾಡೋಣ:

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) ರಿಮೋಟ್ ಯಂತ್ರಗಳೊಂದಿಗೆ ಸನ್ನಿವೇಶವನ್ನು ಪ್ರಯತ್ನಿಸೋಣ, ಉದಾಹರಣೆಗೆ ರಿಮೋಟ್ ಹೋಸ್ಟ್‌ಗೆ ಫೈಲ್‌ಗಳನ್ನು ನಕಲಿಸುವ ಸನ್ನಿವೇಶ:
ಮೈಟೊಜೆನ್‌ನೊಂದಿಗೆ ಅನ್ಸಿಬಲ್ ಅನ್ನು ವೇಗಗೊಳಿಸುವುದು

ನೀವು ನೋಡುವಂತೆ, ಈ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಮೈಟೊಜೆನ್ ನಮಗೆ ಸಮಯ ಮತ್ತು ಸಂಚಾರ ಎರಡನ್ನೂ ಉಳಿಸುತ್ತದೆ. ಆದರೆ ಅಡಚಣೆಯು ಅನ್ಸಿಬಲ್‌ನಲ್ಲಿಲ್ಲದಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ ಡಿಸ್ಕ್ ಅಥವಾ ನೆಟ್‌ವರ್ಕ್‌ನ I/O ನಲ್ಲಿ ಅಥವಾ ಬೇರೆಲ್ಲಿಯಾದರೂ, ಮೈಟೊಜೆನ್ ನಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಎಂದು ನಿರೀಕ್ಷಿಸುವುದು ಕಷ್ಟ.

ಪಿಪ್ ಬಳಸಿ yum/dnf ಮತ್ತು ಪೈಥಾನ್ ಮಾಡ್ಯೂಲ್‌ಗಳೊಂದಿಗೆ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದರೊಂದಿಗೆ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸೋಣ. ನೆಟ್‌ವರ್ಕ್ ದೋಷಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗದಂತೆ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲಾಗಿದೆ:

---
- 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ