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

рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╕реЗрдЯрдЕрдк
рдпрд╣ рд▓реЗрдЦ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░, рдФрд░ рдбреЙрдХрд░ рд╕реЗ рдЙрдирдХреЗ рд╕рдВрдмрдВрдз рдХрд╛ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рднреА рд╣реЛрдЧрд╛ред

рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдЬ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╣рд▓реНрдХреЗ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрд▓рдЧрд╛рд╡ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ 2017 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдИ, рдЬрдм рдЗрд╕реА рдирд╛рдо рдХреЗ рд╕рдореБрджрд╛рдп рдиреЗ рдЗрдВрдЯреЗрд▓ рдХреНрд▓рд┐рдпрд░ рдХрдВрдЯреЗрдирд░ рдФрд░ рд╣рд╛рдЗрдкрд░.рд╢ рд░рдирд╡реА рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд▓рдп рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдПрдордбреА64, рдПрдЖрд░рдПрдо, рдЖрдИрдмреАрдПрдо рдкреА- рдФрд░ рдЬреЗрдб рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рдорд░реНрдерди рдкрд░ рдХрд╛рдо рдЬрд╛рд░реА рд░рд╣рд╛ред -рд╢реГрдВрдЦрд▓рд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рд╛рдЗрдкрд░рд╡рд╛рдЗрдЬрд╝рд░ QEMU рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдкрдЯрд╛рдЦрд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рдХрдВрдЯреЗрдирд░рдб рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рднреА рд╣реИред рдХреЛрдб рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ GitHub рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рддред

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

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

рд╕реНрдерд╛рдкрдирд╛

рд╡рд╣рд╛рдБ рдмрд╣реБрдд рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдХрд▓реНрдк, рдореИрдВ рд╕реЗрдВрдЯреЛрд╕ 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

рд╣рдо 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

рд░реИрдо рдкрд░реАрдХреНрд╖рдг

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ