Mitogen рдХреЛ рд╕рд╛рде рдЙрддреНрддрд░рджрд╛рдпреА рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ

рдЕрдЬреНрдЮрд╛рдд рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдордзреНрдпреЗ рдПрдХ рднрдпреЛ рдкреНрд░рдгрд╛рд▓реА рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдиред рдкрдЫрд┐ Red Hat рджреНрд╡рд╛рд░рд╛ рдЦрд░рд┐рдж рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ 2015 рдорд╛ рд╕рдВрдЦреНрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╣рднрд╛рдЧреАрд╣рд░реВ рд╣рдЬрд╛рд░реМрдВ рдирд╛рдШреНрдпреЛ рд░ Ansible рд╕рдореНрднрд╡рддрдГ рд╕рдмреИрднрдиреНрджрд╛ рдмрдвреА рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд░ рдЕрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдкреНрд░рдгрд╛рд▓реА рдмрдиреНрдпреЛред рдпрд╕рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддреГрдд рджрд╛рдпрд░рд╛ рдзреЗрд░реИ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЫред

рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрд╣рд░реВрдорд╛ SSH рдЬрдбрд╛рдирд╣рд░реВрдорд╛ рдЙрддреНрддрд░рджрд╛рдпреА рдХрд╛рд░реНрдпрд╣рд░реВред рдпрд╕рд▓реЗ SSH рд╕рддреНрд░ рдЦреЛрд▓реНрдЫ, рд▓рдЧ рдЗрди рдЧрд░реНрдЫ, рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкрд╛рдЗрдерди рдХреЛрдб рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦреНрдЫред рддреНрдпрд╕ рдкрдЫрд┐, рдпрд╕рд▓реЗ рдпреЛ рдлрд╛рдЗрд▓ рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдЪрд▓рд╛рдЙрдБрдЫред рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдХреНрд░рдо рдирд┐рдХреИ рд▓рд╛рдореЛ рд░ рдердХрд╛рдЗрд▓рд╛рдЧреНрджреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред

рдпреА рдордзреНрдпреЗ рдПрдХ рддрд░рд┐рдХрд╛ рд╣реЛ SSH рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдирдпрд╛рдБ рд╕рддреНрд░ рдЦреЛрд▓реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдПрдЙрдЯрд╛ SSH рд╕рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рд╕рдордп рдмрдЪрд╛рдЙрди рд╕рдХреНрдЫред (рдмрд╕ рдмрдиреНрдж рдЧрд░реНрди рд╕рдореНрдЭрдиреБрд╣реЛрд╕реН requiretty рддрдкрд╛рдИрдВрдХреЛ рдорд╛ sudo рдХреЛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩ /etc/sudoers рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдлрд╛рдЗрд▓)

рдУрднрд░рдХреНрд▓реЛрдХ Ansible рдХреЛ рдирдпрд╛рдБ рддрд░рд┐рдХрд╛ рдкрд╛рдЗрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднрдирд┐рдиреНрдЫ рдорд╛рдЗрдЯреЛрдЬреЗрдиред рдпрджрд┐ рдХрд╕реИрд▓реЗ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реБрдиреЗрдХреЛ рдЫреИрди рднрдиреЗ, рдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрдорд╛ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБред рдпрд╕рд▓реЗ рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдкрд╛рдЗрдерди рдХреЛрдбрдХреЛ рдЫрд┐рдЯреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рд░ Ansible рдкреНрд░рдпреЛрдЧрдХреЛ рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рддреНрд░ рд╣реЛред Mitogen рд▓реЗ рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ UNIX рдкрд╛рдЗрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ zlib рд╕рдБрдЧ рдХрдореНрдкреНрд░реЗрд╕ рдЧрд░рд┐рдПрдХреЛ рд░ рдЕрдЪрд╛рд░рдХреЛ рд╕рд╛рде рдХреНрд░рдордмрджреНрдз рдЧрд░реА рдкрд╛рдЗрдерди рдХреЛрдб рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ рдпрд╕рд▓рд╛рдИ рдЫрд┐рдЯреЛ рдкреВрд░рд╛ рдЧрд░реНрди рд░ рдЯреНрд░рд╛рдлрд┐рдХ рдмрдЪрдд рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдердк рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдкреГрд╖реНрдардорд╛ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдкрдвреНрдиреБ рдЙрддреНрддрдо рд╣реБрдиреНрдЫ "рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ"ред рддрд░ рдЖрдЬ рд╣рд╛рдореА рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ Ansible рд╕рдБрдЧ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗрдорд╛ рдорд╛рддреНрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдорд┐рдЯреЛрдЬреЗрдирд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдЙрддреНрддрд░рджрд╛рдпреА рдХреЛрдбрд▓рд╛рдИ рдзреЗрд░реИ рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди рд░ рдЯреНрд░рд╛рдлрд┐рдХ рдЦрдкрддрд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдШрдЯрд╛рдЙрди рд╕рдХреНрдЫред рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдпреЛрдЧ рдХреЗрд╕рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реМрдВ рд░ рд╣реЗрд░реМрдВ рдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдХрддрд┐ рдорджреНрджрдд рдЧрд░реНрдЫред

рдореИрд▓реЗ Ansible рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ: рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ, рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ, рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рд░ рдмрд╛рдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗред рд╕рд╛рдпрдж рддрдкрд╛рдИрдВрд╕рдБрдЧ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН - рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред

рдЪрд▓реЛ рдЬрд╛рдиреБрд╣реЛрд╕реН!

Ansible рдХреЛ рд▓рд╛рдЧрд┐ Mitogen рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдзреЗрд░реИ рд╕рд░рд▓ рдЫ:
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 рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рдБрдЪ рдЧрд░реМрдВ:

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):
    Mitogen рдХреЛ рд╕рд╛рде рдЙрддреНрддрд░рджрд╛рдпреА рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ

  • рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд▓рд┐рдкрд┐ copy рдореЛрдбреНрдпреБрд▓:
    Mitogen рдХреЛ рд╕рд╛рде рдЙрддреНрддрд░рджрд╛рдпреА рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ

  • рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдмрд╛рдЯ рд╕реНрдерд╛рдиреАрдпрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп:
    Mitogen рдХреЛ рд╕рд╛рде рдЙрддреНрддрд░рджрд╛рдпреА рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ

рдзреЗрд░реИ (3) рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирд╣рд░реВрд╕рдБрдЧ рдПрдЙрдЯрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗ рдкрд░рд┐рджреГрд╢реНрдп:
Mitogen рдХреЛ рд╕рд╛рде рдЙрддреНрддрд░рджрд╛рдпреА рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, Mitogen рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпреА рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВрдорд╛ рд╕рдордп рд░ рдЯреНрд░рд╛рдлрд┐рдХ рджреБрд╡реИ рдмрдЪрдд рдЧрд░реНрджрдЫред рддрд░ рдпрджрд┐ рдмрд╛рдзрд╛ рдЙрддреНрддрд░рджрд╛рдпреАрдорд╛ рдЫреИрди, рддрд░ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдбрд┐рд╕реНрдХ рд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ I/O рдорд╛, рд╡рд╛ рдЕрд░реВ рдХрддреИ, рддрдм Mitogen рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ рднрдиреНрдиреЗ рдЖрд╢рд╛ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫред

рдкрд┐рдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 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 рд╕реЗрдХреЗрдиреНрдб рд▓рд┐рдП, рдпреЛ рдмрд┐рдирд╛ рдЬрд╕реНрддреИред
рдкреГрд╖реНрдардорд╛ рдЙрддреНрддрд░рджрд╛рдпреА рдкреГрд╖реНрдардХреЛ рд▓рд╛рдЧрд┐ Mitogen рддрдкрд╛рдИрдВ рдЕрдиреНрдп рдмреЗрдиреНрдЪрдорд╛рд░реНрдХ рд░ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкреГрд╖реНрдард▓реЗ рдпрд╕реЛ рднрдиреНрдЫ:

рдпреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдмреЗрд▓рд╛ Mitogen рдореЛрдбреНрдпреБрд▓ рдЧрддрд┐ рдЧрд░реНрди рд╕рдХреНрджреИрдиред рдпрд╕рд▓реЗ рдпреЛ рдореЛрдбреНрдпреБрд▓рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд╕рдХреЗрд╕рдореНрдо рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрди рд╕рдХреНрдЫред

рддрд╕рд░реНрде, рддрдкрд╛рдЗрдБрдХреЛ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯрдорд╛ рддрдкрд╛рдЗрдБрдХреЛ рдмрд╛рдзрд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рд░ рдпрджрд┐ рддреА рдЙрддреНрддрд░рджрд╛рдпреА рдХрд╛рд░рдгрд▓реЗ рдЫрдиреН рднрдиреЗ, Mitogen рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддреА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд░ рддрдкрд╛рдЗрдБрдХреЛ рдкреНрд▓реЗрдмреБрдХрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдЧрддрд┐ рджрд┐рди рдорджреНрджрдд рдЧрд░реНрджрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди