Mempercepat Ansible dengan Mitogen

Mungkin menjadi salah satu yang paling populer Manajemen Konfigurasi Sistem. Setelah dibeli oleh Red Hat pada tahun 2015 jumlahnya peserta proyek melebihi ribuan dan Ansible mungkin menjadi sistem penerapan dan orkestrasi yang paling banyak digunakan. Berbagai macam aplikasinya sangat mengesankan.

Ansible bekerja melalui koneksi SSH ke host jarak jauh. Ini membuka sesi SSH, masuk, menyalin kode Python melalui jaringan dan menulisnya ke file sementara yang terpisah. Setelah itu, ia menjalankan file ini di mesin jarak jauh. Seluruh rangkaian operasi ini cukup panjang dan membosankan, jadi ada berbagai cara untuk mengoptimalkannya.

Salah satu caranya adalah Saluran pipa SSH yang memungkinkan Anda menggunakan satu sesi SSH untuk menjalankan instruksi, daripada membuka sesi baru setiap kali, yang dapat menghemat banyak waktu. (Ingatlah untuk mematikannya requiretty pengaturan untuk Sudo di Anda /etc/sudoers file di mesin jarak jauh)

Cara baru untuk melakukan overclock Ansible adalah perpustakaan python bernama Mitogen. Jika ada yang belum pernah mendengarnya, saya akan menjelaskan secara singkat fungsinya. Ini memungkinkan eksekusi cepat kode python pada mesin jarak jauh, dan Ansible hanyalah salah satu contoh penggunaan. Mitogen menggunakan pipa UNIX pada mesin jarak jauh dan mentransfer kode python yang dikompresi dengan zlib dan diserialkan dengan acar. Ini membantu menyelesaikannya lebih cepat dan menghemat lalu lintas. Jika Anda tertarik dengan penjelasan lebih detail, sebaiknya baca di halaman "Bagaimana itu bekerja". Namun hari ini kita hanya akan fokus pada cara kerja perpustakaan dengan Ansible.

Mitogen dalam keadaan tertentu dapat mempercepat kode Ansible Anda beberapa kali dan secara signifikan mengurangi konsumsi lalu lintas. Mari kita periksa kasus penggunaan paling populer dan lihat seberapa besar manfaatnya bagi kita.

Saya menggunakan sebagian besar Ansible untuk: membuat file konfigurasi pada mesin jarak jauh, menginstal paket, menyalin file ke dan dari mesin jarak jauh. Mungkin Anda punya contoh lain - tulis di komentar.

Mari kita pergi!

Konfigurasi mitogen untuk Ansible sangat sederhana:
Instal perpustakaan Mitogen:

pip install mitogen

Sekarang ada dua cara yang setara - konfigurasikan opsi di file konfigurasi ansible.cfg, atau atur variabel lingkungan yang diperlukan.

Mari kita asumsikan bahwa jalur ke Mitogen yang diinstal 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

или

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

Mari instal Ansible di 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

Harap dicatat bahwa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (mulai 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 kita coba menjalankan pedoman yang membuat file di mesin jarak 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 kita jalankan dengan dan tanpa Mitogen untuk membuat 10 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

Kami melihat peningkatan 2 kali lipat. Mari kita periksa 20, 30, ..., 100 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

Hasilnya, kami mempercepat eksekusi lebih dari 10 kali lipat!
Sekarang mari kita coba skenario yang berbeda dan lihat seberapa cepat semuanya bekerja untuk kita:

  • Skrip untuk menyalin file ke host jarak jauh dari host lokal (dengan module copy):
    Mempercepat Ansible dengan Mitogen

  • Skrip untuk membuat file di host jarak jauh dengan copy modul:
    Mempercepat Ansible dengan Mitogen

  • Skenario dengan mengunduh file dari host jarak jauh ke host lokal:
    Mempercepat Ansible dengan Mitogen

Mari kita coba skenario dengan beberapa (3) mesin jarak jauh, misalnya skenario dengan menyalin file ke host jarak jauh:
Mempercepat Ansible dengan Mitogen

Seperti yang Anda lihat, Mitogen menghemat waktu dan lalu lintas dalam skenario ini. Namun jika hambatannya bukan di Ansible, tapi misalnya di I/O disk atau jaringan, atau di tempat lain, maka sulit diharapkan Mitogen akan membantu kita.

Mari kita coba skrip dengan menginstal paket dengan modul yum/dnf dan python menggunakan pip. Paket-paket tersebut di-cache agar tidak bergantung pada gangguan jaringan:

---
- 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 butuh waktu 12 detik, sama seperti tanpa Mitogen.
Di halaman Mitogen untuk halaman yang Mungkin Anda dapat melihat tolok ukur dan tes lainnya. Seperti yang dinyatakan dalam halaman:

Mitogen tidak dapat mempercepat modul saat sedang berjalan. Itu hanya dapat membuat eksekusi modul ini secepat mungkin.

Oleh karena itu, penting untuk menemukan hambatan dalam penerapan Anda dan jika hambatan tersebut disebabkan oleh Ansible, maka Mitogen akan membantu Anda menyelesaikannya dan secara signifikan mempercepat pelaksanaan pedoman Anda.

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster