Ansible алыскы хостторго SSH байланыштары аркылуу иштейт. Ал SSH сеансын ачып, кирип, Python кодун тармак аркылуу көчүрүп, аны өзүнчө убактылуу файлга жазат. Андан кийин, ал алыскы машинада бул файлды иштетет. Бул операциялардын ырааттуулугу кыйла узун жана түйшүктүү, ошондуктан аны оптималдаштыруунун ар кандай жолдору бар.
Бул жолдордун бири болуп саналат requiretty
сиздин ичинде sudo орнотуу /etc/sudoers
алыскы машинадагы файл)
Ansible'ди ашыкча кылуунун жаңы жолу - бул питон китепканасы
Митоген белгилүү бир шарттарда Ansible кодуңузду бир нече эсе тездетип, трафиктин керектөөсүн олуттуу түрдө азайтышы мүмкүн. Келгиле, эң популярдуу колдонуу учурларын карап көрөлү жана анын бизге канчалык жардам берерин карап көрөлү.
Мен Ansible'ди эң көп колдоном: алыскы машинада конфигурация файлдарын түзүү, пакеттерди орнотуу, файлдарды алыскы машинага жана андан көчүрүү. Балким, сизде башка мисалдар бар - комментарийлерге жазыңыз.
Кеттик!
Ansible үчүн митоген конфигурациясы абдан жөнөкөй:
Mitogen китепканасын орнотуу:
pip install mitogen
Эми эки эквиваленттүү жол бар - же ansible.cfg конфигурация файлындагы параметрлерди конфигурациялаңыз, же керектүү чөйрө өзгөрмөлөрүн орнотуңуз.
орнотулган Mitogen жол болот деп ойлойлу /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
Mitogen менен жана ансыз virtualenvде Ansible орнотолу:
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
Mitogen 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'
Эми алыскы машинада файлдарды түзгөн оюн китебин иштетүүгө аракет кылалы:
---
- 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 файлды түзүү үчүн аны Mitogen менен жана ансыз иштетели:
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
):
-
менен алыскы хостто файлдарды түзүү үчүн скрипт
copy
модулу:
-
Алыскы хосттон жергиликтүү хостко файлдарды жүктөө менен сценарий:
Келгиле, бир нече (3) алыскы машиналар менен сценарийди сынап көрөлү, мисалы файлдарды алыскы хостко көчүрүү сценарийи:
Көрүнүп тургандай, Mitogen бул сценарийлерде бизге убакытты да, трафикти да үнөмдөйт. Бирок кыйынчылык Ansibleде эмес, мисалы, дисктин же тармактын киргизүү/чыгаруусунда же башка жерде болсо, анда Митоген бизге жардам берет деп күтүү кыйын.
Келгиле, yum/dnf жана python модулдары менен пакеттерди орнотуу менен скриптти колдонуп көрөлү. Тармактын мүчүлүштүктөрүнө көз каранды болбоо үчүн пакеттер кэштелген:
---
- 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 менен 12 секунд талап кылынган, ансыз да ошондой эле.
Баракта
Митоген модуль иштеп жатканда ылдамдата албайт. Бул модулдун аткарылышын мүмкүн болушунча тезирээк жасай алат.
Ошондуктан, жайгаштыруудагы тоскоолдуктарды табуу маанилүү жана эгерде алар Ansible менен байланыштуу болсо, анда Mitogen сизге аларды чечүүгө жана окуу китептериңиздин аткарылышын тездетүүгө жардам берет.
Source: www.habr.com