Mitogen ilə Ansible sürətləndirilməsi

Yoxdur ən məşhurlarından birinə çevrildi Sistem Konfiqurasiya İdarəetmə... sonra Red Hat tərəfindən alınıb 2015 sayı layihə iştirakçıları minlərlə insanı keçdi və Ansible, ehtimal ki, ən çox istifadə edilən yerləşdirmə və orkestrləşdirmə sistemi oldu. Onun geniş tətbiq dairəsi çox təsir edicidir.

Ansible uzaq hostlara SSH bağlantıları vasitəsilə işləyir. O, SSH sessiyasını açır, daxil olur, Python kodunu şəbəkə üzərindən köçürür və onu ayrıca müvəqqəti fayla yazır. Bundan sonra, bu faylı uzaq maşında işlədir. Bütün bu əməliyyatlar ardıcıllığı olduqca uzun və yorucudur, ona görə də onu optimallaşdırmağın müxtəlif yolları var.

Bu yollardan biri SSH boru kəmərləri bu bizə hər dəfə yeni seans açmaq əvəzinə təlimatları yerinə yetirmək üçün bir SSH seansından istifadə etməyə imkan verir ki, bu da bizə çox vaxt qənaət edə bilər. (Sadəcə deaktiv etməyi unutmayın requiretty sudo üçün parametrlər /etc/sudoers uzaq maşındakı fayl)

Ansible-ı "overclock" etməyin yeni yolu adı ilə python kitabxanasıdır Mitogen. kimsə bu barədə eşitməyibsə, onda onun funksionallığını qısaca təsvir edəcəyəm. Bu, uzaq bir maşında python kodunun sürətli icrasına imkan verir və Ansible istifadə vəziyyətlərindən yalnız biridir. Mitogen uzaq maşında UNIX borusundan istifadə edir və zlib ilə sıxılmış və turşu ilə seriallaşdırılmış python kodunu ötürür. Bu, onu daha sürətli başa çatdırmağa kömək edir və bant genişliyinə qənaət edir. Daha ətraflı izahatla maraqlanırsınızsa, bu barədə səhifədə oxumaq yaxşıdır "Bu necə işləyir". Ancaq bu gün biz yalnız kitabxananın Ansible ilə necə işlədiyinə diqqət yetirəcəyik.

Mitogen müəyyən şərtlər altında Ansible kodunuzu bir neçə dəfə sürətləndirə və trafik istehlakını əhəmiyyətli dərəcədə azalda bilər. Ən populyar istifadə hallarını nəzərdən keçirək və bunun bizə necə kömək etdiyini görək.

Ansible-dan ən çox istifadə etdiyim şeylər bunlardır: uzaq maşında konfiqurasiya faylları yaratmaq, paketləri quraşdırmaq, faylları uzaq maşına və ya uzaq maşından köçürmək. Bəlkə də başqa nümunələriniz var - şərhlərdə yazın.

Gidelim!

Ansible üçün Mitogen konfiqurasiyası çox sadədir:
Mitogen kitabxanasını quraşdırın:

pip install mitogen

İndi iki ekvivalent yol var - ya ansible.cfg konfiqurasiya faylında seçimləri konfiqurasiya edin, ya da lazımi mühit dəyişənlərini təyin edin.

Güman edək ki, quraşdırılmış Mitogenə gedən yol olacaq /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Sonra:

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

və ya

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

Ansible-ı virtualenv-də Mitogen ilə və ya onsuz quraşdırın:

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

Nəzərə alın ki, Mitogen 0.2.7 Ansible 2.8 ilə işləmir (2019-cu ilin may ayına kimi)

Ləqəblərin yaradılması:

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'

İndi uzaq bir maşında fayllar yaradan oyun kitabını işə salmağa çalışaq:

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

Və 10 fayl yaratmaq üçün Mitogen ilə və olmadan işləyin:

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

2x yaxşılaşma görürük. 20, 30, ..., 100 faylı yoxlayaq:

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

Nəticədə icranı 10 dəfədən çox sürətləndirdik!
İndi fərqli ssenariləri sınayaq və hər şeyin bizim üçün nə qədər sürətli işlədiyini görək:

  • Faylları yerli hostdan uzaq hosta köçürmək üçün skript (modul ilə copy):
    Mitogen ilə Ansible sürətləndirilməsi

  • Uzaq hostda fayl yaratmaq üçün skript copy modul:
    Mitogen ilə Ansible sürətləndirilməsi

  • Uzaq hostdan yerli birinə faylların endirilməsi ilə ssenari:
    Mitogen ilə Ansible sürətləndirilməsi

Faylları uzaq hosta köçürmək kimi bir neçə (3) uzaq maşınla ssenarini sınayaq:
Mitogen ilə Ansible sürətləndirilməsi

Gördüyünüz kimi, Mitogen bu ssenarilərdə bizə həm vaxta, həm də trafikə qənaət edir. Ancaq "darboğaz" Ansible-da deyil, məsələn, diskin giriş/çıxışında və ya şəbəkədə və ya başqa yerdədirsə, o zaman Mitogenin bizə kömək etməsini gözləmək çətindir.

Yum/dnf paketləri və pip-dən istifadə edərək python modullarının quraşdırılması ilə bir ssenarini sınayaq. Şəbəkədəki nasazlıqlardan asılı olmamaq üçün paketlər keşləndi:

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

Mitogen ilə 12 saniyə çəkdi, həm də onsuz.
Səhifədə Ansible səhifəsi üçün mitogen digər etalonları və testləri görə bilərsiniz. Səhifədə deyildiyi kimi:

Mitogen modulu işləyərkən sürətləndirə bilməz. O, yalnız bu modulun icrasını mümkün qədər tez edə bilər.

Buna görə də, yerləşdirmə darboğazlarınızı tapmaq vacibdir və əgər onlar Ansible ilə bağlıdırsa, Mitogen onları həll etməyə kömək edəcək və oyun kitablarınızın icrasını əhəmiyyətli dərəcədə sürətləndirəcəkdir.

Mənbə: www.habr.com

Добавить комментарий