postao jedan od najpopularnijih . Nakon u 2015. broj premašio tisuće i Ansible je postao vjerojatno najkorišteniji sustav za implementaciju i orkestraciju. Njegov širok raspon primjena je vrlo impresivan.
Ansible radi preko SSH veza s udaljenim hostovima. Otvara SSH sesiju, prijavljuje se, kopira Python kod preko mreže i zapisuje ga u zasebnu privremenu datoteku. Nakon toga pokreće ovu datoteku na udaljenom računalu. Cijeli ovaj slijed operacija je prilično dug i zamoran, pa postoje različiti načini kako ga optimizirati.
Jedan od tih načina je koji vam omogućuje korištenje jedne SSH sesije za izvršavanje instrukcija, umjesto otvaranja nove sesije svaki put, što nam može uštedjeti puno vremena. (Samo ne zaboravite isključiti requiretty postavka za sudo u vašem /etc/sudoers datoteka na udaljenom računalu)
Novi način za overclockiranje Ansiblea je python biblioteka pod nazivom . Ako netko nije čuo za njega, ukratko ću opisati njegovu funkcionalnost. Omogućuje brzo izvršavanje python koda na udaljenom računalu, a Ansible je samo jedan od primjera korištenja. Mitogen koristi UNIX cijevi na udaljenom stroju i prenosi python kod komprimiran sa zlib i serijaliziran sa pickle. To pomaže bržem dovršavanju i štedi promet. Ako vas zanima detaljnije objašnjenje, najbolje je da o tome pročitate na stranici . Ali danas ćemo se fokusirati samo na to kako knjižnica radi s Ansibleom.
Mitogen u određenim okolnostima može nekoliko puta ubrzati vaš Ansible kod i značajno smanjiti potrošnju prometa. Pogledajmo najpopularnije slučajeve upotrebe i vidimo koliko nam pomažu.
Ansible najviše koristim za: stvaranje konfiguracijskih datoteka na udaljenom računalu, instaliranje paketa, kopiranje datoteka na i s udaljenog računala. Možda imate druge primjere - napišite u komentarima.
Idemo!
Mitogen konfiguracija za Ansible je vrlo jednostavna:
Instalirajte biblioteku Mitogen:
pip install mitogenSada postoje dva ekvivalentna načina - ili konfigurirajte opcije u konfiguracijskoj datoteci ansible.cfg ili postavite potrebne varijable okoline.
Pretpostavimo da će put do instaliranog Mitogena biti /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Zatim:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearili
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyInstalirajmo Ansible u virtualenv, sa i bez Mitogena:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Imajte na umu da Mitogen 0.2.7 ne radi s Ansible 2.8 (od svibnja 2019.)
Izrada aliasa:
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'Pokušajmo sada pokrenuti playbook koji stvara datoteke na udaljenom računalu:
---
- 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 }}I pokrenimo ga sa i bez Mitogena da stvorimo 10 datoteka:
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.643sVidimo dvostruki napredak. Provjerimo 2, 20, ..., 30 datoteka:
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.197sKao rezultat toga, ubrzali smo izvršenje za više od 10 puta!
Isprobajmo sada različite scenarije i vidimo koliko brže sve radi za nas:
Skripta za kopiranje datoteka na udaljeni host s lokalnog (s modulom
copy):
Skripta za stvaranje datoteka na udaljenom računalu s
copymodul:
Scenarij s preuzimanjem datoteka s udaljenog hosta na lokalni:
Pokušajmo scenarij s nekoliko (3) udaljenih računala, na primjer scenarij s kopiranjem datoteka na udaljeni host:
Kao što vidite, Mitogen nam štedi i vrijeme i promet u ovim scenarijima. Ali ako usko grlo nije u Ansibleu, nego primjerice u I/O diska ili mreže, ili negdje drugdje, onda je teško očekivati da će nam Mitogen pomoći.
Pokušajmo sa skriptom koja instalira pakete s modulima yum/dnf i python koristeći pip. Paketi su spremljeni u predmemoriju kako ne bi ovisili o mrežnim greškama:
---
- 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
S Mitogenom je trajalo 12 sekundi, isto kao i bez njega.
Na stranici možete pogledati druge benchmarkove i testove. Kao što stranica navodi:
Mitogen ne može ubrzati modul dok radi. Može samo učiniti izvršenje ovog modula što je brže moguće.
Stoga je važno pronaći uska grla u svojoj implementaciji, a ako su uzrokovana Ansibleom, tada će vam Mitogen pomoći da ih riješite i značajno ubrzati izvođenje vaših priručnika.
Izvor: www.habr.com
