рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рд░ рд╕реЗрдЯрдЕрдк

рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рд░ рд╕реЗрдЯрдЕрдк
рдпреЛ рд▓реЗрдЦрд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫ рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ, рд░ рдбрдХрд░рдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЬрдбрд╛рдирдХреЛ рд╕рд╛рде рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдкрдирд┐ рд╣реБрдиреЗрдЫред

рдбрдХрд░рд╕рдБрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЖрдЬ рдо рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рдмрд╛рдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБред рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╣рд▓реНрдХрд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╕реБрд░рдХреНрд╖рд┐рдд рдХрдиреНрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рд╣реЛред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдЕрдиреНрдп рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрд╕рдБрдЧ рд╕рдорд╛рди рдЫ, рддрд░ рдердк рд░реВрдкрдорд╛ рддреНрдпрд╣рд╛рдБ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдкреНрд░рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдердк рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрд▓рдЧрд╛рд╡ рдЫред рдкрд░рд┐рдпреЛрдЬрдирд╛ 2017 рдорд╛ рд╕реБрд░реБ рднрдпреЛ, рдЬрдм рдЙрд╣реА рдирд╛рдордХреЛ рд╕рдореБрджрд╛рдпрд▓реЗ Intel Clear Containers рд░ Hyper.sh RunV рдмрд╛рдЯ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░рд╣рд░реВрдХреЛ рдорд░реНрдЬрд░ рдкреВрд░рд╛ рдЧрд░реНрдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ AMD64, ARM, IBM p- рд░ z рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердирдорд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рд╣реНрдпреЛред - рд╢реНрд░реГрдВрдЦрд▓рд╛ред рдердк рд░реВрдкрдорд╛, рдХрд╛рдо рд╣рд╛рдЗрдкрд░рднрд╛рдЗрдЬрд░ QEMU, рдлрд╛рдпрд░рдХреНрд░реЗрдХрд░ рднрд┐рддреНрд░ рд╕рдорд░реНрдерд┐рдд рдЫ, рд░ рдХрдиреНрдЯреЗрдирд░рд╕рдБрдЧ рдПрдХреАрдХрд░рдг рдкрдирд┐ рдЫред рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдЫ GitHub MIT рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрддред

рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ

  • рдЫреБрдЯреНрдЯреИ рдХреЛрд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ, рдпрд╕рд░реА рдиреЗрдЯрд╡рд░реНрдХ, рдореЗрдореЛрд░реА рд░ I / O рдкреГрдердХрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИ, рдпреЛ рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЕрд▓рдЧрд╛рд╡рдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЬрдмрд░рдЬрд╕реНрддреА рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред
  • OCI (рдХрдиреНрдЯреЗрдирд░ рдврд╛рдБрдЪрд╛), Kubernetes CRI рд╕рд╣рд┐рдд рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди
  • рдирд┐рдпрдорд┐рдд рд▓рд┐рдирдХреНрд╕ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рди, рдирд┐рдпрдорд┐рдд VM рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдУрднрд░рд╣реЗрдб рдмрд┐рдирд╛ рдмрдвреЗрдХреЛ рдЕрд▓рдЧрд╛рд╡
  • рдкреВрд░реНрдг рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рднрд┐рддреНрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН, рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ рдПрдХреАрдХрд░рдг рд░ рд╕реБрд░реБрд╡рд╛рддрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН

рд╕реЗрдЯрд┐рдЩ

рдЫрдиреН рдХреЛ рдЧреБрдЪреНрдЫрд╛ рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ, рдо Centos 7 рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рдЖрдзрд╛рд░рд┐рдд рднрдгреНрдбрд╛рд░рд╣рд░реВрдмрд╛рдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреБред
рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг: рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рдХреЛ рдХрд╛рдо рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рдорд╛ рдорд╛рддреНрд░ рд╕рдорд░реНрдерд┐рдд рдЫ, рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╕рди рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩрд▓реЗ рдкрдирд┐ рд╕рдзреИрдВ рдХрд╛рдо рдЧрд░реНрджреИрди sse4.1 рд╕рдорд░реНрдерди рдЪрд╛рд╣рд┐рдиреНрдЫ рдкреНрд░реЛрд╕реЗрд╕рд░рдмрд╛рдЯред

рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБ рдПрдХрджрдо рд╕рд░рд▓ рдЫ:

рднрдгреНрдбрд╛рд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

# yum -y install yum-utils

Selinux рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдпреЛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЕрдЭ рд╕рд╣реА рдЫ, рддрд░ рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдо рдпрд╕рд▓рд╛рдИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫреБ):

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

рд╣рд╛рдореА рднрдгреНрдбрд╛рд░ рдЬрдбрд╛рди рдЧрд░реНрдЫреМрдВ рд░ рд╕реНрдерд╛рдкрдирд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫреМрдВ

# source /etc/os-release
# ARCH=$(arch)
# BRANCH="${BRANCH:-stable-1.10}"
# yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
# yum -y install kata-runtime kata-proxy kata-shim

рд╕рдорд╛рдпреЛрдЬрди

рдо рдбрдХрд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗрдЫреБ, рдпрд╕рдХреЛ рд╕реНрдерд╛рдкрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдЫ, рдо рдпрд╕рд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдЫреИрди:

# rpm -qa | grep docker
docker-ce-cli-19.03.6-3.el7.x86_64
docker-ce-19.03.6-3.el7.x86_64
# docker -v
Docker version 19.03.6, build 369ce74a3c

рд╣рд╛рдореА daemon.json рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫреМрдВ:

# cat <<EOF > /etc/docker/daemon.json
{
  "default-runtime": "kata-runtime",
  "runtimes": {
    "kata-runtime": {
      "path": "/usr/bin/kata-runtime"
    }
  }
}
EOF

рдбрдХрд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

# service docker restart

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдбрдХрд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ uname рд▓реЗ рдореБрдЦреНрдп рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдХрд░реНрдиреЗрд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдиреЗрдЫ:

# docker run busybox uname -a
Linux 19efd7188d06 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 GNU/Linux

рдкреБрди: рд╕реБрд░реБ рдЧрд░реЗрдкрдЫрд┐, рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

# docker run busybox uname -a
Linux 9dd1f30fe9d4 4.19.86-5.container #1 SMP Sat Feb 22 01:53:14 UTC 2020 x86_64 GNU/Linux

рдердк рдЯреЛрд▓реАрд╣рд░реВ!

# time docker run busybox mount
kataShared on / type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
kataShared on /etc/resolv.conf type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hostname type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hosts type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /sys/firmware type tmpfs (ro,relatime)

real    0m2.381s
user    0m0.066s
sys 0m0.039s

# time docker run busybox free -m
              total        used        free      shared  buff/cache   available
Mem:           1993          30        1962           0           1        1946
Swap:             0           0           0

real    0m3.297s
user    0m0.086s
sys 0m0.050s

рджреНрд░реБрдд рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг

рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╕рдирдмрд╛рдЯ рдШрд╛рдЯрд╛рд╣рд░реВ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди - рдо рдореБрдЦреНрдп рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ sysbench рдЪрд▓рд╛рдЙрдБрдЫреБ рдпреЛ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдиреБрд╣реЛрд╕реН.

рдбрдХрд░ + рдХрдиреНрдЯреЗрдирд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ sysbench рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ

рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░реАрдХреНрд╖рдг

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.7335s
    total number of events:              10000
    total time taken by event execution: 36.7173s
    response time:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         approx.  95 percentile:               3.79ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.7173/0.00

RAM рдкрд░реАрдХреНрд╖рдг

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2172673.64 ops/sec)

102400.00 MiB transferred (2121.75 MiB/sec)

General statistics:
    total time:                          48.2620s
    total number of events:              104857600
    total time taken by event execution: 17.4161s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   17.4161/0.00

Docker+Kata рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ sysbench рдЪрд▓рд╛рдЙрдБрджреИ

рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░реАрдХреНрд╖рдг

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.5747s
    total number of events:              10000
    total time taken by event execution: 36.5594s
    response time:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         approx.  95 percentile:               3.77ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.5594/0.00

RAM рдкрд░реАрдХреНрд╖рдг

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2450366.94 ops/sec)

102400.00 MiB transferred (2392.94 MiB/sec)

General statistics:
    total time:                          42.7926s
    total number of events:              104857600
    total time taken by event execution: 16.1512s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   16.1512/0.00

рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рд╕реНрдерд┐рддрд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реНрдкрд╖реНрдЯ рдЫ, рддрд░ рдпреЛ рдзреЗрд░реИ рдкрдЯрдХ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрди, рдЖрдЙрдЯрд▓рд┐рдпрд░рд╣рд░реВ рд╣рдЯрд╛рдЙрди рд░ рдирддрд┐рдЬрд╛рд╣рд░реВ рдФрд╕рдд рдЧрд░реНрди рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рдЫ, рддреНрдпрд╕реИрд▓реЗ рдо рдЕрдЭреИ рдзреЗрд░реИ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░реНрджрд┐рдиред

рдирд┐рд╖реНрдХрд░реНрд╖

рддреНрдпрд╕реНрддрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕реБрд░реБ рд╣реБрди рдХрд░рд┐рдм рдкрд╛рдБрдЪ рджреЗрдЦрд┐ рджрд╢ рдЧреБрдгрд╛ рдмрдвреА рд▓рд╛рдЧреНрдиреЗ рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж (рдХрдиреНрдЯреЗрдирд░реНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рд╕рдорд╛рди рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░рди рдЯрд╛рдЗрдо рдПрдХ рд╕реЗрдХреЗрдиреНрдбрдХреЛ рдПрдХ рддрд┐рд╣рд╛рдЗ рднрдиреНрджрд╛ рдХрдо рд╣реБрдиреНрдЫ), рддрд┐рдиреАрд╣рд░реВ рдЕрдЭреИ рдкрдирд┐ рдЪрд╛рдБрдбреИ рдХрд╛рдо рдЧрд░реНрджрдЫ рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдкреВрд░реНрдг рд╕реБрд░реБ рд╕рдордп рд▓рд┐рдпреМрдВ (рддреНрдпрд╣рд╛рдБ рдорд╛рдерд┐рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реБрдиреН, рдЖрджреЗрд╢рд╣рд░реВ рддреАрди рд╕реЗрдХреЗрдиреНрдбрдХреЛ рдФрд╕рддрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдиреНрдЫ)ред рдареАрдХ рдЫ, рд╕реАрдкреАрдпреВ рд░ рд░реНрдпрд╛рдордХреЛ рджреНрд░реБрдд рдкрд░реАрдХреНрд╖рдгрдХреЛ рдирддрд┐рдЬрд╛рд▓реЗ рд▓рдЧрднрдЧ рдЙрд╕реНрддреИ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрджрдЫ, рдЬреБрди рд░рдорд╛рдИрд▓реЛ рдЧрд░реНрди рд╕рдХреНрджреИрди, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдХреЗрднреАрдПрдо рдЬрд╕реНрддрд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЪрд▓рд╛рдЗрдПрдХреЛ рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рддрдереНрдпрдХреЛ рдкреНрд░рдХрд╛рд╢рдорд╛ред

рдШреЛрд╖рдгрд╛

рд▓реЗрдЦ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рд╣реЛ, рддрд░ рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдирдЯрд╛рдЗрдо рдорд╣рд╕реБрд╕ рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рджрд┐рдиреНрдЫред рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХрд╛ рдзреЗрд░реИ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдХрднрд░ рдЧрд░рд┐рдПрдХрд╛ рдЫреИрдирдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рд╛рдЗрдЯрд▓реЗ рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдХреБрдмреЗрд░рдиреЗрдЯрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред рдердк рд░реВрдкрдорд╛, рддрдкрд╛рдЗрдБ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди, рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди, рд░ рдЕрдиреНрдп рд░реЛрдЪрдХ рдЪреАрдЬрд╣рд░реВрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрдирд┐ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдо рдпрд╣рд╛рдБ рдкрдвреЗрдХрд╛ рд░ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХрд╛ рд╕рдмреИрд▓рд╛рдИ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рди рдЖрдЧреНрд░рд╣ рдЧрд░реНрджрдЫреБ, рдЬрд╕рдорд╛ рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рднрд╡рд┐рд╖реНрдпрдХрд╛ рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВ рдирд┐рд░реНрднрд░ рд╣реБрдиреЗрдЫрдиреНред

рджрд░реНрддрд╛ рднрдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорд╛рддреНрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рди рд╕рдХреНрдЫрдиреНред рд╕рд╛рдЗрди рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реНрдХреГрдкрдпрд╛

рдХреЗ рдореИрд▓реЗ рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓реЗрдЦрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреБрдкрд░реНрдЫ?

  • 80,0%рд╣реЛ, рдердк рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН!28

  • 20,0%рд╣реЛрдЗрди, рдирдЧрд░реНрдиреБрд╣реЛрд╕реН...7

35 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорддрджрд╛рди рдЧрд░реЗред 7 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░реЛрдХрд┐рдПред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди