הפך לאחד הפופולריים ביותר . לאחר בשנת 2015 המספר עלה על אלפים ו-Ansible הפכה כנראה למערכת הפריסה והתזמור הנפוצה ביותר. מגוון היישומים הרחב שלו מרשים מאוד.
Ansible עובד על חיבורי SSH למארחים מרוחקים. הוא פותח הפעלת SSH, מתחבר, מעתיק את קוד Python דרך הרשת וכותב אותו לקובץ זמני נפרד. לאחר מכן, הוא מריץ את הקובץ הזה במחשב המרוחק. כל רצף הפעולות הזה הוא די ארוך ומייגע, ולכן ישנן דרכים שונות לייעל אותו.
אחת הדרכים הללו היא מה שמאפשר לך להשתמש בסשן SSH אחד לביצוע הוראות, במקום לפתוח בכל פעם סשן חדש, מה שיכול לחסוך לנו הרבה זמן. (רק זכרו לכבות requiretty הגדרה עבור sudo אצלך /etc/sudoers קובץ במחשב המרוחק)
דרך חדשה לבצע overclock Ansible היא ספריית פיתון שנקראת . אם מישהו לא שמע על זה, אני אתאר בקצרה את הפונקציונליות שלו. זה מאפשר הפעלה מהירה של קוד פיתון על מחשב מרוחק, ו-Ansible היא רק דוגמה אחת לשימוש. Mitogen משתמש בצינור UNIX במכונה המרוחקת ומעביר קוד פיתון דחוס עם zlib ובסדרה עם מלפפון חמוץ. זה עוזר להשלים את זה מהר יותר וחוסך תנועה. אם אתם מעוניינים בהסבר מפורט יותר, עדיף לקרוא על כך בעמוד . אבל היום נתמקד רק איך הספרייה עובדת עם Ansible.
Mitogen בנסיבות מסוימות יכול להאיץ את קוד ה-Ansible שלך מספר פעמים ולהפחית משמעותית את צריכת התנועה. בואו נבדוק את מקרי השימוש הפופולריים ביותר ונראה כמה זה עוזר לנו.
אני משתמש ב-Ansible בעיקר עבור: יצירת קובצי תצורה במחשב מרוחק, התקנת חבילות, העתקת קבצים אל המחשב המרוחק וממנו. אולי יש לך עוד דוגמאות - כתבו בתגובות.
בואו נלך!
תצורת מיטוגן עבור Ansible היא פשוטה מאוד:
התקן את ספריית מיטוגן:
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 ב-virtualenv, עם ובלי 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לידיעתך, Mitogen 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, אלא למשל ב-I/O של דיסק או רשת, או במקום אחר, אז קשה לצפות שמיטוגן יעזור לנו.
בואו ננסה סקריפט עם התקנת חבילות עם מודולי yum/dnf ו-python באמצעות 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 שניות, כמו בלעדיו.
בדף אתה יכול להסתכל על מדדים ומבחנים אחרים. כפי שכתוב בעמוד:
Mitogen לא יכול להאיץ את המודול כשהוא פועל. זה יכול רק להפוך את הביצוע של מודול זה מהר ככל האפשר.
לכן, חשוב למצוא את צווארי הבקבוק שלכם בפריסה שלכם ואם הם נובעים מ-Ansible, אז Mitogen תעזור לכם לפתור אותם ותזרז משמעותית את ביצוע ספרי המשחקים שלכם.
מקור: www.habr.com
