להאיץ את Ansible עם Mitogen

בלתי אפשרי הפך לאחד הפופולריים ביותר ניהול תצורת מערכת. לאחר נרכש על ידי Red Hat בשנת 2015 המספר משתתפי הפרויקט עלה על אלפים ו-Ansible הפכה כנראה למערכת הפריסה והתזמור הנפוצה ביותר. מגוון היישומים הרחב שלו מרשים מאוד.

Ansible עובד על חיבורי SSH למארחים מרוחקים. הוא פותח הפעלת SSH, מתחבר, מעתיק את קוד Python דרך הרשת וכותב אותו לקובץ זמני נפרד. לאחר מכן, הוא מריץ את הקובץ הזה במחשב המרוחק. כל רצף הפעולות הזה הוא די ארוך ומייגע, ולכן ישנן דרכים שונות לייעל אותו.

אחת הדרכים הללו היא צינורות SSH מה שמאפשר לך להשתמש בסשן 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):
    להאיץ את Ansible עם Mitogen

  • סקריפט ליצירת קבצים על מארח מרוחק עם copy מודול:
    להאיץ את Ansible עם Mitogen

  • תרחיש עם הורדת קבצים ממארח ​​מרוחק למארח מקומי:
    להאיץ את Ansible עם Mitogen

בואו ננסה תרחיש עם מספר (3) מכונות מרוחקות, למשל תרחיש עם העתקת קבצים למארח מרוחק:
להאיץ את Ansible עם Mitogen

כפי שאתה יכול לראות, מיטוגן חוסך לנו זמן ותנועה בתרחישים אלה. אבל אם צוואר הבקבוק הוא לא ב-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 שניות, כמו בלעדיו.
בדף מיטוגן עבור עמוד Ansible אתה יכול להסתכל על מדדים ומבחנים אחרים. כפי שכתוב בעמוד:

Mitogen לא יכול להאיץ את המודול כשהוא פועל. זה יכול רק להפוך את הביצוע של מודול זה מהר ככל האפשר.

לכן, חשוב למצוא את צווארי הבקבוק שלכם בפריסה שלכם ואם הם נובעים מ-Ansible, אז Mitogen תעזור לכם לפתור אותם ותזרז משמעותית את ביצוע ספרי המשחקים שלכם.

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster