Percepat Ansible dengan Mitogen

Percepat Ansible dengan Mitogen!


versi Rusia


Ansible adalah salah satu Sistem Manajemen Konfigurasi yang paling populer saat ini. Setelah diakuisisi oleh Red Hat pada tahun 2015 Ansible telah mencapai ribuan kontributor dan menjadi salah satu alat penyebaran dan orkestrasi yang paling banyak digunakan. Kasus penggunaannya cukup mengesankan.


Dapat bekerja dengan koneksi SSH ke host jarak jauh. Ini membuka sesi SSH, masuk ke shell, menyalin kode python melalui jaringan dan membuat file sementara di host jarak jauh dengan kode ini. Pada langkah berikutnya, ia mengeksekusi file saat ini dengan interpreter python. Semua alur kerja ini cukup berat dan ada beberapa cara untuk membuatnya lebih cepat dan lebih ringan.


Salah satu cara ini adalah menggunakan pipa SSH yang menggunakan kembali satu sesi SSH untuk menyalin kode python dari banyak tugas dan mencegah pembukaan beberapa sesi, yang menghemat banyak waktu. (Jangan lupa untuk menonaktifkan pengaturan yang diperlukan untuk sudo di sisi jarak jauh di /etc/sudoers )


Cara baru untuk mempercepat Ansible adalah perpustakaan python besar yang disebut Mitogen . Jika seseorang seperti saya tidak terbiasa dengannya - perpustakaan ini memungkinkan eksekusi kode python dengan cepat pada host jarak jauh dan Ansible hanya merupakan salah satu kasusnya. Mitogen menggunakan pipa UNIX pada mesin jarak jauh sambil melewati kode python "acar" yang dikompres dengan zlib. Ini memungkinkan untuk menjalankannya dengan cepat dan tanpa banyak lalu lintas. Jika Anda tertarik, Anda dapat membaca detail tentang cara kerjanya di halaman "Cara kerjanya" . Tapi kami akan fokus hari ini pada bagian terkait yang memungkinkan.


Mitogen dalam keadaan tertentu dapat mempercepat Ansible Anda dalam beberapa kali dan secara signifikan menurunkan bandwidth Anda. Mari kita periksa kasus penggunaan yang paling populer dan mencari tahu apakah itu bermanfaat bagi kita.


Kasing penggunaan yang paling populer untuk saya jalankan Ansible adalah: membuat file konfigurasi pada host jarak jauh, menginstal paket, mengunduh dan mengunggah file dari dan ke host jarak jauh. Mungkin Anda ingin memeriksa kasus penggunaan lainnya, silakan tinggalkan komentar untuk artikel ini.


Ayo mulai bergulir!


Mengkonfigurasi Mitogen untuk Ansible sangat sederhana:
Instal modul Mitogen:


 pip install mitogen 

Kemudian konfigurasikan variabel lingkungan atau atur opsi konfigurasi dalam file ansible.cfg, kedua opsi tersebut baik-baik saja:
Mari kita asumsikan / /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy python2.7/site-packages/ansible_mitogen/plugins/strategy adalah jalur Anda untuk menginstal pustaka Mitogen.


 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 



Siapkan Ansible dalam virtualenv, dengan dan tanpa Mitogen diaktifkan:


 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 perhatikan bahwa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (untuk Mei 2019)


Buat alias:


 alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy:$(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 playbook yang membuat file di remote:


 --- - 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 jalankan dengan Mitogen dan tanpa membuat 10 file:


 time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s 

Saat ini kami melihat peningkatan dalam x2 kali. Mari kita periksa 20, 30, ..., 100 file:


 time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s 

Akhirnya, kami meningkatkan waktu eksekusi lebih dari 10 kali!


Sekarang mari kita coba berbagai skenario dan lihat bagaimana ini meningkat:


  • Skenario mengunggah file dari host lokal ke jarak jauh (dengan modul copy ):
    Mengunggah file


  • Skenario membuat file pada host jarak jauh dengan modul copy :
    Membuat file


  • Skenario dengan mengambil file dari host jarak jauh ke lokal:
    Mengambil file



Mari kita coba skenario terakhir pada beberapa (3) host jarak jauh, misalnya mengunggah skenario file:
Mengunggah file ke banyak host


Seperti yang dapat kita lihat, Mitogen menghemat waktu dan bandwidth dalam skenario ini. Tetapi jika hambatannya bukan Ansible, tetapi misalnya I / O dari disk atau jaringan, atau di tempat lain, maka tentu saja sulit dari Mitogen untuk membantu.


Mari kita jalankan misalnya instalasi paket dengan instalasi modul yum / dnf dan python dengan pip.
Paket telah di-cache untuk menghindari ketergantungan 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 dibutuhkan 12 detik, serta dengan Ansible murni.


Di halaman Mitogen untuk Ansible, Anda dapat melihat tolok ukur dan pengukuran tambahan. Seperti yang dinyatakan halaman:


Mitogen tidak dapat meningkatkan modul setelah dieksekusi, ia hanya dapat memastikan modul dieksekusi secepat mungkin

Itulah mengapa penting untuk menemukan di mana kemacetan Anda dan jika mereka terkait dengan operasi Ansible, Mitogen akan membantu Anda untuk menyelesaikannya dan mempercepat buku-buku bermain Anda secara signifikan.

Source: https://habr.com/ru/post/id453446/


All Articles