ืคืึทืจื’ื™ื›ืขืจืŸ ืึทื ืกื™ื‘ืœืข ืžื™ื˜ ืžื™ื˜ืึธื’ืขืŸ

Ansible ื’ืขื•ื•ืืจืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ืกื™ืกื˜ืขื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžืึทื ืึทื’ืขืžืขื ื˜. ื ืึธืš ืื™ื– ื’ืขืงื•ื™ืคื˜ ื“ื•ืจืš Red Hat ืื™ืŸ 2015 ื“ื™ ื ื•ืžืขืจ ืคึผืจื•ื™ืขืงื˜ ืคึผืึทืจื˜ื™ืกืึทืคึผืึทื ืฅ ื™ืงืกื™ื“ ื˜ื•ื™ื–ื ื˜ืขืจ ืื•ืŸ Ansible ื’ืขื•ื•ืืจืŸ ืžื™ืกื˜ืึธืžืข ื“ื™ ืžืขืจืกื˜ ื’ืขื•ื•ื™ื™ื ื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืึธืจืงืขืกื˜ืจืึทื˜ื™ืึธืŸ ืกื™ืกื˜ืขื. ื–ื™ื™ึทืŸ ื‘ืจื™ื™ื˜ ืงื™ื™ื˜ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ื– ื–ื™ื™ืขืจ ื™ืžืคึผืจืขืกื™ื•ื•.

ืึทื ืกื™ื‘ืœืข ืึทืจื‘ืขื˜ ืื™ื‘ืขืจ SSH ืงืึทื ืขืงืฉืึทื ื– ืฆื• ื•ื•ื™ื™ึทื˜ ืžื—ื ื•ืช. ืขืก ืึธืคึผืขื ืก ืึท SSH ืกืขืกื™ืข, ืœืึธื’ืก ืื™ืŸ, ืงืึทืคึผื™ื– ื“ื™ ืคึผื™ื˜ื”ืึธืŸ ืงืึธื“ ืื™ื‘ืขืจ ื“ื™ ื ืขืฅ ืื•ืŸ ืฉืจื™ื™ื‘ื˜ ืขืก ืฆื• ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืฆื™ื™ึทื˜ื•ื•ื™ื™ึทืœื™ืง ื˜ืขืงืข. ื ืึธืš ื“ืขื, ืขืก ืœื•ื™ืคื˜ ื“ืขื ื˜ืขืงืข ืื•ื™ืฃ ื“ื™ ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ. ื“ื™ ื’ืื ืฆืข ืกื™ืงื•ื•ืึทื ืก ืคื•ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื™ื– ื’ืึทื ืฅ ืœืึทื ื’ ืื•ืŸ ื˜ื™ื“ื™ืึทืก, ืึทื–ื•ื™ ืขืก ื–ืขื ืขืŸ ืคืึทืจืฉื™ื“ืŸ ื•ื•ืขื’ืŸ ืฆื• ืึทืคึผื˜ืึทืžื™ื™ื– ืขืก.

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื•ื•ืขื’ืŸ ืื™ื– SSH ืคึผื™ื™ืคึผืœื™ื™ื ื– ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื ื•ืฆืŸ ืื™ื™ืŸ SSH ืกืขืกื™ืข ืฆื• ื•ื™ืกืคื™ืจืŸ ื™ื ืกื˜ืจืึทืงืฉืึทื ื–, ืืœื ื•ื•ื™ ืขืคืŸ ืึท ื ื™ื™ึทืข ืกืขืกื™ืข ื™ืขื“ืขืจ ืžืึธืœ, ื•ื•ืึธืก ืงืขื ืขืŸ ืจืึทื˜ืขื•ื•ืขืŸ ืื•ื ื“ื– ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืฆื™ื™ื˜. (ื ืึธืจ ื’ืขื“ืขื ืงืขืŸ ืฆื• ืงืขืจ ืึทื•ื•ืขืง requiretty ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืคึฟืึทืจ sudo ืื™ืŸ ื“ื™ื™ืŸ /etc/sudoers ื˜ืขืงืข ืื•ื™ืฃ ื“ื™ ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ)

ื ื ื™ื™ึทืข ื•ื•ืขื’ ืฆื• ืึธื•ื•ืขืจืงืœืึธืงืง Ansible ืื™ื– ืึท ืคึผื™ื˜ื”ืึธืŸ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื’ืขืจื•ืคืŸ ืžื™ื˜ืึธื’ืขืŸ. ืื•ื™ื‘ ื•ื•ืขืจ ืขืก ื™ื– ื”ืื˜ ื ื™ืฉื˜ ื’ืขื”ืขืจื˜ ืคื•ืŸ ืขืก, ืื™ืš ื•ื•ืขืœ ื‘ืขืงื™ืฆืขืจ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ึทืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™. ืขืก ืึทืœืึทื•ื– ืฉื ืขืœ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ืคึผื™ื˜ื”ืึธืŸ ืงืึธื“ ืื•ื™ืฃ ืึท ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ, ืื•ืŸ Ansible ืื™ื– ื‘ืœื•ื™ื– ืื™ื™ืŸ ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ื ื•ืฆืŸ. ืžื™ื˜ืึธื’ืขืŸ ื ื™ืฆื˜ ืึท UNIX ืจืขืจ ืื•ื™ืฃ ื“ื™ ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ ืื•ืŸ ื˜ืจืึทื ืกืคืขืจืก ืคึผื™ื˜ื”ืึธืŸ ืงืึธื“ ืงืึทืžืคึผืจืขืกื˜ ืžื™ื˜ ื–ืœื™ื‘ ืื•ืŸ ืกื™ืจื™ืึทืœื™ื–ืขื“ ืžื™ื˜ ื–ื•ื™ืขืจืข ื•ื’ืขืจืงืข. ื“ืึธืก ื”ืขืœืคึผืก ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ ืขืก ืคืึทืกื˜ืขืจ ืื•ืŸ ืกืึทื•ื•ืขืก ืคืึทืจืงืขืจ. ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ืึท ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ื“ืขืจืงืœืขืจื•ื ื’, ืขืก ืื™ื– ื‘ืขืกื˜ืขืจ ืฆื• ืœื™ื™ืขื ืขืŸ ืื•ื™ืฃ ื“ืขื ื‘ืœืึทื˜ "ื•ื•ื™ืื–ื•ื™ ืขืก ืืจื‘ืขื˜". ืึธื‘ืขืจ ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืคืึธืงื•ืก ื‘ืœื•ื™ื– ืื•ื™ืฃ ื•ื•ื™ ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืึทืจื‘ืขื˜ ืžื™ื˜ Ansible.

ืžื™ื˜ืึธื’ืขืŸ ืื™ืŸ ื–ื™ื›ืขืจ ืฆื•ืฉื˜ืื ื“ืŸ ืงืขื ืขืŸ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ื™ืŸ Ansible ืงืึธื“ ืขื˜ืœืขื›ืข ืžืึธืœ ืื•ืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ืจืขื“ื•ืฆื™ืจืŸ ืคืึทืจืงืขืจ ืงืึทื ืกืึทืžืฉืึทืŸ. ืœืึธืžื™ืจ ื˜ืฉืขืง ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ื ื•ืฆืŸ ืงืึทืกืขืก ืื•ืŸ ื–ืขืŸ ื•ื•ื™ ืคื™ืœ ืขืก ื”ืขืœืคึผืก ืื•ื ื“ื–.

ืื™ืš ื ื•ืฆืŸ Ansible ืžืขืจืกื˜ ืคึฟืึทืจ: ืงืจื™ื™ื™ื˜ื™ื ื’ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืื•ื™ืฃ ืึท ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ, ื™ื ืกื˜ืึธืœื™ื ื’ ืคึผืึทืงืึทื“ื–ืฉืึทื–, ืงืึทืคึผื™ื™ื ื’ ื˜ืขืงืขืก ืฆื• ืื•ืŸ ืคึฟื•ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ. ื˜ืึธืžืขืจ ืื™ืจ ื”ืึธื‘ืŸ ืื ื“ืขืจืข ื‘ื™ื™ืฉืคื™ืœืŸ - ืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ.

ื–ืืœ ืก ื’ื™ื™ืŸ!

ืžื™ื˜ืึธื’ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึฟืึทืจ Ansible ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜:
ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืžื™ื˜ืึธื’ืขืŸ ื‘ื™ื‘ืœื™ืึธื˜ืขืง:

pip install mitogen

ืื™ืฆื˜ ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ืขืงื•ื•ื™ื•ื•ืึทืœืขื ื˜ ื•ื•ืขื’ืŸ - ืึธื“ืขืจ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืึธืคึผืฆื™ืขืก ืื™ืŸ ื“ื™ ืึทื ืกible.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

ืœืึธืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ Ansible ืื™ืŸ virtualenv, ืžื™ื˜ ืื•ืŸ ืึธืŸ ืžื™ื˜ืึธื’ืขืŸ:

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

ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ืžื™ื˜ืึธื’ืขืŸ 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 ื˜ืขืงืขืก:

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) ื•ื•ื™ื™ึทื˜ ืžืืฉื™ื ืขืŸ, ืœืžืฉืœ ืึท ืกืฆืขื ืึทืจ ืžื™ื˜ ืงืึทืคึผื™ื™ื ื’ ื˜ืขืงืขืก ืฆื• ืึท ื•ื•ื™ื™ึทื˜ ื‘ืึทืœืขื‘ืึธืก:
ืคืึทืจื’ื™ื›ืขืจืŸ ืึทื ืกื™ื‘ืœืข ืžื™ื˜ ืžื™ื˜ืึธื’ืขืŸ

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ืžื™ื˜ืึธื’ืขืŸ ืกืึทื•ื•ืขืก ืื•ื ื“ื– ื‘ื™ื™ื“ืข ืฆื™ื™ื˜ ืื•ืŸ ืคืึทืจืงืขืจ ืื™ืŸ ื“ื™ ืกื™ื ืขืจื™ืึธื•ื–. ืึธื‘ืขืจ ืื•ื™ื‘ ื“ื™ ื‘ืึทื˜ืึทืœื ืขืง ืื™ื– ื ื™ืฉื˜ ืื™ืŸ Ansible, ืึธื‘ืขืจ ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ืŸ ื“ื™ I / O ืคื•ืŸ ืึท ื“ื™ืกืง ืึธื“ืขืจ ื ืขืฅ, ืึธื“ืขืจ ืขืจื’ืขืฅ ืึทื ื“ืขืจืฉ, ืขืก ืื™ื– ืฉื•ื•ืขืจ ืฆื• ื“ืขืจื•ื•ืึทืจื˜ืŸ ืึทื– ืžื™ื˜ืึธื’ืขืŸ ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืื•ื ื“ื–.

ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืึท ืฉืจื™ืคื˜ ืžื™ื˜ ื™ื ืกื˜ืึธืœื™ื ื’ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืžื™ื˜ 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

ืžื™ื˜ ืžื™ื˜ืึธื’ืขืŸ ืขืก ื’ืขื ื•ืžืขืŸ 12 ืกืขืงื•ื ื“ืขืก, ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ืึธืŸ ืขืก.
ืื•ื™ืฃ ื‘ืœืึทื˜ ืžื™ื˜ืึธื’ืขืŸ ืคึฟืึทืจ ืึทื ืกื™ื‘ืœืข ื‘ืœืึทื˜ ืื™ืจ ืงืขื ื˜ ืงื•ืงืŸ ืื™ืŸ ืื ื“ืขืจืข ื‘ืขื ื˜ืฉืžืึทืจืงืก ืื•ืŸ ื˜ืขืกืฅ. ื•ื•ื™ ื“ืขืจ ื‘ืœืึทื˜ ื–ืื’ื˜:

ืžื™ื˜ืึธื’ืขืŸ ืงืขืŸ ื ื™ืฉื˜ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ืžืึธื“ื•ืœืข ื•ื•ืขืŸ ืขืก ืื™ื– ืคืœื™ืกื ื“ื™ืง. ืขืก ืงืขื ืขืŸ ื ืึธืจ ืžืึทื›ืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื“ืขื ืžืึธื“ื•ืœืข ื•ื•ื™ ืฉื ืขืœ ื•ื•ื™ ืžืขื’ืœืขืš.

ื“ืขืจื™ื‘ืขืจ, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ื™ืŸ ื‘ืึทื˜ืึทืœื ืขืงืก ืื™ืŸ ื“ื™ื™ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืื•ื™ื‘ ื–ื™ื™ ื–ืขื ืขืŸ ืจืขื›ื˜ ืฆื• Ansible, ืžื™ื˜ืึธื’ืขืŸ ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืื™ืจ ืกืึธืœื•ื•ืข ื–ื™ื™ ืื•ืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื“ื™ื™ืŸ ืคึผืœื™ื™ึทื‘ืึธืึธืงืก.

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster