Забрзување на Ansible со Митоген

Ansible стана еден од најпопуларните Управување со конфигурација на системот. По беше купен од Red Hat во 2015 година бројот учесници во проектот надмина илјадници и Ansible стана веројатно најкористениот систем за распоредување и оркестрација. Неговиот широк опсег на апликации е многу импресивен.

Ansible работи преку SSH врски со оддалечени хостови. Отвора SSH сесија, се најавува, го копира кодот на Python преку мрежата и го запишува во посебна привремена датотека. После тоа, ја извршува оваа датотека на оддалечената машина. Целата оваа низа на операции е прилично долга и мачна, па затоа постојат различни начини да се оптимизира.

Еден од овие начини е SSH цевководи што ви овозможува да користите една SSH сесија за извршување инструкции, наместо да отворате нова сесија секој пат, што може да ни заштеди многу време. (Само не заборавајте да го исклучите requiretty поставување за судо во вашиот /etc/sudoers датотека на оддалечената машина)

Нов начин за оверклокување на Ansible е библиотеката со питон наречена Митоген. Ако некој не слушнал за него, накратко ќе ја опишам неговата функционалност. Овозможува брзо извршување на python код на оддалечена машина, а Ansible е само еден пример за употреба. Митоген користи цевка UNIX на оддалечената машина и пренесува python код компримиран со zlib и серијализиран со кисели краставички. Ова помага да се заврши побрзо и заштедува сообраќај. Доколку ве интересира подетално објаснување, најдобро е да прочитате за тоа на страницата "Како работи". Но, денес ќе се фокусираме само на тоа како работи библиотеката со Ansible.

Митоген во одредени околности може да го забрза вашиот Ansible код неколку пати и значително да ја намали потрошувачката на сообраќај. Ајде да ги провериме најпопуларните случаи за употреба и да видиме колку тоа ни помага.

Најмногу користам Ansible за: создавање датотеки за конфигурација на оддалечена машина, инсталирање пакети, копирање датотеки до и од оддалечената машина. Можеби имате други примери - напишете во коментарите.

Ајде да одиме!

Конфигурацијата на митоген за Ansible е многу едноставна:
Инсталирајте ја библиотеката Mitogen:

pip install mitogen

Сега постојат два еквивалентни начини - или конфигурирајте ги опциите во конфигурациската датотека ansible.cfg или поставете ги потребните променливи на околината.

Да претпоставиме дека патеката до инсталираниот Митоген ќе биде /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Потоа:

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

или

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

Ајде да инсталираме Ansible во virtualenv, со и без Митоген:

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

Имајте предвид дека Митоген 0.2.7 не работи со Ansible 2.8 (од мај 2019 година)

Правење псевдоними:

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'

Сега ајде да се обидеме да извршиме Playbook што создава датотеки на оддалечена машина:

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

Ајде да го извршиме со и без Митоген за да создадеме 10 датотеки:

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

Гледаме 2-кратно подобрување. Ајде да провериме за 20, 30, ..., 100 датотеки:

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

Како резултат на тоа, го забрзавме извршувањето за повеќе од 10 пати!
Сега да пробаме различни сценарија и да видиме колку побрзо сè работи за нас:

  • Скрипта за копирање датотеки на оддалечен домаќин од локален (со модулот copy):
    Забрзување на Ansible со Митоген

  • Скрипта за креирање датотеки на оддалечен домаќин со copy модул:
    Забрзување на Ansible со Митоген

  • Сценарио со преземање датотеки од оддалечен домаќин на локален:
    Забрзување на Ansible со Митоген

Ајде да пробаме сценарио со неколку (3) оддалечени машини, на пример сценарио со копирање датотеки на оддалечен домаќин:
Забрзување на Ansible со Митоген

Како што можете да видите, Митоген ни заштедува и време и сообраќај во овие сценарија. Но, ако тесното грло не е во Ansible, туку на пример во I/O на диск или мрежа, или на друго место, тогаш тешко е да се очекува дека Mitogen ќе ни помогне.

Ајде да пробаме скрипта со инсталирање пакети со yum/dnf и python модули користејќи pip. Пакетите беа кеширани за да не зависат од грешки во мрежата:

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

Со Митоген беа потребни 12 секунди, исто како и без него.
На страница Митоген за страницата Ansible можете да погледнете други репери и тестови. Како што стои на страницата:

Митоген не може да го забрза модулот кога работи. Може само да го направи извршувањето на овој модул што е можно побрзо.

Затоа, важно е да ги пронајдете вашите тесни грла во вашето распоредување и ако тие се должат на Ansible, тогаш Mitogen ќе ви помогне да ги решите и значително да го забрза извршувањето на вашите книги за играње.

Извор: www.habr.com

Додадете коментар