ble en av de mest populÊre . Etter i 2015 tallet oversteg tusenvis og Ansible ble sannsynligvis det mest brukte distribusjons- og orkestreringssystemet. Det brede spekteret av bruksomrÄder er veldig imponerende.
Ansible fungerer over SSH-tilkoblinger til eksterne verter. Den Äpner en SSH-sesjon, logger pÄ, kopierer Python-koden over nettverket og skriver den til en egen midlertidig fil. Etter det kjÞrer den denne filen pÄ den eksterne maskinen. Hele denne operasjonssekvensen er ganske lang og kjedelig, sÄ det er forskjellige mÄter Ä optimalisere den pÄ.
En av disse mÄtene er som lar deg bruke én SSH-Þkt til Ä utfÞre instruksjoner, i stedet for Ä Äpne en ny Þkt hver gang, noe som kan spare oss for mye tid. (Bare husk Ä slÄ av requiretty innstilling for sudo i din /etc/sudoers fil pÄ den eksterne maskinen)
En ny mÄte Ä overklokke Ansible pÄ er et python-bibliotek som heter . Hvis noen ikke har hÞrt om det, vil jeg kort beskrive funksjonaliteten. Den tillater rask utfÞrelse av python-kode pÄ en ekstern maskin, og Ansible er bare ett eksempel pÄ bruk. Mitogen bruker et UNIX-rÞr pÄ den eksterne maskinen og overfÞrer pythonkode komprimert med zlib og serialisert med pickle. Dette bidrar til Ä fullfÞre det raskere og sparer trafikk. Hvis du er interessert i en mer detaljert forklaring, er det best Ä lese om det pÄ siden . Men i dag skal vi kun fokusere pÄ hvordan biblioteket fungerer med Ansible.
Mitogen kan under visse omstendigheter Þke hastigheten pÄ Ansible-koden flere ganger og redusere trafikkforbruket betydelig. La oss sjekke ut de mest populÊre brukstilfellene og se hvor mye det hjelper oss.
Jeg bruker Ansible mest for: Ä lage konfigurasjonsfiler pÄ en ekstern maskin, installere pakker, kopiere filer til og fra den eksterne maskinen. Kanskje du har andre eksempler - skriv i kommentarfeltet.
La oss gÄ!
Mitogen-konfigurasjonen for Ansible er veldig enkel:
Installer Mitogen-biblioteket:
pip install mitogenNÄ er det to tilsvarende mÄter - enten konfigurer alternativene i konfigurasjonsfilen ansible.cfg, eller angi de nÞdvendige miljÞvariablene.
La oss anta at banen til den installerte Mitogen vil vĂŠre /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Deretter:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_lineareller
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLa oss installere Ansible i virtualenv, med og uten Mitogen:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10VÊr oppmerksom pÄ at Mitogen 0.2.7 ikke fungerer med Ansible 2.8 (per mai 2019)
Lage aliaser:
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'La oss nÄ prÞve Ä kjÞre en spillebok som lager filer pÄ en ekstern maskin:
---
- 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 }}Og la oss kjĂžre den med og uten Mitogen for Ă„ lage 10 filer:
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.643sVi ser en dobbel forbedring. La oss se etter 2, 20, ..., 30 filer:
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.197sSom et resultat akselererte vi utfĂžrelsen med mer enn 10 ganger!
La oss nÄ prÞve forskjellige scenarier og se hvor mye raskere alt fungerer for oss:
Skript for Ă„ kopiere filer til en ekstern vert fra en lokal (med modulen
copy):
Skript for Ä lage filer pÄ en ekstern vert med
copymodul:
Scenario med nedlasting av filer fra en ekstern vert til en lokal:
La oss prĂžve et scenario med flere (3) eksterne maskiner, for eksempel et scenario med kopiering av filer til en ekstern vert:
Som du ser sparer Mitogen oss for bÄde tid og trafikk i disse scenariene. Men hvis flaskehalsen ikke er i Ansible, men for eksempel i I/O pÄ en disk eller et nettverk, eller et annet sted, sÄ er det vanskelig Ä forvente at Mitogen vil hjelpe oss.
La oss prĂžve et skript med Ă„ installere pakker med yum/dnf og python-moduler ved Ă„ bruke pip. Pakkene ble bufret for ikke Ă„ vĂŠre avhengig av nettverksfeil:
---
- 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
Med Mitogen tok det 12 sekunder, det samme som uten.
Side du kan se pÄ andre benchmarks og tester. Som det stÄr pÄ siden:
Mitogen kan ikke Þke hastigheten pÄ modulen nÄr den kjÞrer. Det kan bare gjÞre utfÞrelsen av denne modulen sÄ rask som mulig.
Derfor er det viktig Ä finne flaskehalsene dine i distribusjonen din, og hvis de skyldes Ansible, vil Mitogen hjelpe deg med Ä lÞse dem og Þke hastigheten pÄ utfÞrelsen av spillebÞkene betydelig.
Kilde: www.habr.com
