یکی از محبوب ترین ها شد ... بعد از در سال 2015 تعداد از هزاران فراتر رفت و Ansible احتمالاً به پرکاربردترین سیستم استقرار و ارکستراسیون تبدیل شد. طیف گسترده ای از برنامه های کاربردی آن بسیار چشمگیر است.
Ansible از طریق اتصالات SSH به هاست های راه دور کار می کند. یک جلسه SSH را باز می کند، وارد سیستم می شود، کد پایتون را روی شبکه کپی می کند و آن را در یک فایل موقت جداگانه می نویسد. پس از آن، این فایل را روی دستگاه راه دور اجرا می کند. کل این توالی عملیات بسیار طولانی و خسته کننده است، بنابراین راه های مختلفی برای بهینه سازی آن وجود دارد.
یکی از این راه ها این است که به شما امکان می دهد از یک جلسه SSH برای اجرای دستورالعمل ها استفاده کنید، نه اینکه هر بار یک جلسه جدید باز کنید، که می تواند در زمان ما صرفه جویی کند. (فقط یادتان باشد خاموش شود requiretty تنظیم sudo در شما /etc/sudoers فایل روی دستگاه راه دور)
یک راه جدید برای اورکلاک Ansible یک کتابخانه پایتون به نام است . اگر کسی در مورد آن نشنیده است، من به طور خلاصه عملکرد آن را شرح می دهم. این امکان اجرای سریع کد پایتون را در یک ماشین راه دور فراهم می کند و Ansible تنها یک نمونه از استفاده است. میتوژن از یک لوله یونیکس در دستگاه راه دور استفاده می کند و کد پایتون را که با zlib فشرده شده و با ترشی سریالی شده است، منتقل می کند. این به تکمیل سریعتر آن کمک می کند و باعث صرفه جویی در ترافیک می شود. اگر به توضیح دقیق تری علاقه مند هستید، بهتر است در مورد آن در صفحه بخوانید . اما امروز ما فقط بر نحوه کار کتابخانه با Ansible تمرکز خواهیم کرد.
میتوژن در شرایط خاص می تواند سرعت کد Ansible شما را چندین برابر کند و مصرف ترافیک را به میزان قابل توجهی کاهش دهد. بیایید محبوب ترین موارد استفاده را بررسی کنیم و ببینیم چقدر به ما کمک می کند.
من از Ansible بیشتر برای موارد زیر استفاده می کنم: ایجاد فایل های پیکربندی در یک ماشین راه دور، نصب بسته ها، کپی کردن فایل ها به و از دستگاه راه دور. شاید نمونه های دیگری داشته باشید - در نظرات بنویسید.
بریم!
پیکربندی میتوژن برای Ansible بسیار ساده است:
کتابخانه Mitogen را نصب کنید:
pip install mitogenاکنون دو راه معادل وجود دارد - یا گزینه های موجود در فایل پیکربندی ansible.cfg را پیکربندی کنید، یا متغیرهای محیط لازم را تنظیم کنید.
بیایید فرض کنیم که مسیر میتوژن نصب شده خواهد بود /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. سپس:
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بیایید Ansible را با و بدون Mitogen در virtualenv نصب کنیم:
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لطفاً توجه داشته باشید که میتوژن 0.2.7 با Ansible 2.8 (از می 2019) کار نمی کند.
ساختن نام مستعار:
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'حالا بیایید سعی کنیم یک کتاب پخش را اجرا کنیم که فایل ها را روی یک ماشین راه دور ایجاد می کند:
---
- 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 }}و اجازه دهید آن را با و بدون میتوژن اجرا کنیم تا 10 فایل ایجاد کنیم:
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ما شاهد بهبود 2 برابری هستیم. بیایید 20، 30، ...، 100 فایل را بررسی کنیم:
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در نتیجه ما بیش از 10 برابر سرعت اجرا را افزایش دادیم!
حالا بیایید سناریوهای مختلف را امتحان کنیم و ببینیم همه چیز چقدر سریعتر برای ما کار می کند:
اسکریپت برای کپی فایل ها به یک میزبان راه دور از یک میزبان محلی (با ماژول
copy):
اسکریپت برای ایجاد فایل در یک میزبان راه دور با
copyمدول:
سناریویی با بارگیری فایل ها از یک میزبان راه دور به یک میزبان محلی:
بیایید یک سناریو را با چندین (3) ماشین راه دور امتحان کنیم، به عنوان مثال سناریویی با کپی کردن فایل ها در یک میزبان راه دور:
همانطور که می بینید، میتوژن در این سناریوها هم در زمان و هم در ترافیک ما صرفه جویی می کند. اما اگر گلوگاه در Ansible نباشد، برای مثال در ورودی/خروجی یک دیسک یا شبکه، یا جای دیگری باشد، انتظار اینکه میتوژن به ما کمک کند سخت است.
بیایید یک اسکریپت با نصب بسته هایی با ماژول های yum/dnf و پایتون با استفاده از pip امتحان کنیم. بسته ها ذخیره شده اند تا به اشکالات شبکه وابسته نباشند:
---
- 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
با میتوژن 12 ثانیه طول کشید، مانند بدون آن.
در صفحه می توانید به معیارها و تست های دیگر نگاه کنید. همانطور که در صفحه آمده است:
هنگامی که ماژول در حال اجرا است، میتوژن نمی تواند سرعت آن را افزایش دهد. فقط می تواند اجرای این ماژول را با بیشترین سرعت ممکن انجام دهد.
بنابراین، مهم است که گلوگاه های خود را در استقرار خود پیدا کنید و اگر به دلیل Ansible هستند، میتوژن به شما کمک می کند تا آنها را حل کنید و به طور قابل توجهی سرعت اجرای کتاب های بازی خود را افزایش دهید.
منبع: www.habr.com
