Ansible kiirendamine Mitogeniga

Võimalik sai üheks populaarsemaks Süsteemi konfiguratsiooni haldus... Pärast ostis Red Hat 2015. aastal number projektis osalejad ületas tuhandeid ja Ansiblest sai ilmselt enimkasutatav juurutus- ja orkestreerimissüsteem. Selle lai valik rakendusi on väga muljetavaldav.

Ansible töötab SSH-ühenduste kaudu kaughostidega. See avab SSH-seansi, logib sisse, kopeerib Pythoni koodi üle võrgu ja kirjutab selle eraldi ajutisse faili. Pärast seda käivitab see selle faili kaugmasinas. Kogu see toimingute jada on üsna pikk ja tüütu, nii et selle optimeerimiseks on erinevaid võimalusi.

Üks neist viisidest on SSH torujuhtmed mis võimaldab teil kasutada ühte SSH-seanssi juhiste täitmiseks, selle asemel, et avada iga kord uus seanss, mis võib säästa palju aega. (Pidage meeles, et lülitate välja requiretty teie sudo seadistus /etc/sudoers fail kaugmasinas)

Uus viis Ansible'i kiirendamiseks on pythoni raamatukogu nimega Mitogeen. Kui keegi pole sellest kuulnud, siis kirjeldan lühidalt selle funktsionaalsust. See võimaldab pythoni koodi kiiret käivitamist kaugmasinas ja Ansible on vaid üks näide selle kasutamisest. Mitogen kasutab kaugmasinas UNIX-i toru ja edastab zlib-iga tihendatud ja serialiseeritud pythoni koodi. See aitab selle kiiremini lõpule viia ja säästab liiklust. Kui olete huvitatud täpsemast selgitusest, on kõige parem selle kohta lugeda lehelt "Kuidas see töötab". Kuid täna keskendume ainult sellele, kuidas raamatukogu Ansiblega töötab.

Mitogeen võib teatud asjaoludel teie Ansible koodi mitu korda kiirendada ja liikluskulu oluliselt vähendada. Vaatame kõige populaarsemaid kasutusjuhtumeid ja vaatame, kui palju see meid aitab.

Kasutan Ansible'i kõige enam: konfiguratsioonifailide loomiseks kaugmasinas, pakettide installimiseks, failide kopeerimiseks kaugmasinasse ja sealt. Võib-olla on teil muid näiteid - kirjutage kommentaaridesse.

Mine!

Ansible'i mitogeeni konfiguratsioon on väga lihtne:
Installige mitogeeni teek:

pip install mitogen

Nüüd on kaks samaväärset võimalust – kas seadistada suvandid ansible.cfg konfiguratsioonifailis või määrata vajalikud keskkonnamuutujad.

Oletame, et tee paigaldatud mitogeeni saab olema /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Seejärel:

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

või

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

Installime Ansible'i virtualenv'i koos Mitogeniga ja ilma:

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

Pange tähele, et Mitogen 0.2.7 ei tööta koos versiooniga Ansible 2.8 (2019. aasta mai seisuga)

Alinimede tegemine:

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'

Proovime nüüd käivitada esitusraamatut, mis loob faile kaugmasinas:

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

Ja käivitame selle koos Mitogeniga ja ilma, et luua 10 faili:

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

Näeme kahekordset paranemist. Kontrollime 2, 20, ..., 30 faili:

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

Selle tulemusena kiirendasime täitmist rohkem kui 10 korda!
Nüüd proovime erinevaid stsenaariume ja vaatame, kui palju kiiremini kõik meie jaoks toimib:

  • Skript failide kopeerimiseks kohalikust hostist (koos mooduliga copy):
    Ansible kiirendamine Mitogeniga

  • Skript failide loomiseks kaughostis copy moodul:
    Ansible kiirendamine Mitogeniga

  • Stsenaarium failide allalaadimisega kaughostist kohalikku:
    Ansible kiirendamine Mitogeniga

Proovime mitme (3) kaugmasinaga stsenaariumi, näiteks failide kaughosti kopeerimisega:
Ansible kiirendamine Mitogeniga

Nagu näete, säästab Mitogen nende stsenaariumide puhul meie aega ja liiklust. Aga kui kitsaskoht pole Ansibles, vaid näiteks ketta või võrgu I/O-s või kusagil mujal, siis on raske loota, et Mitogen meid aitaks.

Proovime skripti yum/dnf ja pythoni moodulitega pakettide installimisega pip abil. Paketid salvestati vahemällu, et mitte sõltuda võrgutõrgetest:

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

Mitogeniga kulus 12 sekundit, sama palju kui ilma selleta.
Lehel Mitogen for Ansible leht saate vaadata muid võrdlusaluseid ja teste. Nagu lehel on kirjas:

Mitogeen ei saa moodulit kiirendada, kui see töötab. See võib muuta selle mooduli täitmise ainult nii kiireks kui võimalik.

Seetõttu on oluline leida oma kasutuselevõtu kitsaskohad ja kui need on tingitud Ansiblest, siis Mitogen aitab teil need lahendada ja kiirendab oluliselt teie mänguraamatute täitmist.

Allikas: www.habr.com

Lisa kommentaar