Ansible felgyorsítása Mitogen-nel.

Ansible az egyik legnépszerűbbé vált Configuration Management rendszerek. Miután megvásárolta a Red Hat 2015-ben a résztvevők számának felülmúlta az ezret, és az Ansible valószínűleg a leggyakrabban használt telepítési és automatizálási rendszer lett. Széles alkalmazási területei valóban lenyűgözőek. Az Ansible SSH kapcsolatokon keresztül működik a távoli hosztokhoz. Megnyit egy SSH ülést, bejelentkezik, átkonvertálja a Python kódot a hálózaton, és egy külön ideiglenes fájlba menti. Ezután ezt a fájlt futtatja a távoli gépen. Ez a műveletsorozat meglehetősen hosszú és fárasztó, ezért különböző módszerek léteznek annak optimalizálására.

Ezek egyikike az

SSH pipeline , amely lehetővé teszi egy SSH sesszió használatát az utasítások végrehajtásához, ahelyett, hogy mindig új sessziót nyitnánk, ami sok időt takaríthat meg nekünk. (Csak ne felejtsd el letiltani a requiretty beállítást a sudo-ban a fájlban a távoli gépeden) /etc/sudoers Egy új módszer az Ansible „meghajtására” a Mitogen nevű Python könyvtár.

Ha valaki még nem hallott róla – röviden összefoglalom a funkcióját. Lehetővé teszi a Python kód gyors végrehajtását a távoli gépen, és az Ansible csak egy példa az alkalmazására. A Mitogen UNIX pipe-ot használ a távoli gépen, és a Python kódot zlib tömörítéssel és pickle segítségével sorosítja. Ez segít a gyorsabb végrehajtásban és a forgalom megtakarításában. Ha érdekel egy részletesebb magyarázat, a legjobb, ha a „How it works”oldalon olvasol róla. De ma csak a könyvtár Ansible-lal való működésére összpontosítunk. A Mitogen bizonyos körülmények között többszörösen felgyorsíthatja az Ansible kódodat és jelentősen csökkentheti a forgalmat. Nézzük meg a legnépszerűbb felhasználási példákat és nézzük meg, mennyire segít nekünk.Leginkább az Ansible-t használom: konfigurációs fájlok létrehozására a távoli gépen, csomagok telepítésére, fájlok átmásolására a távoli gépre és vissza. Lehet, hogy más példáid vannak – írd meg kommentben.

A Mitogen konfigurációja az Ansible számára nagyon egyszerű:

Telepítjük a Mitogen könyvtárat:

Kezdjük!

pip install mitogen
Most két egyenértékű módszer van – beállíthatjuk az opciókat az ansible.cfg konfigurációs fájlban, vagy a szükséges környezeti változókat állíthatjuk be.

Tegyük fel, hogy a telepített Mitogen útvonala

. Akkor:

Tegyük fel, hogy a Mitogen telepített elérési útja /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Akkor:

export ANSIBLE_STRATEGY_PLUGINS=\/usr\/lib\/python2.7\/site-packages\/ansible_mitogen\/plugins\/strategy
export ANSIBLE_STRATEGY=mitogen_linear

vagy

[defaults]
strategy = mitogen_linear
strategy_plugins = \/usr\/lib\/python2.7\/site-packages\/ansible_mitogen\/plugins\/strategy

Telepítsük az Ansible-t virtualenv-ben, Mitogennel és anélkül:

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

Ne feledjük, hogy a Mitogen 0.2.7 nem működik az Ansible 2.8-cal (2019 májusáig)

Készítsünk aliasokat:

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'

Most próbáljuk meg futtatni a playbookot, amely fájlokat hoz létre a távoli gépen:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Fájlok létrehozása a copy content modul segítségével
      copy:
        content: |
          teszt fájl {{ item }}
        dest: ~\/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Indítsuk el Mitogennel és anélkül 10 fájl létrehozásához:

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

Látjuk, hogy a teljesítmény kétszeresére nőtt. Nézzük meg 20, 30, …, 100 fájl esetén:

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

Eredményként a végrehajtás 10-szer gyorsabb lett!
Most próbáljunk különféle forgatókönyveket, és nézzük meg, hogy mennyivel gyorsabban működik minden:

  • Forgatókönyv fájlok másolására egy távoli hosztra helyi gépről (a modul segítségével másolás):
    Ansible felgyorsítása Mitogen-nel.

  • Forgatókönyv fájlok létrehozására egy távoli hoszton a másolás modul segítségével:
    Ansible felgyorsítása Mitogen-nel.

  • Forgatókönyv fájlok letöltésére egy távoli hosztról a helyire:
    Ansible felgyorsítása Mitogen-nel.

Próbáljunk ki egy forgatókönyvet több (3) távoli géppel, például fájlok másolása egy távoli hosztra:
Ansible felgyorsítása Mitogen-nel.

Ahogy látható, a Mitogen időt és sávszélességet takarít meg számunkra ezekben a forgatókönyvekben. De ha a "szűk keresztmetszet" nem az Ansible-ben, hanem például a lemez I/O-jában vagy a hálózatban van, vagy máshol, akkor nehéz elvárni, hogy a Mitogen segíteni tud.

Próbáljuk ki a csomagok telepítésére vonatkozó forgatókönyvet yum/dnf segítségével, és a python modulokat pip segítségével. A csomagokat gyorsítótárazva tároltuk, hogy ne függjünk a hálózati problémáktól:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Csomagok telepítése
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Pip modulok telepítése
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Ezzel a Mitogennel 12 másodpercet vett igénybe, ahogy nélküle is.
Az alkalmazott adatokkal — Mitogen for Ansible oldal megtekintheti a többi benchmarkot és tesztet. Ahogy az oldalon áll:

A Mitogen nem tudja felgyorsítani a modult, amikor az végrehajtásra kerül. Csak annyira gyorsíthatja meg ennek a modulnak a végrehajtását, amennyire csak lehetséges.

Ezért fontos, hogy megtalálja a szűk keresztmetszeteit a telepítés során, és ha ezek Ansible-ból adódnak, a Mitogen segíthet megoldani őket, és jelentősen felgyorsítani a playbookok végrehajtását.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster