Përshpejtimi i Ansible me Mitogen

Ansible u bë një nga më të njohurit Menaxhimi i konfigurimit të sistemit. Pas është blerë nga Red Hat në vitin 2015 numri pjesëmarrësit e projektit tejkaloi mijëra dhe Ansible u bë ndoshta sistemi më i përdorur i vendosjes dhe orkestrimit. Gama e gjerë e aplikimeve të saj është shumë mbresëlënëse.

Ansible funksionon mbi lidhjet SSH me hostet në distancë. Ai hap një sesion SSH, regjistrohet, kopjon kodin Python në rrjet dhe e shkruan atë në një skedar të veçantë të përkohshëm. Pas kësaj, ai e ekzekuton këtë skedar në makinën në distancë. E gjithë kjo sekuencë operacionesh është mjaft e gjatë dhe e lodhshme, kështu që ka mënyra të ndryshme për ta optimizuar atë.

Një nga këto mënyra është Tubacionet SSH i cili ju lejon të përdorni një seancë SSH për të ekzekutuar instruksionet, në vend që të hapni një sesion të ri çdo herë, gjë që mund të na kursejë shumë kohë. (Vetëm mos harroni të fikni requiretty vendosjen për sudo në tuaj /etc/sudoers skedar në makinën në distancë)

Një mënyrë e re për të mbingarkuar Ansible është një bibliotekë python e quajtur Mitogjen. Nëse dikush nuk ka dëgjuar për të, unë do të përshkruaj shkurtimisht funksionalitetin e tij. Ai lejon ekzekutimin e shpejtë të kodit python në një makinë të largët, dhe Ansible është vetëm një shembull i përdorimit. Mitogen përdor një tub UNIX në makinën në distancë dhe transferon kodin python të ngjeshur me zlib dhe të serializuar me turshi. Kjo ndihmon për ta përfunduar atë më shpejt dhe kursen trafikun. Nëse jeni të interesuar për një shpjegim më të detajuar, është mirë të lexoni në lidhje me të në faqe "Si punon". Por sot do të fokusohemi vetëm në mënyrën se si funksionon biblioteka me Ansible.

Mitogen në rrethana të caktuara mund të shpejtojë kodin tuaj Ansible disa herë dhe të zvogëlojë ndjeshëm konsumin e trafikut. Le të shohim rastet më të njohura të përdorimit dhe të shohim se sa shumë na ndihmon.

Unë përdor Ansible më së shumti për: krijimin e skedarëve të konfigurimit në një makinë në distancë, instalimin e paketave, kopjimin e skedarëve në dhe nga makina në distancë. Ndoshta keni shembuj të tjerë - shkruani në komente.

Le të shkojë!

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

pip install mitogen

Tani ka dy mënyra ekuivalente - ose konfiguroni opsionet në skedarin e konfigurimit ansible.cfg, ose vendosni variablat e nevojshme të mjedisit.

Le të supozojmë se rruga për në Mitogjenin e instaluar do të jetë /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Pastaj:

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

Le të instalojmë Ansible në virtualenv, me dhe pa 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

Ju lutemi vini re se Mitogen 0.2.7 nuk funksionon me Ansible 2.8 (që nga maji 2019)

Bërja e pseudonimeve:

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ë një libër luajtjeje që krijon skedarë në një makinë të largët:

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

Dhe le ta ekzekutojmë me dhe pa Mitogen 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 shohim një përmirësim 2-fish. 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 e përshpejtuam ekzekutimin me më shumë se 10 herë!
Tani le të provojmë skenarë të ndryshëm dhe të shohim se sa më shpejt funksionon gjithçka për ne:

  • Skript për kopjimin e skedarëve në një host të largët nga një lokal (me modulin copy):
    Përshpejtimi i Ansible me Mitogen

  • Skript për krijimin e skedarëve në një host të largët me copy moduli:
    Përshpejtimi i Ansible me Mitogen

  • Skenari me shkarkimin e skedarëve nga një host i largët në një lokal:
    Përshpejtimi i Ansible me Mitogen

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

Siç mund ta shihni, Mitogen na kursen kohë dhe trafik në këto skenarë. Por nëse pengesa nuk është në Ansible, por për shembull në hyrjen/daljen e një disku ose rrjeti, ose diku tjetër, atëherë është e vështirë të pritet që Mitogen të na ndihmojë.

Le të provojmë një skript me instalimin e paketave me module yum/dnf dhe python duke përdorur pip. Paketat u ruajtën në memorie në mënyrë që të mos vareshin nga defektet e rrjetit:

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

Me Mitogen u deshën 12 sekonda, njësoj si pa të.
Në faqe Mitogen për faqen Ansible mund të shikoni standarde dhe teste të tjera. Siç thuhet në faqe:

Mitogjeni nuk mund ta përshpejtojë modulin kur është në punë. Mund të bëjë vetëm ekzekutimin e këtij moduli sa më shpejt që të jetë e mundur.

Prandaj, është e rëndësishme të gjeni pengesat tuaja në vendosjen tuaj 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 librave tuaj të lojërave.

Burimi: www.habr.com

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster