เร่งความเร็ว Ansible ด้วย Mitogen

เบิ้ล กลายเป็นหนึ่งในความนิยมมากที่สุด การจัดการการกำหนดค่าระบบ. หลังจาก ถูกซื้อโดยเรดแฮท ในปี 2015 จำนวน ผู้เข้าร่วมโครงการ เกินหลายพันและ Ansible อาจเป็นระบบการปรับใช้และการประสานที่ใช้มากที่สุด แอพพลิเคชั่นที่หลากหลายนั้นน่าประทับใจมาก

Ansible ทำงานผ่านการเชื่อมต่อ SSH ไปยังโฮสต์ระยะไกล โดยจะเปิดเซสชัน SSH เข้าสู่ระบบ คัดลอกโค้ด Python ผ่านเครือข่าย และเขียนลงในไฟล์ชั่วคราวแยกต่างหาก หลังจากนั้นจะรันไฟล์นี้บนเครื่องระยะไกล ลำดับการดำเนินการทั้งหมดนี้ค่อนข้างยาวและน่าเบื่อ ดังนั้นจึงมีหลายวิธีในการเพิ่มประสิทธิภาพ

หนึ่งในวิธีเหล่านี้ก็คือ ไปป์ไลน์ SSH ซึ่งช่วยให้คุณใช้เซสชัน SSH หนึ่งเซสชันเพื่อดำเนินการตามคำสั่ง แทนที่จะเปิดเซสชันใหม่ทุกครั้ง ซึ่งจะช่วยประหยัดเวลาได้มาก (อย่าลืมปิดนะครับ. requiretty การตั้งค่าสำหรับ sudo ในไฟล์ /etc/sudoers ไฟล์บนเครื่องระยะไกล)

วิธีใหม่ในการโอเวอร์คล็อก Ansible คือไลบรารีหลามที่เรียกว่า ไมโทเจน. หากใครไม่เคยได้ยินมาก่อน ฉันจะอธิบายฟังก์ชันการทำงานของมันโดยย่อ ช่วยให้สามารถรันโค้ด Python บนเครื่องระยะไกลได้อย่างรวดเร็ว และ Ansible เป็นเพียงตัวอย่างหนึ่งของการใช้งาน Mitogen ใช้ไพพ์ UNIX บนเครื่องระยะไกลและถ่ายโอนโค้ด Python ที่บีบอัดด้วย zlib และซีเรียลไลซ์ด้วย Pickle ช่วยให้ดำเนินการเสร็จเร็วขึ้นและประหยัดการรับส่งข้อมูล หากคุณสนใจคำอธิบายโดยละเอียดเพิ่มเติม ควรอ่านในหน้านั้น "มันทำงานอย่างไร". แต่วันนี้เราจะเน้นเฉพาะวิธีที่ไลบรารีทำงานร่วมกับ Ansible เท่านั้น

Mitogen ในบางกรณีสามารถเร่งความเร็วโค้ด Ansible ของคุณได้หลายครั้ง และลดปริมาณการรับส่งข้อมูลลงอย่างมาก มาดูกรณีการใช้งานที่ได้รับความนิยมมากที่สุดและดูว่าจะช่วยเราได้มากน้อยเพียงใด

ฉันใช้ Ansible มากที่สุดสำหรับ: การสร้างไฟล์การกำหนดค่าบนเครื่องระยะไกล การติดตั้งแพ็คเกจ การคัดลอกไฟล์ไปยังและจากเครื่องระยะไกล บางทีคุณอาจมีตัวอย่างอื่น - เขียนในความคิดเห็น

Here we go!

การกำหนดค่า Mitogen สำหรับ Ansible นั้นง่ายมาก:
ติดตั้งไลบรารี Mitogen:

pip install mitogen

ขณะนี้มีสองวิธีที่เทียบเท่ากัน - กำหนดค่าตัวเลือกในไฟล์การกำหนดค่า ansible.cfg หรือตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็น

สมมติว่าเส้นทางไปยัง Mitogen ที่ติดตั้งจะเป็นดังนี้ /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'

ตอนนี้เรามาลองเรียกใช้ 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 }}

และมาเรียกใช้โดยมีและไม่มี Mitogen เพื่อสร้างไฟล์ 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

อย่างที่คุณเห็น Mitogen ช่วยเราประหยัดทั้งเวลาและการรับส่งข้อมูลในสถานการณ์เหล่านี้ แต่หากปัญหาคอขวดไม่ได้อยู่ใน Ansible เช่น ใน I/O ของดิสก์หรือเครือข่าย หรือที่อื่น ก็ยากที่จะคาดหวังว่า Mitogen จะช่วยเราได้

มาลองใช้สคริปต์ที่ติดตั้งแพ็คเกจด้วยโมดูล 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

เมื่อใช้ Mitogen ใช้เวลา 12 วินาที เช่นเดียวกับที่ไม่มีมัน
บนหน้า Mitogen สำหรับหน้า Ansible คุณสามารถดูเกณฑ์มาตรฐานและการทดสอบอื่นๆ ได้ ตามที่หน้าระบุไว้:

Mitogen ไม่สามารถเร่งความเร็วโมดูลได้ในขณะที่ทำงาน สามารถทำให้การดำเนินการของโมดูลนี้เร็วที่สุดเท่าที่จะเป็นไปได้เท่านั้น

ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องค้นหาคอขวดในการปรับใช้ และหากเกิดจาก Ansible Mitogen จะช่วยคุณแก้ไขและเร่งการดำเนินการ Playbooks ของคุณอย่างมีนัยสำคัญ

ที่มา: will.com

เพิ่มความคิดเห็น