افزایش سرعت Ansible با میتوژن

غیر ممکن یکی از محبوب ترین ها شد مدیریت پیکربندی سیستم... بعد از توسط Red Hat خریداری شد در سال 2015 تعداد شرکت کنندگان پروژه از هزاران فراتر رفت و Ansible احتمالاً به پرکاربردترین سیستم استقرار و ارکستراسیون تبدیل شد. طیف گسترده ای از برنامه های کاربردی آن بسیار چشمگیر است.

Ansible از طریق اتصالات SSH به هاست های راه دور کار می کند. یک جلسه 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):
    افزایش سرعت Ansible با میتوژن

  • اسکریپت برای ایجاد فایل در یک میزبان راه دور با copy مدول:
    افزایش سرعت Ansible با میتوژن

  • سناریویی با بارگیری فایل ها از یک میزبان راه دور به یک میزبان محلی:
    افزایش سرعت Ansible با میتوژن

بیایید یک سناریو را با چندین (3) ماشین راه دور امتحان کنیم، به عنوان مثال سناریویی با کپی کردن فایل ها در یک میزبان راه دور:
افزایش سرعت Ansible با میتوژن

همانطور که می بینید، میتوژن در این سناریوها هم در زمان و هم در ترافیک ما صرفه جویی می کند. اما اگر گلوگاه در 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 می توانید به معیارها و تست های دیگر نگاه کنید. همانطور که در صفحه آمده است:

هنگامی که ماژول در حال اجرا است، میتوژن نمی تواند سرعت آن را افزایش دهد. فقط می تواند اجرای این ماژول را با بیشترین سرعت ممکن انجام دهد.

بنابراین، مهم است که گلوگاه های خود را در استقرار خود پیدا کنید و اگر به دلیل Ansible هستند، میتوژن به شما کمک می کند تا آنها را حل کنید و به طور قابل توجهی سرعت اجرای کتاب های بازی خود را افزایش دهید.

منبع: www.habr.com

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster