Paātrinām Ansible ar Mitogen

Ansible irbecis viens no populārākajiem Konfigurācijas pārvaldÄ«bas sistēmām. Pēc tam, kad bija iegādāts Red Hat 2015. gadā dalÄ«bnieku skaits projektā pārsniedza tÅ«kstoÅ”iem, un Ansible kļuva, iespējams, par visvairāk izmantoto izvietoÅ”anas un orÄ·estrēŔanas sistēmu. Tās plaŔās pielietoÅ”anas jomas ir ļoti iespaidÄ«gas.

Ansible darbojas caur SSH savienojumiem ar attālinātiem hostiem. Tas atver SSH sesiju, veic pieteikÅ”anos, pārsÅ«ta Python kodu pa tÄ«klu un saglabā to atseviŔķā pagaidu failā. Pēc tam tas palaidÄ«s Å”o failu attālinātajā maŔīnā. Visa Ŕī darbÄ«bu secÄ«ba ir diezgan ilga un apgrÅ«tinoÅ”a, tāpēc ir dažādi veidi, kā to optimizēt.

Viens no Å”iem veidiem ir SSH caurules , kas ļauj izmantot vienu SSH sesiju instrukciju izpildei, nevis katru reizi atvērt jaunu sesiju, kas var ietaupÄ«t mums daudz laika. (Tikai neaizmirstiet izslēgt requiretty iestatÄ«jumu sudo jÅ«su /etc/sudoers failā attālinātajā maŔīnā)

Jaunais veids, kā "uzsākt" Ansible, ir Python bibliotēka ar nosaukumu Mitogen. Ja kāds par to nav dzirdējis — tad Ä«si raksturoÅ”u tās funkcionalitāti. Tā ļauj ātri izpildÄ«t Python kodu attālinātajā maŔīnā, un Ansible ir tikai viens no piemēriem tās izmantoÅ”anā. Mitogen izmanto UNIX cauruli attālinātajā maŔīnā un pārsÅ«ta Python kodu, kas ir saspiests ar zlib un sērijveidā, izmantojot pickle. Tas palÄ«dz to izpildÄ«t ātrāk un ietaupa datu plÅ«smu. Ja jÅ«s interesē detalizētāks izskaidrojums, vislabāk bÅ«tu izlasÄ«t par to lapā "Kā tas darbojas". Taču Å”odien mēs koncentrēsimies tikai uz bibliotēkas darbu ar Ansible.

Mitogen noteiktos apstākļos var paātrināt jūsu Ansible kodu vairākas reizes un būtiski samazināt datu plūsmu. Pārbaudīsim populārākos piemērus un redzēsim, cik lielā mērā tas mums palīdz.

Es visvairāk izmantoju Ansible konfigurācijas failu izveidei attālinātajā maŔīnā, pakotņu instalēŔanai, failu pārsÅ«tīŔanai uz attālināto maŔīnu un atpakaļ. VarbÅ«t jums ir citi piemēri — uzrakstiet komentāros.

Aiziet!

Mitogen konfigurācija Ansible ir ļoti vienkārŔa:
Instalējam Mitogen bibliotēku:

pip install mitogen

Tagad ir divi viena otras lÄ«dzvērtÄ«gi veidi — vai nu iestatÄ«t opcijas ansible.cfg konfigurācijas failā, vai arÄ« iestatÄ«t nepiecieÅ”amās vides mainÄ«gās.

Pieņemsim, ka ceļŔ uz instalēto Mitogen bÅ«s /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Tātad:

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 virtualenv, ar Mitogen un bez 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

Ņemiet vērā, ka Mitogen 0.2.7 nedarbojas ar Ansible 2.8 (maijā 2019)

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

Tagad mēģināsim palaist playbook, kas izveido failus attālinātajā maŔīnā:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Izveidot failus, izmantojot copy moduli
      copy:
        content: |
          test file {{ item }}
        dest: ~\/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Un palaidīsim ar Mitogen un bez tā, 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 uzlabojumu divreiz. PārbaudÄ«sim 20, 30, …, 100 failiem:

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

Kopumā mēs paātrinājām izpildi vairāk nekā 10 reizes!
Tagad mēģināsim dažādus scenārijus un redzēsim, cik ātri viss darbojas:

  • Failu kopēŔanas scenārijs uz attālinātu hostu no lokālā (ar moduli copy):
    Paātrinām Ansible ar Mitogen

  • Failu izveides scenārijs attālinātajā hostā ar copy moduli:
    Paātrinām Ansible ar Mitogen

  • Failu lejupielādes scenārijs no attālinātā hosta uz lokālo:
    Paātrinām Ansible ar Mitogen

Mēģināsim scenāriju ar vairākiem (3) attālinātiem datoriem, piemēram, failu kopēŔanas scenāriju uz attālinātu hostu:
Paātrinām Ansible ar Mitogen

Kā redzams, Mitogen ietaupa gan laiku, gan trafiku Å”ajos scenārijos. Bet, ja "pudeļu kakls" nav Ansible, bet piemēram, I\/O diskā vai tÄ«klā, vai citur, tad ir grÅ«ti gaidÄ«t, ka Mitogen mums palÄ«dzēs.

Mēģināsim scenāriju ar pakotņu instalēŔanu, izmantojot yum\/dnf, un python moduļiem, izmantojot pip. Pakotnes tika keÅ”otas, lai nebÅ«tu atkarÄ«gas no tÄ«kla problēmām:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Instalēt pakotnes
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Instalēt pip moduļus
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Ar Mitogen tas aizņēma 12 sekundes, tāpat kā bez tā.
Lapas sadaļā Mitogen for Ansible lapa JÅ«s varat apskatÄ«t citus salÄ«dzinoÅ”os testus un mēģinājumus. Kā norādÄ«ts lapā:

Mitogen nevar paātrināt moduļus, kad tie tiek izpildÄ«ti. Tas var tikai padarÄ«t Ŕī moduļa izpildi ātrāku, cik vien iespējams.

Tādēļ ir svarÄ«gi atrast savus Å”aurumus izvietoÅ”anas procesā, un, ja tie ir saistÄ«ti ar Ansible, Mitogen palÄ«dzēs jums tos atrisināt un bÅ«tiski paātrināt jÅ«su playbook izpildi.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster