Суръат додани Ansible бо Mitogen

Фаҳмост яке аз машхуртарин гардид Идоракунии конфигуратсияи система. Баъди аз ҷониби Red Hat харида шудааст дар соли 2015 шумораи иштирокчиёни лоиҳа аз ҳазорҳо зиёд буд ва Ansible эҳтимолан системаи аз ҳама бештар истифодашавандаи ҷойгиркунӣ ва оркестрсозӣ гардид. Доираи васеи барномаҳои он хеле таъсирбахш аст.

Ansible тавассути пайвастҳои SSH ба ҳостҳои дурдаст кор мекунад. Он сессияи SSH-ро мекушояд, ворид мешавад, рамзи Python-ро тавассути шабака нусхабардорӣ мекунад ва онро ба файли муваққатии алоҳида менависад. Баъд аз ин, он ин файлро дар мошини дурдаст иҷро мекунад. Ин пайдарпайии амалиётҳо хеле тӯлонӣ ва дилгиркунанда аст, аз ин рӯ роҳҳои гуногуни оптимизатсияи он мавҷуданд.

Яке аз ин роххо аст қубурҳои SSH ки ба шумо имкон медиҳад, ки як сеанси SSH-ро барои иҷрои дастурҳо истифода баред, ба ҷои кушодани сессияи нав ҳар дафъа, ки ин метавонад вақти зиёдеро сарфа кунад. (Танҳо фаромӯш накунед, ки хомӯш кунед requiretty танзим барои sudo дар шумо /etc/sudoers файл дар мошини дурдаст)

Роҳи нави overclock Ansible китобхонаи python номида мешавад Митоген. Агар касе дар бораи он нашунида бошад, ман ба таври мухтасар функсияи онро тавсиф мекунам. Он имкон медиҳад, ки рамзи python дар мошини дурдаст иҷро карда шавад ва Ansible танҳо як мисоли истифода аст. Mitogen қубури UNIX-ро дар мошини дурдаст истифода мебарад ва рамзи python-ро, ки бо zlib фишурда шудааст ва бо шарбат серия карда шудааст, интиқол медиҳад. Ин барои зудтар анҷом додани он кӯмак мекунад ва трафикро сарфа мекунад. Агар шумо ба тавзеҳи муфассал таваҷҷӯҳ дошта бошед, беҳтар аст, ки дар ин бора дар саҳифа хонед "Чӣ тавр кор мекунад". Аммо имрӯз мо танҳо ба он таваҷҷӯҳ хоҳем кард, ки китобхона бо 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

Биёед Ansible-ро дар virtualenv бо ва бе Mitogen насб кунем:

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

Ва биёед онро бо ва бидуни Mitogen иҷро кунем, то 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 бо Mitogen

  • Скрипт барои эҷоди файлҳо дар ҳости дурдаст бо copy модул:
    Суръат додани Ansible бо Mitogen

  • Сенария бо зеркашии файлҳо аз ҳости дурдасти маҳаллӣ:
    Суръат додани Ansible бо Mitogen

Биёед сенарияро бо якчанд (3) мошини дурдаст санҷем, масалан сенарияи нусхабардории файлҳо ба ҳости дурдаст:
Суръат додани Ansible бо Mitogen

Тавре ки шумо мебинед, Митоген дар ин сенарияҳо ҳам вақт ва ҳам трафикро сарфа мекунад. Аммо агар монеа дар Ansible набошад, масалан дар I/O-и диск ё шабака ё дар ҷои дигар бошад, пас интизор шудан душвор аст, ки Митоген ба мо кӯмак мекунад.

Биёед скриптро бо насби бастаҳо бо модулҳои 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

Бо Mitogen он 12 сонияро гирифт, ҳамон тавре ки бидуни он.
Дар саҳифаи Mitogen барои саҳифаи Ansible шумо метавонед ба дигар нишондиҳандаҳо ва санҷишҳо нигаред. Тавре ки дар саҳифа омадааст:

Митоген наметавонад модулро ҳангоми кор кардан суръат бахшад. Он танҳо метавонад иҷрои ин модулро ҳарчи зудтар кунад.

Аз ин рӯ, муҳим аст, ки монеаҳои худро дар ҷойгиркунии худ пайдо кунед ва агар онҳо аз ҷониби Ansible бошанд, пас Mitogen ба шумо кӯмак мекунад, ки онҳоро ҳал кунед ва иҷрои китобҳои бозиро ба таври назаррас суръат бахшед.

Манбаъ: will.com

Илова Эзоҳ