menjadi salah satu yang paling popular . Selepas pada tahun 2015 bilangannya 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 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 . 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 . 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 mitogenKini 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_linearatau
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyMari 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.10Sila 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.643sKami 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.197sAkibatnya, 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):
Skrip untuk mencipta fail pada hos jauh dengan
copymodul:
Senario dengan memuat turun fail daripada hos jauh kepada hos setempat:
Mari cuba senario dengan beberapa (3) mesin jauh, contohnya senario dengan menyalin fail ke hos jauh:
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 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
