Fersnelle Ansible mei Mitogen

Sible waard ien fan de meast populêre Systeem konfiguraasje Management. Efter waard kocht troch Red Hat yn 2015 it oantal projekt dielnimmers mear as tûzenen en Ansible waard wierskynlik it meast brûkte ynset- en orkestraasjesysteem. It breed oanbod fan applikaasjes is heul yndrukwekkend.

Ansible wurket oer SSH-ferbiningen nei hosts op ôfstân. It iepenet in SSH-sesje, logt yn, kopiearret de Python-koade oer it netwurk en skriuwt it nei in apart tydlik bestân. Dêrnei rint it dit bestân op 'e masine op ôfstân. Dizze hiele folchoarder fan operaasjes is frij lang en saai, dus d'r binne ferskate manieren om it te optimalisearjen.

Ien fan dizze manieren is SSH pipelines wêrtroch jo ien SSH-sesje kinne brûke om ynstruksjes út te fieren, ynstee fan elke kear in nije sesje te iepenjen, wat ús in protte tiid kin besparje. (Onthâld gewoan om út te skeakeljen requiretty ynstelling foar sudo yn jo /etc/sudoers bestân op 'e masine op ôfstân)

In nije manier om Ansible te oerklokken is in python-bibleteek neamd Mitogen. As immen der net fan heard hat, sil ik de funksjonaliteit koart beskriuwe. It makket it mooglik snelle útfiering fan python koade op in ôfstân masine, en Ansible is mar ien foarbyld fan gebrûk. Mitogen brûkt in UNIX-pipe op 'e masine op ôfstân en ferpleatst pythonkoade komprimearre mei zlib en serialisearre mei pickle. Dit helpt om it rapper te foltôgjen en besparret ferkear. As jo ​​ynteressearre binne yn in mear detaillearre útlis, it is it bêste om te lêzen oer it op 'e side "Hoe't it wurket". Mar hjoed sille wy allinich rjochtsje op hoe't de bibleteek wurket mei Ansible.

Mitogen kin yn bepaalde omstannichheden jo Ansible-koade ferskate kearen fersnelle en ferkearskonsumpsje signifikant ferminderje. Litte wy de populêrste gebrûksgefallen besjen en sjen hoefolle it ús helpt.

Ik brûk Ansible it meast foar: it meitsjen fan konfiguraasjebestannen op in masine op ôfstân, pakketten ynstallearje, bestannen kopiearje nei en fan 'e masine op ôfstân. Miskien hawwe jo oare foarbylden - skriuw yn 'e kommentaren.

Lit ús gean!

Mitogen-konfiguraasje foar Ansible is heul ienfâldich:
Ynstallearje de Mitogen-bibleteek:

pip install mitogen

No binne d'r twa lykweardige manieren - of konfigurearje de opsjes yn it konfiguraasjetriem ansible.cfg, of set de nedige omjouwingsfariabelen yn.

Lit ús oannimme dat it paad nei de ynstallearre Mitogen sil wêze /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Dan:

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

of

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

Litte wy Ansible yn virtualenv ynstallearje, mei en sûnder 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

Tink derom dat Mitogen 0.2.7 net wurket mei Ansible 2.8 (per maaie 2019)

Aliassen meitsje:

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'

Litte wy no besykje in playbook út te fieren dat bestannen makket op in masine op ôfstân:

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

En litte wy it útfiere mei en sûnder Mitogen om 10 bestannen te meitsjen:

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

Wy sjogge in ferbettering fan 2 kear. Litte wy kontrolearje op 20, 30, ..., 100 bestannen:

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

As gefolch hawwe wy de útfiering mei mear dan 10 kear versneld!
Litte wy no ferskate senario's besykje en sjen hoefolle rapper alles foar ús wurket:

  • Skript foar it kopiearjen fan bestannen nei in host op ôfstân fan in lokale (mei de module copy):
    Fersnelle Ansible mei Mitogen

  • Skript foar it meitsjen fan bestannen op in host op ôfstân mei copy module:
    Fersnelle Ansible mei Mitogen

  • Senario mei it downloaden fan bestannen fan in host op ôfstân nei in lokale:
    Fersnelle Ansible mei Mitogen

Litte wy in senario besykje mei ferskate (3) masines op ôfstân, bygelyks in senario mei it kopiearjen fan bestannen nei in host op ôfstân:
Fersnelle Ansible mei Mitogen

Sa't jo sjen kinne, besparret Mitogen ús sawol tiid as ferkear yn dizze senario's. Mar as it knyppunt is net yn Ansible, mar bygelyks yn de I/O fan in skiif of netwurk, of earne oars, dan is it dreech om te ferwachtsje dat Mitogen sil helpe ús.

Litte wy in skript besykje mei it ynstallearjen fan pakketten mei yum/dnf- en python-modules mei pip. De pakketten waarden yn 't cache bewarre om net ôfhinklik fan netwurkglitches:

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

Mei Mitogen duorre it 12 sekonden, itselde as sûnder.
Op pagina Mitogen foar Ansible side jo kinne nei oare benchmarks en tests sjen. As de side seit:

Mitogen kin net flugger de module as it rint. It kin allinich de útfiering fan dizze module sa fluch mooglik meitsje.

Dêrom is it wichtich om jo knipepunten te finen yn jo ynset en as se binne troch Ansible, dan sil Mitogen jo helpe om se op te lossen en de útfiering fan jo playbooks signifikant te fersnellen.

Boarne: www.habr.com

Add a comment