Gumagana ang Ansible sa mga koneksyon sa SSH sa mga malalayong host. Nagbubukas ito ng session ng SSH, nag-log in, kinokopya ang code ng Python sa network at isinusulat ito sa isang hiwalay na pansamantalang file. Pagkatapos nito, pinapatakbo nito ang file na ito sa remote na makina. Ang buong pagkakasunud-sunod ng mga operasyon ay medyo mahaba at nakakapagod, kaya mayroong iba't ibang mga paraan upang ma-optimize ito.
Isa sa mga paraan na ito ay requiretty
setting para sa sudo sa iyong /etc/sudoers
file sa remote na makina)
Ang isang bagong paraan upang mag-overclock sa Ansible ay isang python library na tinatawag
Maaaring pabilisin ng Mitogen sa ilang partikular na pagkakataon ang iyong Ansible code nang maraming beses at makabuluhang bawasan ang pagkonsumo ng trapiko. Tingnan natin ang pinakasikat na mga kaso ng paggamit at tingnan kung gaano ito nakakatulong sa atin.
Ginagamit ko ang Ansible karamihan para sa: paglikha ng mga configuration file sa isang remote na makina, pag-install ng mga pakete, pagkopya ng mga file papunta at mula sa remote na makina. Marahil mayroon kang iba pang mga halimbawa - sumulat sa mga komento.
Sabihin pumunta!
Ang pagsasaayos ng mitogen para sa Ansible ay napaka-simple:
I-install ang Mitogen library:
pip install mitogen
Ngayon ay may dalawang katumbas na paraan - alinman sa i-configure ang mga opsyon sa ansible.cfg configuration file, o itakda ang mga kinakailangang variable ng kapaligiran.
Ipagpalagay natin na ang landas patungo sa naka-install na Mitogen ay magiging /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Pagkatapos:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
o
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
I-install natin ang Ansible sa virtualenv, kasama at walang 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
Pakitandaan na ang Mitogen 0.2.7 ay hindi gumagana sa Ansible 2.8 (mula Mayo 2019)
Gumagawa ng mga 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'
Ngayon subukan nating magpatakbo ng playbook na lumilikha ng mga file sa isang malayuang makina:
---
- 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 }}
At patakbuhin natin ito nang may at walang Mitogen upang lumikha ng 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
Nakikita namin ang 2-tiklop na pagpapabuti. Tingnan natin ang 20, 30, ..., 100 na mga 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
Bilang resulta, pinabilis namin ang pagpapatupad ng higit sa 10 beses!
Ngayon subukan natin ang iba't ibang mga sitwasyon at tingnan kung gaano kabilis gumagana ang lahat para sa atin:
-
Script para sa pagkopya ng mga file sa isang malayong host mula sa isang lokal (na may module
copy
):
-
Script para sa paggawa ng mga file sa isang malayuang host gamit ang
copy
module:
-
Sitwasyon sa pag-download ng mga file mula sa isang malayuang host patungo sa isang lokal:
Subukan natin ang isang scenario na may ilang (3) remote na makina, halimbawa isang scenario sa pagkopya ng mga file sa isang remote host:
Gaya ng nakikita mo, ang Mitogen ay nakakatipid sa amin ng oras at trapiko sa mga sitwasyong ito. Ngunit kung ang bottleneck ay wala sa Ansible, ngunit halimbawa sa I/O ng isang disk o network, o sa ibang lugar, mahirap umasa na tutulungan tayo ni Mitogen.
Subukan natin ang isang script na may pag-install ng mga pakete na may yum/dnf at python modules gamit ang pip. Ang mga pakete ay na-cache upang hindi umasa sa mga glitches sa network:
---
- 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
Sa Mitogen tumagal ito ng 12 segundo, katulad ng wala nito.
Sa pahina
Hindi mapabilis ng Mitogen ang module kapag ito ay tumatakbo. Maaari lamang nitong gawin ang pagpapatupad ng modyul na ito nang mabilis hangga't maaari.
Samakatuwid, mahalagang mahanap ang iyong mga bottleneck sa iyong deployment at kung ang mga ito ay dahil sa Ansible, tutulungan ka ng Mitogen na lutasin ang mga ito at makabuluhang mapabilis ang pagpapatupad ng iyong mga playbook.
Pinagmulan: www.habr.com