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 requiretty
sudo üçün parametrlər /etc/sudoers
uzaq maşındakı fayl)
Ansible-ı "overclock" etməyin yeni yolu adı ilə python kitabxanasıdır
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
):
-
Uzaq hostda fayl yaratmaq üçün skript
copy
modul:
-
Uzaq hostdan yerli birinə faylların endirilməsi ilə ssenari:
Faylları uzaq hosta köçürmək kimi bir neçə (3) uzaq maşınla ssenarini sınayaq:
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ə
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