Ansible ทำงานผ่านการเชื่อมต่อ SSH ไปยังโฮสต์ระยะไกล โดยจะเปิดเซสชัน SSH เข้าสู่ระบบ คัดลอกโค้ด Python ผ่านเครือข่าย และเขียนลงในไฟล์ชั่วคราวแยกต่างหาก หลังจากนั้นจะรันไฟล์นี้บนเครื่องระยะไกล ลำดับการดำเนินการทั้งหมดนี้ค่อนข้างยาวและน่าเบื่อ ดังนั้นจึงมีหลายวิธีในการเพิ่มประสิทธิภาพ
หนึ่งในวิธีเหล่านี้ก็คือ requiretty
การตั้งค่าสำหรับ sudo ในไฟล์ /etc/sudoers
ไฟล์บนเครื่องระยะไกล)
วิธีใหม่ในการโอเวอร์คล็อก 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