Kiirendame Ansible'i Mitogeni abil

Ansible on saanud üheks populaarsemaks konfiguratsioonihalduse süsteemiks. Pärast seda, kui ostis Red Hat aastal 2015, ületas osalejate arv tuhandeid ja Ansible on tõenäoliselt kõige enam kasutatav juurutamise ja orkestreerimise süsteem. Selle laialdased rakendusvaldkonnad on väga muljetavaldavad. Ansible töötab SSH-ühenduste kaudu kaugmasinatele. See avab SSH-seansi, logib sisse, kopeerib Pythonikoodi üle võrgu ja salvestab selle eraldi ajutisse faili. Pärast seda käivitab see faili kaugmasinas. Kogu see protsess on üsna aeganõudev ja tüütus, seetõttu on mitmeid viise, kuidas seda optimeerida.

Üks neist viisidest on

SSH torustikud mis võimaldab kasutada ühte SSH-seanssi käskude täitmiseks, mitte avada iga kord uut seanssi, mis võib meie jaoks palju aega säästa. (Ärge unustage ainult keelata requiretty seade sudo jaoks oma failis kaugmasinas) /etc/sudoers Uue viisina Ansible'i „kiirendamiseks” on Python'i teek nimega

Mitogen Mitogen. Kui keegi ei ole temast kuulnud, siis räägin lühidalt tema funktsionaalsusest. See võimaldab kiiresti käivitada Python'i koodi eemal asuvas masinas, ja Ansible on ainult üks näide selle kasutamisest. Mitogen kasutab UNIX pipe'i eemal asuvas masinas ning edastab Python'i koodi zlib'i abil kompresseerituna ja pickle'iga sarjastatuna. See aitab seda kiiremini täita ja säästab liiklust. Kui olete huvitatud detailsemast seletusest, on parem lugeda sellest lehelt. «Kuidas see toimib». Kuid täna keskendume ainult raamtu teostusele Ansible'iga.

Mitogen võib teatud tingimustel kiirendada teie Ansible'i koodi mitu korda ja oluliselt vähendada liikluskulu. Vaatame kõige populaarsemaid kasutusnäiteid ja uurime, kui palju see meile aitab.

Kasutame Ansible'it kõige enam: konfiguratsioonifailide loomine eemal asuvas masinas, pakettide paigaldamine, failide kopeerimine eemal asuvasse masinasse ja tagasi. Võib-olla on teil teisi näiteid – kirjutage kommentaaridesse.

Lähme!

Mitogen'i konfiguratsioon Ansible'ile on väga lihtne:
Paigaldame Mitogen'i teegi:

pip install mitogen

Nüüd on kaks võrdselt head viisi — kas seadistada valikud failis ansible.cfg või seada vajalikud keskkonnamuutujad.

Oletame, et tee installitud Mitogen'i juurde on /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Siis:

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

Paigaldame Ansible'i virtualenv'i, koos Mitogen'i ja ilma selleta:

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 Ansible 2.8-ga (mai 2019)

Teeme alias'id:

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'

Nüüd proovime käivitada playbook'i, mis loob faile kaugtööl!

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Loo faile kopeerimis sisu mooduli abil
      copy:
        content: |
          test file {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Ja käivitame koos Mitogen'i ja ilma selleta 10 faili loomiseks:

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

Me näeme täiust 2 korda. Kontrollime 20, 30, …, 100 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

Kokkuvõttes oleme kiirusest enam kui 10 korda kõrgema tulemuse saavutanud!
Nüüd proovime erinevaid stsenaариpe ja vaatame, kui kiiresti meil kõik töötab:

  • Failide kopeerimise stsenaarium kaugserverisse kohalikult (mooduliga copy):
    Kiirendame Ansible'i Mitogeni abil

  • Failide loomise stsenaarium kaugserveris copy moodul:
    Kiirendame Ansible'i Mitogeni abil

  • Failide allalaadimise stsenaarium kaugserverist kohalikule:
    Kiirendame Ansible'i Mitogeni abil

Proovime stsenaariumit, kus on mitu (3) kaugmasinat, näiteks stsenaarium failide kopeerimiseks kaugserverisse:
Kiirendame Ansible'i Mitogeni abil

Kuidas näha, säästab Mitogen meile nii aega kui ka liiklust nendes stsenaariumides. Kuid kui 'pudelikael' ei ole Ansible'is, vaid näiteks ketta I/O-s või võrgus, või kusagil mujal, siis on raske oodata, et Mitogen aitaks.

Proovime stsenaariumit pakettide installimiseks yum/dnf ja pythonimoodulite paigaldamiseks pip'i abil. Paketid olid vahemällu salvestatud, et mitte sõltuda võrgu tõrgetest:

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

    - name: Paigaldage pip moodulid
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Mitogeniga võttis see 12 sekundit, nagu ka ilma selleta.
Lehe peal Mitogen Ansible’i leht saate vaadata teisi testitulemusi ja benchmarket. Nagu lehelt väidetakse:

Mitogen ei saa kiirendada mudelit, kui see on käimas. See suudab ainult muuta selle mudeli käitamise nii kiireks kui võimalik.

Seetõttu on oluline leida oma juurdumisprobleemid rakenduses ja kui need on tingitud Ansible'ist, siis aitab Mitogen teil neid lahendada ja oluliselt kiirendada teie playbookide täitmist.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster