Mitogen yordamida Ansible tezligini oshirish

E'tirof etiladi eng mashhurlaridan biriga aylandi Tizim konfiguratsiyasini boshqarish. Keyin Red Hat tomonidan sotib olingan 2015 yilda bu raqam loyiha ishtirokchilari mingdan oshdi va Ansible, ehtimol, eng ko'p ishlatiladigan joylashtirish va orkestratsiya tizimiga aylandi. Uning keng doiradagi ilovalari juda ta'sirli.

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 SSH quvurlari Bu har safar yangi seans ochish o'rniga ko'rsatmalarni bajarish uchun bitta SSH seansidan foydalanish imkonini beradi, bu bizga ko'p vaqtni tejash imkonini beradi. (Faqat o'chirishni unutmang requiretty sudo uchun sozlash /etc/sudoers masofaviy kompyuterdagi fayl)

Ansible-ni overclock qilishning yangi usuli - bu python kutubxonasi Mitogen. Agar kimdir bu haqda eshitmagan bo'lsa, men uning funksionalligini qisqacha tasvirlab beraman. Bu masofaviy kompyuterda python kodini tez bajarish imkonini beradi va Ansible foydalanishning faqat bir misolidir. Mitogen masofaviy mashinada UNIX trubkasidan foydalanadi va zlib bilan siqilgan va pikle bilan ketma-ketlashtirilgan python kodini uzatadi. Bu uni tezroq bajarishga yordam beradi va trafikni tejaydi. Agar siz batafsilroq tushuntirishga qiziqsangiz, bu haqda sahifada o'qish yaxshidir "U qanday ishlaydi". Ammo bugun biz faqat kutubxonaning Ansible bilan qanday ishlashiga e'tibor qaratamiz.

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):
    Mitogen yordamida Ansible tezligini oshirish

  • Uzoq hostda fayllarni yaratish uchun skript copy modul:
    Mitogen yordamida Ansible tezligini oshirish

  • Masofaviy xostdan mahalliy kompyuterga fayllarni yuklab olish stsenariysi:
    Mitogen yordamida Ansible tezligini oshirish

Keling, bir nechta (3) masofaviy mashinalar bilan stsenariyni sinab ko'raylik, masalan, fayllarni masofaviy xostga nusxalash stsenariysi:
Mitogen yordamida Ansible tezligini oshirish

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 Ansible sahifasi uchun mitogen siz boshqa ko'rsatkichlar va testlarni ko'rishingiz mumkin. Sahifada aytilganidek:

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

a Izoh qo'shish