Ansible uzoq hostlarga SSH ulanishlari orqali ishlaydi. U SSH seansini ochadi, tizimga kiradi, Python kodini tarmoq orqali nusxalaydi va uni alohida vaqtinchalik faylga yozadi. Shundan so'ng, u ushbu faylni masofaviy kompyuterda ishga tushiradi. Ushbu operatsiyalar ketma-ketligi juda uzoq va zerikarli, shuning uchun uni optimallashtirishning turli usullari mavjud.
Bu usullardan biri requiretty
sudo uchun sozlash /etc/sudoers
masofaviy kompyuterdagi fayl)
Ansible-ni overclock qilishning yangi usuli - bu python kutubxonasi
Mitogen muayyan sharoitlarda Ansible kodingizni bir necha marta tezlashtirishi va trafik sarfini sezilarli darajada kamaytirishi mumkin. Keling, eng mashhur foydalanish holatlarini ko'rib chiqaylik va bu bizga qanchalik yordam berishini bilib olaylik.
Men Ansible-dan eng ko'p foydalanaman: masofaviy kompyuterda konfiguratsiya fayllarini yaratish, paketlarni o'rnatish, fayllarni masofaviy kompyuterga va undan nusxalash. Ehtimol, sizda boshqa misollar bor - sharhlarda yozing.
Yuringlar!
Ansible uchun mitogen konfiguratsiyasi juda oddiy:
Mitogen kutubxonasini o'rnating:
pip install mitogen
Endi ikkita ekvivalent yo'l bor - yoki ansible.cfg konfiguratsiya faylidagi parametrlarni sozlang yoki kerakli muhit o'zgaruvchilarini o'rnating.
O'rnatilgan Mitogenga yo'l bo'ladi deb faraz qilaylik /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Keyin:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
yoki
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Keling, Ansible-ni virtualenv-ga Mitogen bilan va holda o'rnatamiz:
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
E'tibor bering, Mitogen 0.2.7 Ansible 2.8 bilan ishlamaydi (2019 yil may holatiga ko'ra)
Taxalluslarni yaratish:
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'
Endi masofaviy kompyuterda fayllar yaratadigan o'yin kitobini ishga tushirishga harakat qilaylik:
---
- 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 }}
Keling, 10 ta fayl yaratish uchun uni Mitogen bilan va unsiz ishga tushiramiz:
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
Biz 2 barobar yaxshilanishni ko'ramiz. Keling, 20, 30, ..., 100 ta faylni tekshiramiz:
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
Natijada biz ijroni 10 barobardan ko'proq tezlashtirdik!
Keling, turli stsenariylarni sinab ko'raylik va hamma narsa biz uchun qanchalik tez ishlashini ko'rib chiqamiz:
-
Mahalliy kompyuterdan uzoq xostga fayllarni nusxalash uchun skript (modul bilan
copy
):
-
Uzoq hostda fayllarni yaratish uchun skript
copy
modul:
-
Masofaviy xostdan mahalliy kompyuterga fayllarni yuklab olish stsenariysi:
Keling, bir nechta (3) masofaviy mashinalar bilan stsenariyni sinab ko'raylik, masalan, fayllarni masofaviy xostga nusxalash stsenariysi:
Ko'rib turganingizdek, Mitogen bizni bu stsenariylarda vaqt va trafikni tejaydi. Ammo agar muammo Ansible-da bo'lmasa, masalan, disk yoki tarmoqning kiritish-chiqarish qismida yoki boshqa joyda bo'lsa, Mitogen bizga yordam beradi deb kutish qiyin.
Keling, yum/dnf va pip yordamida python modullari bilan paketlarni o'rnatish bilan skriptni sinab ko'raylik. Paketlar tarmoqdagi nosozliklarga bog'liq bo'lmaslik uchun keshlangan:
---
- 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 bilan 12 soniya davom etdi, xuddi unsiz.
Sahifada
Mitogen modul ishlayotgan vaqtda uni tezlashtira olmaydi. U faqat ushbu modulni iloji boricha tezroq bajarishi mumkin.
Shuning uchun, joylashtirishda qiyinchiliklarni topish juda muhim va agar ular Ansible tufayli bo'lsa, Mitogen sizga ularni hal qilishga yordam beradi va o'yin kitoblaringizning bajarilishini sezilarli darajada tezlashtiradi.
Manba: www.habr.com