on saanud üheks populaarsemaks . Pärast seda, kui aastal 2015, ületas osalejate arv 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 requiretty seade sudo jaoks oma failis kaugmasinas) /etc/sudoers Uue viisina Ansible'i „kiirendamiseks” on Python'i teek nimega
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. . 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 mitogenNüü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_linearvõi
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyPaigaldame 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.10Pange 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.643sMe 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.197sKokkuvõ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):
Failide loomise stsenaarium kaugserveris
copymoodul:
Failide allalaadimise stsenaarium kaugserverist kohalikule:
Proovime stsenaariumit, kus on mitu (3) kaugmasinat, näiteks stsenaarium failide kopeerimiseks kaugserverisse:
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 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
