Shpejtojmë Ansible me ndihmën e Mitogen

Ansible u bë një nga më të njohurat sistemet e Menaxhimit të Konfigurimeve. Pas blerjes nga Red Hat në vitin 2015, numri i participanteve në projekt kaloi mijëra dhe Ansible u bë ndoshta sistemi më i përdorur për shpërndarje dhe orkestrim. Fushat e tij të gjera të aplikimit janë shumë impresionuese.

Ansible funksionon përmes lidhjeve SSH me hostet e largët. Ai hap një seancë SSH, bën logimin, kopjon kodin në Python përmes rrjetit dhe e ruan atë në një skedar të përkohshëm. Pas kësaj, ai ekzekuton këtë skedar në makinën e largët. I gjithë ky proces është mjaft i gjatë dhe i mundimshëm, prandaj ekzistojnë mënyra të ndryshme për ta optimizuar atë.

Një nga këto mënyra është pipelinat SSH i cili lejon përdorimin e një seance SSH për ekzekutimin e instrukcioneve, në vend që të hapë çdo herë një seancë të re, duke kursyer kështu shumë kohë. (Vetëm mos harro të çaktivizosh requiretty konfigurimin për sudo në /etc/sudoers skedarin tënd në makinën e largët)

NjĂ« mĂ«nyrĂ« e re pĂ«r tĂ« "shpejtuar" Ansible Ă«shtĂ« biblioteka python e quajtur Mitogen. nĂ«se dikush nuk ka dĂ«gjuar pĂ«r tĂ« — do ta pĂ«rshkruaj shkurtimisht funksionalitetin e saj. Ajo lejon ekzekutimin e shpejtĂ« tĂ« kodit Python nĂ« njĂ« makinĂ« tĂ« largĂ«t dhe Ansible Ă«shtĂ« vetĂ«m njĂ« nga shembujt e pĂ«rdorimit. Mitogen pĂ«rdor UNIX pipe nĂ« makinĂ«n e largĂ«t dhe transferon kodin Python tĂ« kompresuar me zlib dhe tĂ« seralizuar me pickle. Kjo ndihmon pĂ«r ta ekzekutuar atĂ« mĂ« shpejt dhe pĂ«r tĂ« kursyer trafik. NĂ«se jeni tĂ« interesuar pĂ«r njĂ« shpjegim mĂ« tĂ« detajuar, mĂ« mirĂ« tĂ« lexoni rreth saj nĂ« faqen «Si funksionon». Por sot do tĂ« pĂ«rqendrohemi vetĂ«m nĂ« punĂ«n e bibliotekĂ«s me Ansible.

Mitogen në disa rrethana mund të përshpejtojë kodin tuaj Ansible disa herë dhe të zvogëlojë ndjeshëm konsumin e trafik. Le të kontrollojmë shembujt më të njohur të përdorimit dhe të shohim sa na ndihmon kjo.

UnĂ« pĂ«rdor mĂ« sĂ« shumti Ansible pĂ«r: krijimin e skedave tĂ« konfigurimit nĂ« makinĂ« tĂ« largĂ«t, instalimin e pakove, kopjimin e skedave nĂ« makinĂ«n e largĂ«t dhe mbrapsht. Ndoshta keni shembuj tĂ« tjerĂ« — shkruani nĂ« komentet.

Fillojmë!

Konfigurimi i Mitogen për Ansible është shumë i thjeshtë:
Instalojmë bibliotekën Mitogen:

pip install mitogen

Tani tani tani tani dy mĂ«nyra tĂ« barabarta — ose tĂ« konfiguroni opsionet nĂ« skedarin e konfigurimit ansible.cfg, ose tĂ« vendosni variablat e nevojshme tĂ« mjedisit.

Supozoni se rruga për Mitogenin e instaluar do të jetë /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Atëherë:

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

ose

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

Të instalojmë Ansible në virtualenv, me Mitogen dhe pa të:

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

Vini re që Mitogen 0.2.7 nuk funksionon me Ansible 2.8 (në maj 2019)

Krijojmë aliases:

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'

Tani le të përpiqemi të ekzekutojmë playbook që krijon skedarë në makinën e largët:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Krijo skedarë me modul përmbajtje kopje
      copy:
        content: |
          skedar testi {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Dhe do ta ekzekutojmë me Mitogen dhe pa të për të krijuar 10 skedarë:

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

Ne jemi duke parë një përmirësim prej 2 herësh. Le të kontrollojmë për 20, 30, 
, 100 skedarë:

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

Si rezultat, ne arritëm të përshpejtojmë ekzekutimin më shumë se 10 herë!
Tani le të provojmë skenarë të ndryshëm dhe të shohim sa më shpejt funksionon gjithçka:

  • Skenari i kopjimit tĂ« skedarĂ«ve nĂ« njĂ« host tĂ« largĂ«t nga lokal (me modul copy):
    Shpejtojmë Ansible me ndihmën e Mitogen

  • Skenari i krijimit tĂ« skedarĂ«ve nĂ« njĂ« host tĂ« largĂ«t me copy modulin:
    Shpejtojmë Ansible me ndihmën e Mitogen

  • Skenari me ngarkimin e skedarĂ«ve nga njĂ« host tĂ« largĂ«t nĂ« lokal:
    Shpejtojmë Ansible me ndihmën e Mitogen

Le të provojmë një skenar me disa (3) makina të largëta, për shembull skenari me kopjimin e skedarëve në një host të largët:
Shpejtojmë Ansible me ndihmën e Mitogen

Siç duket, Mitogen na kursen si kohë ashtu edhe trafik në këto skenarë. Por nëse "ngërçi" nuk është në Ansible, por p.sh. në I/O të diskut ose rrjetit, ose kudo tjetër, atëherë është e vështirë të presim që Mitogen të na ndihmojë.

Le të provojmë një skenar me instaluar paketat me yum/dnf dhe modulet python duke përdorur pip. Paketat u ruajtën në cache që të mos varen nga problemet në rrjet:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Instaloni paketet
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Instaloni modulët pip
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Me Mitogen, kjo mori 12 sekonda, ashtu si pa të.
Në faqe Mitogen për faqen Ansible mund të shihni benchmarks dhe teste të tjera. Siç përmendet në faqe:

Mitogen nuk mund ta përshpejtojë një modul kur ai ekzekutohet. Ai mund vetëm ta bëjë ekzekutimin e këtij moduli të shpejtë sa më shumë që është e mundur.

Prandaj, është e rëndësishme të identifikoni pika të ngushta në shpërndarje dhe, nëse ato janë për shkak të Ansible, atëherë Mitogen do t'ju ndihmojë t'i zgjidhni ato dhe të përshpejtoni ndjeshëm ekzekutimin e playbooks tuaj.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster