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

рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╕реЗрдЯрдЕрдк
рд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛ рд▓реЗрдЦрд╛рдд рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓ рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реНрд╕, рдЖрдгрд┐ рдбреЙрдХрд░рд╢реА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирд╕рд╣ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рджреЗрдЦреАрд▓ рдЕрд╕реЗрд▓.

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

рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

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

рд╕реЗрдЯрд┐рдВрдЧ

рдЖрд╣реЗрдд рдмрд░реЗрдЪ рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рдкрд░реНрдпрд╛рдп, рд╕реЗрдВрдЯреЛрд╕ 7 рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдореА рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреВрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрди.
рдорд╣рддреНрд╡рд╛рдЪреЗ: рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реНрд╕рдЪреЗ рдХрд╛рд░реНрдп рдХреЗрд╡рд│ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╡рд░ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рджреЗрдЦреАрд▓ рдиреЗрд╣рдореА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА sse4.1 рд╕рдорд░реНрдерди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╛рд╕реВрди.

рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ:

рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛:

# yum -y install yum-utils

рд╕реЗрд▓рд┐рдирдХреНрд╕ рдЕрдХреНрд╖рдо рдХрд░рд╛ (рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдореА рддреЗ рдЕрдХреНрд╖рдо рдХрд░рддреЛ):

# 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

рдЖрдореНрд╣реА deemon.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

рд░реЕрдо рдЪрд╛рдЪрдгреА

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

рдбреЙрдХрд░ + рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╡рд╛рдкрд░реВрди 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

рд░реЕрдо рдЪрд╛рдЪрдгреА

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛