Ansible paātrināŔana ar Mitogen

Iespējams kļuva par vienu no populārākajiem Sistēmas konfigurācijas pārvaldÄ«ba. Pēc iegādājās Red Hat 2015. gadā numurs projekta dalÄ«bnieki pārsniedza tÅ«kstoÅ”us, un Ansible kļuva par, iespējams, visvairāk izmantoto izvietoÅ”anas un orÄ·estrÄ“Å”anas sistēmu. Tās plaÅ”ais lietojumu klāsts ir ļoti iespaidÄ«gs.

Ansible darbojas, izmantojot SSH savienojumus ar attāliem saimniekiem. Tas atver SSH sesiju, piesakās, tÄ«klā kopē Python kodu un ieraksta to atseviŔķā pagaidu failā. Pēc tam tas palaiž Å”o failu attālajā datorā. Visa Ŕī darbÄ«bu secÄ«ba ir diezgan gara un nogurdinoÅ”a, tāpēc ir dažādi veidi, kā to optimizēt.

Viens no Å”iem veidiem ir SSH cauruļvadi kas ļauj izmantot vienu SSH sesiju, lai izpildÄ«tu instrukcijas, nevis katru reizi atvērtu jaunu sesiju, kas var mums ietaupÄ«t daudz laika. (VienkārÅ”i atcerieties izslēgt requiretty iestatÄ«jums sudo jÅ«su /etc/sudoers fails attālajā maŔīnā)

Jauns veids, kā pārspÄ«lēt Ansible, ir python bibliotēka ar nosaukumu Mitogēns. Ja kāds par to nav dzirdējis, es Ä«si aprakstÄ«Å”u tā funkcionalitāti. Tas ļauj ātri izpildÄ«t python kodu attālā maŔīnā, un Ansible ir tikai viens lietoÅ”anas piemērs. Mitogen izmanto UNIX cauruli attālajā maŔīnā un pārsÅ«ta python kodu, kas saspiests ar zlib un serializēts ar marinētu. Tas palÄ«dz to pabeigt ātrāk un ietaupa satiksmi. Ja interesē sÄ«kāks skaidrojums, vislabāk par to lasÄ«t lapā "Kā tas strādā". Taču Å”odien pievērsÄ«simies tikai tam, kā bibliotēka strādā ar Ansible.

Mitogen noteiktos apstākļos var vairākas reizes paātrināt jÅ«su Ansible kodu un ievērojami samazināt satiksmes patēriņu. ApskatÄ«sim populārākos lietoÅ”anas gadÄ«jumus un redzēsim, cik ļoti tas mums palÄ«dz.

Es visvairāk izmantoju Ansible: konfigurācijas failu izveidei attālā datorā, pakotņu instalÄ“Å”anai, failu kopÄ“Å”anai uz attālo maŔīnu un no tās. VarbÅ«t jums ir citi piemēri - rakstiet komentāros.

Iesim!

Ansible mitogēna konfigurācija ir ļoti vienkārÅ”a:
Instalējiet Mitogen bibliotēku:

pip install mitogen

Tagad ir divi lÄ«dzvērtÄ«gi veidi - vai nu konfigurēt opcijas ansible.cfg konfigurācijas failā, vai iestatÄ«t nepiecieÅ”amos vides mainÄ«gos.

Pieņemsim, ka ceļŔ uz uzstādÄ«to Mitogēnu bÅ«s /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Pēc tam:

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

vai

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

Instalēsim Ansible programmā virtualenv ar un bez 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

LÅ«dzu, ņemiet vērā, ka Mitogen 0.2.7 nedarbojas ar Ansible 2.8 (no 2019. gada maija)

Pseidonīmu izveide:

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'

Tagad mēģināsim palaist rokasgrāmatu, kas izveido failus attālā maŔī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 }}

Palaidīsim to ar un bez Mitogen, lai izveidotu 10 failus:

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

Mēs redzam divkārÅ”u uzlabojumu. PārbaudÄ«sim 2, 20, ..., 30 failus:

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

Rezultātā mēs paātrinājām izpildi vairāk nekā 10 reizes!
Tagad izmēģināsim dažādus scenārijus un redzēsim, cik daudz ātrāk viss darbojas mūsu labā:

  • Skripts failu kopÄ“Å”anai uz attālo resursdatoru no vietējā (ar moduli copy):
    Ansible paātrināŔana ar Mitogen

  • Skripts failu izveidei attālā resursdatorā ar copy modulis:
    Ansible paātrināŔana ar Mitogen

  • Scenārijs ar failu lejupielādi no attālā resursdatora uz vietējo:
    Ansible paātrināŔana ar Mitogen

Izmēģināsim scenāriju ar vairākām (3) attālajām iekārtām, piemēram, scenāriju ar failu kopÄ“Å”anu uz attālo resursdatoru:
Ansible paātrināŔana ar Mitogen

Kā redzat, Mitogen Å”ajos scenārijos ietaupa gan laiku, gan satiksmi. Bet, ja saÅ”aurinājums nav Ansible, bet, piemēram, diska vai tÄ«kla I/O vai kaut kur citur, tad ir grÅ«ti sagaidÄ«t, ka Mitogen mums palÄ«dzēs.

Izmēģināsim skriptu, instalējot pakotnes ar yum/dnf un python moduļiem, izmantojot pip. Pakotnes tika saglabātas keÅ”atmiņā, lai tās nebÅ«tu atkarÄ«gas no tÄ«kla kļūmēm:

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

Ar Mitogen tas aizņēma 12 sekundes, tāpat kā bez tā.
Lapā Mitogen for Ansible lapa varat apskatīt citus etalonus un testus. Kā teikts lapā:

Mitogen nevar paātrināt moduli, kad tas darbojas. Tas var tikai padarÄ«t Ŕī moduļa izpildi pēc iespējas ātrāku.

Tāpēc ir svarÄ«gi atrast savas izvietoÅ”anas vājās vietas un, ja tās ir saistÄ«tas ar Ansible, Mitogen palÄ«dzēs tās atrisināt un ievērojami paātrinās jÅ«su rokasgrāmatu izpildi.

Avots: www.habr.com

Pievieno komentāru