Pagpadali sa Ansible sa Mitogen

Ansible nahimong usa sa labing inila Pagdumala sa Pag-configure sa Sistema... Pagkahuman gipalit sa Red Hat sa 2015 ang gidaghanon mga partisipante sa proyekto milapas sa libu-libo ug ang Ansible tingali ang labing gigamit nga sistema sa pag-deploy ug orkestra. Ang halapad nga mga aplikasyon niini impresibo kaayo.

Ansible nagtrabaho sa mga koneksyon sa SSH sa hilit nga mga host. Nag-abli kini og sesyon sa SSH, nag-log in, nagkopya sa Python code sa network ug gisulat kini sa bulag nga temporaryo nga file. Pagkahuman niana, gipadagan kini nga file sa hilit nga makina. Kini nga tibuuk nga han-ay sa mga operasyon medyo taas ug kapoy, mao nga adunay lainlaing mga paagi aron ma-optimize kini.

Usa niini nga mga paagi mao ang SSH pipelines nga nagtugot kanimo sa paggamit sa usa ka sesyon sa SSH aron ipatuman ang mga panudlo, imbes nga magbukas ug bag-ong sesyon matag higayon, nga makaluwas kanamo daghang oras. (Hinumdomi lang nga i-off requiretty setting para sa sudo sa imong /etc/sudoers file sa hilit nga makina)

Usa ka bag-ong paagi sa pag-overclock sa Ansible usa ka librarya sa python nga gitawag Mitogen. Kung adunay bisan kinsa nga wala makadungog bahin niini, akong ihulagway sa kadali ang pagpaandar niini. Gitugotan niini ang paspas nga pagpatuman sa code sa python sa usa ka hilit nga makina, ug ang Ansible usa ra ka pananglitan sa paggamit. Ang Mitogen naggamit ug UNIX nga tubo sa hilit nga makina ug gibalhin ang code sa python nga gi-compress sa zlib ug gi-serialize sa pickle. Kini makatabang sa pagkompleto niini nga mas paspas ug makaluwas sa trapiko. Kung interesado ka sa usa ka mas detalyado nga katin-awan, labing maayo nga basahon ang bahin niini sa panid "Giunsa kini pagtrabaho". Apan karon magpunting lamang kami sa kung giunsa ang librarya nagtrabaho sa Ansible.

Ang Mitogen sa pipila ka mga kahimtang makapadali sa imong Ansible code sa makadaghang higayon ug makapakunhod pag-ayo sa konsumo sa trapiko. Atong tan-awon ang pinakasikat nga mga kaso sa paggamit ug tan-awon kon unsa ka dako kini sa pagtabang kanato.

Gigamit nako ang Ansible sa kadaghanan para sa: paghimo sa mga file sa pag-configure sa usa ka hilit nga makina, pag-install sa mga pakete, pagkopya sa mga file ngadto ug gikan sa hilit nga makina. Tingali adunay ka ubang mga pananglitan - isulat sa mga komento.

Tana!

Ang pagsumpo sa mitogen alang sa Ansible yano ra:
I-install ang librarya sa Mitogen:

pip install mitogen

Karon adunay duha ka managsama nga mga paagi - mahimo nga i-configure ang mga kapilian sa ansible.cfg configuration file, o itakda ang gikinahanglan nga mga variable sa palibot.

Atong hunahunaon nga ang agianan padulong sa na-install nga Mitogen /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. unya:

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

o

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

Atong i-install ang Ansible sa virtualenv, nga adunay ug wala ang 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

Palihug timan-i nga ang Mitogen 0.2.7 dili molihok sa Ansible 2.8 (sa Mayo 2019)

Paghimo og mga alias:

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'

Karon atong sulayan ang pagpadagan sa usa ka playbook nga nagmugna og mga file sa usa ka hilit nga makina:

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

Ug atong padaganon kini uban ug wala ang Mitogen aron makahimo og 10 ka mga file:

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

Nakita namon ang 2 ka pilo nga pag-uswag. Atong susihon ang 20, 30, ..., 100 nga mga file:

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

Ingon usa ka sangputanan, gipadali namon ang pagpatay sa kapin sa 10 ka beses!
Karon atong sulayan ang lainlaing mga senaryo ug tan-awon kung unsa ka paspas ang tanan alang kanato:

  • Script alang sa pagkopya sa mga file ngadto sa usa ka hilit nga host gikan sa usa ka lokal (uban ang module copy):
    Pagpadali sa Ansible sa Mitogen

  • Script alang sa paghimo og mga file sa usa ka hilit nga host nga adunay copy module:
    Pagpadali sa Ansible sa Mitogen

  • Scenario sa pag-download sa mga file gikan sa usa ka hilit nga host ngadto sa usa ka lokal:
    Pagpadali sa Ansible sa Mitogen

Atong sulayan ang usa ka senaryo nga adunay daghang (3) hilit nga mga makina, pananglitan usa ka senaryo nga adunay pagkopya sa mga file sa usa ka hilit nga host:
Pagpadali sa Ansible sa Mitogen

Sama sa imong nakita, ang Mitogen nagluwas kanamo sa oras ug trapiko sa kini nga mga senaryo. Apan kung ang bottleneck wala sa Ansible, apan pananglitan sa I / O sa usa ka disk o network, o bisan asa, nan lisud ang pagdahum nga ang Mitogen makatabang kanato.

Atong sulayan ang usa ka script nga adunay pag-install sa mga pakete nga adunay yum/dnf ug mga module sa python gamit ang pip. Ang mga pakete gi-cache aron dili magdepende sa mga glitches sa network:

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

Uban sa Mitogen mikuha kini og 12 segundos, sama sa wala niini.
Sa panid Mitogen para sa Ansible nga panid mahimo nimong tan-awon ang ubang mga benchmark ug mga pagsulay. Sama sa giingon sa panid:

Ang Mitogen dili makapadali sa module kung kini nagdagan. Makahimo lamang kini sa pagpatuman niini nga modyul nga labing paspas kutob sa mahimo.

Busa, hinungdanon nga makit-an ang imong mga bottleneck sa imong pag-deploy ug kung kini tungod sa Ansible, nan ang Mitogen motabang kanimo sa pagsulbad niini ug labi nga mapadali ang pagpatuman sa imong mga playbook.

Source: www.habr.com

Idugang sa usa ka comment