Mempercepatkan Ansible dengan Mitogen

Ansible menjadi salah satu yang paling popular Pengurusan Konfigurasi Sistem. Selepas telah dibeli oleh Red Hat pada tahun 2015 bilangannya peserta projek melebihi ribuan dan Ansible mungkin menjadi sistem penempatan dan orkestrasi yang paling banyak digunakan. Pelbagai aplikasinya sangat mengagumkan.

Ansible berfungsi melalui sambungan SSH ke hos jauh. Ia membuka sesi SSH, log masuk, menyalin kod Python melalui rangkaian dan menulisnya ke fail sementara yang berasingan. Selepas itu, ia menjalankan fail ini pada mesin jauh. Seluruh urutan operasi ini agak panjang dan membosankan, jadi terdapat pelbagai cara untuk mengoptimumkannya.

Salah satu cara ini ialah saluran paip SSH yang membolehkan anda menggunakan satu sesi SSH untuk melaksanakan arahan, dan bukannya membuka sesi baharu setiap kali, yang boleh menjimatkan banyak masa kami. (Hanya ingat untuk mematikan requiretty tetapan untuk sudo dalam anda /etc/sudoers fail pada mesin jauh)

Cara baharu untuk melakukan overclock Ansible ialah perpustakaan python yang dipanggil Mitogen. Jika sesiapa tidak pernah mendengarnya, saya akan menerangkan secara ringkas fungsinya. Ia membolehkan pelaksanaan pantas kod python pada mesin jauh, dan Ansible hanyalah satu contoh penggunaan. Mitogen menggunakan paip UNIX pada mesin jauh dan memindahkan kod python yang dimampatkan dengan zlib dan bersiri dengan jeruk. Ini membantu menyelesaikannya dengan lebih cepat dan menjimatkan trafik. Jika anda berminat dengan penjelasan yang lebih terperinci, sebaiknya baca tentangnya di halaman "Bagaimana ia berfungsi". Tetapi hari ini kita hanya akan menumpukan pada cara perpustakaan berfungsi dengan Ansible.

Mitogen dalam keadaan tertentu boleh mempercepatkan kod Ansible anda beberapa kali dan mengurangkan penggunaan trafik dengan ketara. Mari lihat kes penggunaan yang paling popular dan lihat sejauh mana ia membantu kami.

Saya paling banyak menggunakan Ansible untuk: mencipta fail konfigurasi pada mesin jauh, memasang pakej, menyalin fail ke dan dari mesin jauh. Mungkin anda mempunyai contoh lain - tulis dalam komen.

Mari kita pergi!

Konfigurasi mitogen untuk Ansible adalah sangat mudah:
Pasang pustaka Mitogen:

pip install mitogen

Kini terdapat dua cara yang setara - sama ada konfigurasikan pilihan dalam fail konfigurasi ansible.cfg, atau tetapkan pembolehubah persekitaran yang diperlukan.

Mari kita anggap bahawa laluan ke Mitogen yang dipasang adalah /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Kemudian:

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

atau

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

Mari pasang Ansible dalam virtualenv, dengan dan tanpa 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

Sila ambil perhatian bahawa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (sehingga Mei 2019)

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

Sekarang mari cuba jalankan buku main yang mencipta fail pada mesin jauh:

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

Dan mari jalankannya dengan dan tanpa Mitogen untuk mencipta 10 fail:

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

Kami melihat peningkatan 2 kali ganda. Mari semak 20, 30, ..., 100 fail:

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

Akibatnya, kami mempercepatkan pelaksanaan lebih daripada 10 kali!
Sekarang mari kita cuba senario yang berbeza dan lihat sejauh mana lebih cepat semuanya berfungsi untuk kita:

  • Skrip untuk menyalin fail ke hos jauh daripada hos tempatan (dengan modul copy):
    Mempercepatkan Ansible dengan Mitogen

  • Skrip untuk mencipta fail pada hos jauh dengan copy modul:
    Mempercepatkan Ansible dengan Mitogen

  • Senario dengan memuat turun fail daripada hos jauh kepada hos setempat:
    Mempercepatkan Ansible dengan Mitogen

Mari cuba senario dengan beberapa (3) mesin jauh, contohnya senario dengan menyalin fail ke hos jauh:
Mempercepatkan Ansible dengan Mitogen

Seperti yang anda lihat, Mitogen menjimatkan masa dan trafik kami dalam senario ini. Tetapi jika kesesakan tiada dalam Ansible, tetapi contohnya dalam I/O cakera atau rangkaian, atau di tempat lain, maka sukar untuk mengharapkan Mitogen akan membantu kami.

Mari cuba skrip dengan memasang pakej dengan modul yum/dnf dan python menggunakan pip. Pakej telah dicache supaya tidak bergantung pada gangguan rangkaian:

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

Dengan Mitogen ia mengambil masa 12 saat, sama seperti tanpanya.
Pada halaman Mitogen untuk halaman Ansible anda boleh melihat penanda aras dan ujian lain. Seperti yang dinyatakan dalam halaman:

Mitogen tidak boleh mempercepatkan modul apabila ia berjalan. Ia hanya boleh membuat pelaksanaan modul ini secepat mungkin.

Oleh itu, adalah penting untuk mencari kesesakan anda dalam penggunaan anda dan jika ia disebabkan oleh Ansible, maka Mitogen akan membantu anda menyelesaikannya dan mempercepatkan pelaksanaan buku permainan anda dengan ketara.

Sumber: www.habr.com

Tambah komen