Accelerazione di Ansible cù Mitogen

Ansible divintò unu di i più populari Gestione di a cunfigurazione di u sistema... Dopu hè statu acquistatu da Red Hat in 2015 u numeru participanti à u prugettu superava i millaie è Ansible diventò probabilmente u sistema di implementazione è orchestrazione più utilizatu. A so larga gamma di applicazioni hè assai impressiunanti.

Ansible travaglia nantu à cunnessione SSH à ospiti remoti. Apertura una sessione SSH, accede, copia u codice Python nantu à a reta è scrive in un schedariu tempurale separatu. Dopu quì, corre stu schedariu nantu à a macchina remota. Sta sequenza sana di l'operazioni hè abbastanza longa è tediosa, cusì ci sò parechje manere di ottimisimu.

Unu di sti modi hè pipelines SSH chì vi permette di utilizà una sessione SSH per eseguisce struzzioni, invece di apre una nova sessione ogni volta, chì ci pò salvà assai tempu. (Ricordate solu di spegne requiretty setting for sudo in your /etc/sudoers u schedariu nantu à a macchina remota)

Un novu modu di overclock Ansible hè una biblioteca di pitone chjamata Mitogenu. S'ellu ùn hà micca intesu parlà di questu, vi spiegheraghju brevemente a so funziunalità. Permette l'esekzione rapida di codice python in una macchina remota, è Ansible hè solu un esempiu di usu. Mitogen usa una pipa UNIX nantu à a macchina remota è trasferisce u codice python cumpressu cù zlib è serializatu cù pickle. Questu aiuta à compie più veloce è salvà u trafficu. Sè site interessatu in una spiegazione più dettagliata, hè megliu leghje nantu à a pagina "Cumu funziona". Ma oghje ci concentreremu solu nantu à cumu a biblioteca funziona cù Ansible.

Mitogen in certi circustanze pò accelerà u vostru codice Ansible parechje volte è riduce significativamente u cunsumu di trafficu. Fighjemu i casi di usu più populari è vede quantu ci aiuta.

Aduprà Ansible più per: creà schedarii di cunfigurazione in una macchina remota, installà pacchetti, copià i fugliali da è da a macchina remota. Forsi avete altri esempi - scrivite in i cumenti.

Let's go!

A cunfigurazione di Mitogen per Ansible hè assai simplice:
Installa a libreria Mitogen:

pip install mitogen

Avà ci sò dui modi equivalenti - o cunfigurà l'opzioni in u schedariu di cunfigurazione ansible.cfg, o stabilisce e variabili di l'ambienti necessarii.

Assumimu chì u percorsu à u Mitogen installatu serà /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Allora:

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

o

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

Installemu Ansible in virtualenv, cù è senza 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.10

Per piacè nutate chì Mitogen 0.2.7 ùn funziona micca cù Ansible 2.8 (da maghju 2019)

Creazione di alias:

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'

Avà pruvemu à eseguisce un playbook chì crea schedari nantu à una macchina remota:

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

E corremu cù è senza Mitogen per creà 10 schedari:

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

Avemu vistu una migliione 2 volte. Cuntrollamu per 20, 30, ..., 100 schedari:

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

In u risultatu, avemu acceleratu l'esecuzione di più di 10 volte!
Avà pruvemu diversi scenarii è vede quantu più veloce tuttu funziona per noi:

  • Script per cupià i fugliali à un host remoto da un locu (cù u modulu copy):
    Accelerazione di Ansible cù Mitogen

  • Script per creà fugliali nantu à un host remoto cù copy modulu:
    Accelerazione di Ansible cù Mitogen

  • Scenariu cù scaricamentu di fugliali da un host remoto à un locu locale:
    Accelerazione di Ansible cù Mitogen

Pruvemu un scenariu cù parechje (3) macchine remoti, per esempiu un scenariu cù copia di schedari à un host remoto:
Accelerazione di Ansible cù Mitogen

Comu pudete vede, Mitogen ci salva u tempu è u trafficu in questi scenarii. Ma s'è u bottleneck ùn hè micca in Ansible, ma per esempiu in l'I / O di un discu o rete, o in un altru locu, allora hè difficiule d'aspittà chì Mitogen ci aiuterà.

Pruvate un script cù l'installazione di pacchetti cù moduli yum/dnf è python cù pip. I pacchetti sò stati in cache per ùn dipende micca di i glitches di a rete:

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

Cù Mitogen hà pigliatu 12 seconde, cum'è senza ellu.
In pàgina Mitogen per a pagina Ansible pudete guardà altri benchmarks è testi. Cume a pagina dice:

Mitogen ùn pò micca accelerà u modulu quandu hè in esecuzione. Puderà solu fà l'esekzione di stu modulu u più veloce pussibule.

Per quessa, hè impurtante di truvà i vostri colli di bottiglia in a vostra implementazione è s'ellu sò dovuti à Ansible, allora Mitogen vi aiuterà à risolviri è accelerà significativamente l'esekzione di i vostri playbooks.

Source: www.habr.com

Add a comment