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

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster