మిటోజెన్‌తో అన్సిబుల్‌ను వేగవంతం చేయడం

చేసాడు అత్యంత ప్రజాదరణ పొందిన వాటిలో ఒకటిగా మారింది సిస్టమ్ కాన్ఫిగరేషన్ నిర్వహణ. తర్వాత Red Hat కొనుగోలు చేసింది 2015లో సంఖ్య ప్రాజెక్ట్ పాల్గొనేవారు వేలను అధిగమించింది మరియు అన్సిబుల్ బహుశా ఎక్కువగా ఉపయోగించే విస్తరణ మరియు ఆర్కెస్ట్రేషన్ వ్యవస్థగా మారింది. దీని విస్తృత శ్రేణి అప్లికేషన్లు బాగా ఆకట్టుకున్నాయి.

రిమోట్ హోస్ట్‌లకు SSH కనెక్షన్‌ల ద్వారా Ansible పని చేస్తుంది. ఇది ఒక SSH సెషన్‌ను తెరుస్తుంది, లాగిన్ చేస్తుంది, నెట్‌వర్క్‌లో పైథాన్ కోడ్‌ను కాపీ చేస్తుంది మరియు దానిని ప్రత్యేక తాత్కాలిక ఫైల్‌కి వ్రాస్తుంది. ఆ తర్వాత, ఇది రిమోట్ మెషీన్‌లో ఈ ఫైల్‌ను నడుపుతుంది. ఈ మొత్తం కార్యకలాపాల క్రమం చాలా పొడవుగా మరియు శ్రమతో కూడుకున్నది, కాబట్టి దీన్ని ఆప్టిమైజ్ చేయడానికి వివిధ మార్గాలు ఉన్నాయి.

ఈ మార్గాలలో ఒకటి SSH పైప్లైన్లు ఇది ప్రతిసారీ కొత్త సెషన్‌ను తెరవడం కంటే సూచనలను అమలు చేయడానికి ఒక SSH సెషన్‌ను ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది, ఇది మాకు చాలా సమయాన్ని ఆదా చేస్తుంది. (ఆఫ్ చేయాలని గుర్తుంచుకోండి requiretty మీలో సుడో కోసం సెట్టింగ్ /etc/sudoers రిమోట్ మెషీన్లో ఫైల్)

Ansibleని ఓవర్‌లాక్ చేయడానికి ఒక కొత్త మార్గం పైథాన్ లైబ్రరీ అని పిలుస్తారు మైటోజెన్. ఎవరైనా దాని గురించి వినకపోతే, నేను దాని కార్యాచరణను క్లుప్తంగా వివరిస్తాను. ఇది రిమోట్ మెషీన్‌లో పైథాన్ కోడ్‌ను వేగంగా అమలు చేయడానికి అనుమతిస్తుంది మరియు అన్సిబుల్ అనేది ఉపయోగానికి ఒక ఉదాహరణ మాత్రమే. Mitogen రిమోట్ మెషీన్‌లో UNIX పైప్‌ను ఉపయోగిస్తుంది మరియు zlibతో కంప్రెస్ చేయబడిన పైథాన్ కోడ్‌ను బదిలీ చేస్తుంది మరియు ఊరగాయతో సీరియలైజ్ చేయబడింది. ఇది వేగంగా పూర్తి చేయడానికి మరియు ట్రాఫిక్‌ను ఆదా చేయడానికి సహాయపడుతుంది. మీరు మరింత వివరణాత్మక వివరణపై ఆసక్తి కలిగి ఉంటే, దాని గురించి పేజీలో చదవడం ఉత్తమం "అది ఎలా పని చేస్తుంది". కానీ ఈ రోజు మనం లైబ్రరీ అన్సిబుల్‌తో ఎలా పనిచేస్తుందనే దానిపై మాత్రమే దృష్టి పెడతాము.

కొన్ని పరిస్థితులలో Mitogen మీ Ansible కోడ్‌ని అనేక సార్లు వేగవంతం చేస్తుంది మరియు ట్రాఫిక్ వినియోగాన్ని గణనీయంగా తగ్గిస్తుంది. అత్యంత జనాదరణ పొందిన వినియోగ సందర్భాలను చూద్దాం మరియు ఇది మాకు ఎంతవరకు సహాయపడుతుందో చూద్దాం.

నేను ఎక్కువగా Ansibleని ఉపయోగిస్తాను: రిమోట్ మెషీన్‌లో కాన్ఫిగరేషన్ ఫైల్‌లను సృష్టించడం, ప్యాకేజీలను ఇన్‌స్టాల్ చేయడం, రిమోట్ మెషీన్‌కు మరియు దాని నుండి ఫైల్‌లను కాపీ చేయడం. బహుశా మీకు ఇతర ఉదాహరణలు ఉండవచ్చు - వ్యాఖ్యలలో వ్రాయండి.

లెట్ యొక్క వెళ్ళి!

అన్సిబుల్ కోసం మైటోజెన్ కాన్ఫిగరేషన్ చాలా సులభం:
Mitogen లైబ్రరీని ఇన్స్టాల్ చేయండి:

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

Mitogenతో మరియు లేకుండా వర్చువల్‌లో Ansibleని ఇన్‌స్టాల్ చేద్దాం:

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 ఫైల్‌లను సృష్టించడానికి Mitogenతో మరియు లేకుండా దీన్ని అమలు చేద్దాం:

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 మాకు సమయం మరియు ట్రాఫిక్ రెండింటినీ ఆదా చేస్తుంది. కానీ అడ్డంకి అన్సిబుల్‌లో లేకుంటే, ఉదాహరణకు డిస్క్ లేదా నెట్‌వర్క్ యొక్క I/O లేదా మరెక్కడైనా ఉంటే, Mitogen మనకు సహాయం చేస్తుందని ఆశించడం కష్టం.

పిప్‌ని ఉపయోగించి yum/dnf మరియు పైథాన్ మాడ్యూల్స్‌తో ప్యాకేజీలను ఇన్‌స్టాల్ చేయడంతో స్క్రిప్ట్‌ను ప్రయత్నిద్దాం. నెట్‌వర్క్ అవాంతరాలపై ఆధారపడకుండా ప్యాకేజీలు కాష్ చేయబడ్డాయి:

---
- 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 సెకన్లు పట్టింది, అది లేకుండా అదే.
పేజీలో Ansible పేజీ కోసం Mitogen మీరు ఇతర బెంచ్‌మార్క్‌లు మరియు పరీక్షలను చూడవచ్చు. పేజీ పేర్కొన్న విధంగా:

మైటోజెన్ మాడ్యూల్ రన్ అవుతున్నప్పుడు దాన్ని వేగవంతం చేయదు. ఇది ఈ మాడ్యూల్ యొక్క అమలును వీలైనంత వేగంగా చేయగలదు.

అందువల్ల, మీ విస్తరణలో మీ అడ్డంకులను కనుగొనడం చాలా ముఖ్యం మరియు అవి అన్సిబుల్ కారణంగా ఉంటే, మైటోజెన్ వాటిని పరిష్కరించడంలో మరియు మీ ప్లేబుక్‌ల అమలును గణనీయంగా వేగవంతం చేయడంలో మీకు సహాయం చేస్తుంది.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి