กลายเป็นหนึ่งในความนิยมมากที่สุด . หลังจาก ในปี 2015 จำนวน เกินหลายพันและ Ansible อาจเป็นระบบการปรับใช้และการประสานที่ใช้มากที่สุด แอพพลิเคชั่นที่หลากหลายนั้นน่าประทับใจมาก
Ansible ทำงานผ่านการเชื่อมต่อ SSH ไปยังโฮสต์ระยะไกล โดยจะเปิดเซสชัน SSH เข้าสู่ระบบ คัดลอกโค้ด Python ผ่านเครือข่าย และเขียนลงในไฟล์ชั่วคราวแยกต่างหาก หลังจากนั้นจะรันไฟล์นี้บนเครื่องระยะไกล ลำดับการดำเนินการทั้งหมดนี้ค่อนข้างยาวและน่าเบื่อ ดังนั้นจึงมีหลายวิธีในการเพิ่มประสิทธิภาพ
หนึ่งในวิธีเหล่านี้ก็คือ ซึ่งช่วยให้คุณใช้เซสชัน 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):
สคริปต์สำหรับสร้างไฟล์บนโฮสต์ระยะไกลด้วย
copyโมดูล:
สถานการณ์จำลองที่มีการดาวน์โหลดไฟล์จากโฮสต์ระยะไกลไปยังโลคัล:
เรามาลองใช้สถานการณ์จำลองกับเครื่องระยะไกลหลาย (3) เครื่อง เช่น สถานการณ์จำลองที่มีการคัดลอกไฟล์ไปยังโฮสต์ระยะไกล:
อย่างที่คุณเห็น 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 จะช่วยคุณแก้ไขและเร่งการดำเนินการ Playbooks ของคุณอย่างมีนัยสำคัญ
ที่มา: will.com
