- Slurm ááẠááá·áºá¡á¬áž Kubernetes áá±á«ááºážá ááºááá¯á· áááºáá±á¬ááºááẠááá¯á·ááá¯áẠááá·áºá¡ááááá¬ááᯠááŒáŸáá·áºáááºááẠá¡ááŸááºááááºááœáá·áºááŒá¯áá«áááºá
- áá«áááºáá°áá»á¬áž áá»á±á¬áºááœáŸááºááŒáááºá á¡áá áºá¡áááºážáá»á¬ážááᯠááá±á·áá¬ááá±ážáá°áá»á¬áž ááá¯á·ááá¯áẠáááºážááá¯á·áááŒá¿áá¬áá»á¬ážááᯠáááŒá±ááŸááºážááá±ážáá°áá»á¬ážáá²á០á¡áááºážáááºáᬠááŸááá«áááºá ááááá±á·áááŒáœááºážáá»ááºáááŸáááœá±ááŒááºá¡ááºážááŒááºáž ("Slurm ááẠááá·áºá¡ááœááºáááá·áºáá»á±á¬áºáᯠáááºáá¶á á¬ážááá«áá áááºááŸááºáá á»á±ážááŸá¯ááºážá¡ááŒáá·áºá¡á á¯á¶ááá¯áá»áœááºá¯ááºááá¯á·ááŒááºá¡ááºážáá±ážáááº")á áá°ááẠáá°áááœááºá¡á¬ážááᯠááááºááááá·áºááŸááºážááŒá±á¬ááºážá¡ááŒá±á¬ááºážááŒáá»ááºááŒáá·áº áá°áá áºáŠážáááºážááᬠá¡áá¯á¶ážááŒá¯áá²á·áááºá
- áá¬ááá·áº Slurm ááẠá ááá·áºáá®áá¬á áááºááœáẠá ááºáááºáá¬áá¡á á±á¬ááá¯ááºážááœáẠáá»ááºážááááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá²áááºážáá¶á·ááá¯ážáá°áá®áá° Selectel ááẠáááºáááºááŸá¯á¡ááœáẠcloud áá áºáá¯áá¬áá áááºážáááá¯ááºááá¯ááºá¡á ááºážá¡áá±ážáááºážááá¯áááºáž áá¶á·ááá¯ážáá±ážáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±áᶠSlurm (á ááºáááºáᬠ9-11) ááᯠáááºááá²áá²áá¯ááºáá±ááŒá®áž áááá¯ááááºá¡áá áºáá áºáá¯- DevOps Slurm (á ááºáááºáᬠ4-6) ááᯠááááºáááºáá±ážáá±áá«áááºá
Slurm ááá¯áᬠáá¬áá²á áááºááá¯ááŒá±á¬ááºážááœá¬ážáá²á
ááœááºáá²á·ááá·áºáá áºááŸá áºá Kubernetes ááœáẠáááºáááºážáá»á¬ážáá»ááºážáááẠá áááºáá°ážááá¬áááºá á©áá¯áẠ18 ááœááºá Slurm-1 ááẠáááºáá²áá±á¬á á ááºáááºáááŒáẠáááºáááºááŸá¯ááŒáá·áº (á ááºááŒáá·áºáá±á«áºááœáẠáááºáááºááŸá¯ááŒá®ážááœá¬ážáá±á¬á¡áá«)á áá±á·á ááºááŒá¿áá¬áá»á¬ážá áœá¬ááŒáá·áº ááŒá áºáá»ááºáá²á·áááºá á ááºážáááºááŸá¯áá»á¬áž áá±á«ááºážá ááºážááŒááºáž- ááááá¯á¶áž Slurm ááœáẠáá«áááºáá°áá»á¬ážááẠFellowship of the Ring áá²á·ááá¯á· á¡áá»ááºážáá»ááºáž áááºááœááºáá²ááŒá áºáááºá
á€áááºááŸá¬ Slurm-1 ááŸáá·áºáá°áááºá
ááááŠážáá¯á¶áž Slurm ááœáẠMegaSlurm ááá¯ááºáá±á¬ááºááẠá áááºáá°ážáá±á«áºáá±á«ááºáá²á·áááºá áá°ááá¯á·á áááºáááºá á¬ážáá²á·á¡ááŒá±á¬ááºážá¡áá¬ááœá±ááᯠáá°ááœá±ááᯠáá±ážááŒááºážáá²á·ááŒá®áž á¡á±á¬ááºááá¯áá¬áááŸá¬ âáá«áááºáá°áá»á¬ážáá²á· áá±á¬ááºážááá¯ááŸá¯á¡áâ á¡ááá·áºááŒáá·áºáááºáááºážáá áºáᯠáá»ááºážááá²á·áá«áááºá á áááºáááºá á¬ážááá¯á·áá±á¬ááºážáá±ááá·áº áá áºááŒáááºáááºážáá±á¬ á¡ááŒá áºá¡áá»ááºáá áºáᯠááŒá áºááœá¬ážáááºá áá±á 19 áááºáá±á·ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºážáááá¯ááºááá¯áẠáá¯áá¹ááááŸáá·áº á¡ááœááºážááá¯ááºážáááá¯ááºážááŸáá·áºá¡áá° áááá·áºá¡ááá·áºááŒáá·áºáááºáááºážááᯠááŒááºáááºááŒá®ážááŒá áºáááºá
áá
áºááŸá
áºáá¬áá¬áá¡ááœááºáž Slurm ááẠá¡ááœá²á·á¡á
ááºážá¡ááá¯áẠááŒá±á¬ááºážáá²ááœá¬ážáááº-
â Docker ááŸáá·áº Anisble ááᯠáááºááááá¯ááááºá០áááºááŸá¬ážáá²á·ááŒá®áž áá®ážááŒá¬ážá¡áœááºááá¯ááºážáááºáááºážáá»á¬áž ááŒá¯áá¯ááºáá²á·áááºá
- áá»á±á¬ááºážáá¬ážáá»á¬ážá¡á¬áž áááºáá°ááŸá¯á¡á
á¯á¡áá±ážáá»á¬ážááᯠááŒá±ááŸááºážáá¬ááœáẠáá°áá®ááŒá±ááŸááºážáá±ážáá±á¬ áááºážááá¬ááá¯ááºáᬠáá¶á·ááá¯ážáá°áá®ááŸá¯á
- ááá¯áá±á¬ááŒá±á¬áá°áá»á¬ážááẠáááºážá
áá
áºááá¯ááºážááá¯ááºáᬠáá¶á·ááá¯ážáá°áá®ááŸá¯áá»á¬áž áááŸááá±ááŒá®ááŒá
áºáááºá
Slurm 4 ááœá²á·áá±á¬á¡ááœá²á·
áá«áááºáá°áá»á¬ážáá¶á០áá¯á¶á·ááŒááºáá»ááº
áá±á¬ááºáááºááŸááºáááºážáá áºáá¯áááºááŸááºáá¬ážáá«áááº- á¡ááŒá±áᶠSlurm ááœááºáá«áááºáá° 170á MegaSlurm ááœáẠ75 áá±á¬ááºá
áááºááœáẠ- á
áá° 101 ááœáẠ170 áŠážááẠá¡ááŒá¶ááŒá¯áá»ááºáá±á¬ááºááᯠááŒáá·áºá
áœááºáá²á·áááºá
Kubernetes ááẠááŸááºážáááºážáá¬áá«ááá¬ážá
41 - k8s ááᯠáá¬ážááááºáá±ážáá±ááá·áº áááºááŸá¬áá°ážáááá²ááá¯áᬠáááá«áááºá
36 - á¡áááºá k8s ááᯠááááá²á·áá±áá²á· á¡áᯠááŒá±áááºááœá¬ážááŒá®á
23 - á¡áááºá k8 ááᯠáááá²á·áá±ááá·áº á¡áᯠááá¯áááá¬áá«ááŒá®á
1 - áá»áœááºáá±á¬áº áá¬á០á¡áá
áºááááºáá°áá²á·áá«á
0 - k8s á¡ááŒá±á¬ááºáž áá¬ááŸáá¬ážááááºáá«á
Slurm áááŒááºážáááºááŸá¯ááᯠáááºáááºáá²á·ááá¯á·ááŸá áºáááºááááºážá
áá° 16 áá±á¬ááºá Slurm á á¡áááºážááœááºááŒá®áž ááŸá±ážáááºááá¯á· áááºááŒááŒá®áž 14 áá±á¬ááºá á¡áááºážáááºáá²ááŒá®áž ááŒááºáááºááá¯á· áááºááŒáá«áááºá áá»ááºáá¬ááŸááºáááºá
ááẠSlurm ááá¯ááœá¬ážááá·áº ááŒá¿áá¬ááᯠáááºááŒá±ááŸááºážááŒá®ážááŒá®áá¬ážá
90 - áá¯ááºáááºá
11 - No.
MegaSlurm
áá° áá ááẠáá¯á¶á·ááŒááºáá»ááºáá±á¬ááºááᯠááŒáá·áºááœááºážáá²á·áááºá áá° á áá±á¬ááºá ááœááºááœááºážááẠááŸá±ážáááºá áá° á áá±á¬ááºá Mega ááá¯ááœá¬ážááá·áº ááŒá¿áá¬ááᯠáááŒá±ááŸááºážááá¯ááºáá²á·áá«áá°ážá áá»ááºáá¬ááœá± OK áá«áááºá
Speaker áá¯á¶ážáááºáá»ááºáá»á¬áž
áá±áá±á«áºáá«áá®áá St. Petersburg Slurm ááŸá¬ á¡á ááŒá¯áá° á¡áá»á¬ážá á¯ááŸááá²á·áááºá Moscow Slurm ááŸá¬ áá°á¡áá»á¬ážá¡ááŒá¬áž Kubernetes ááᯠá ááºážáá¯á¶ážáá°ážááŒá®ážáá¬ážáá«á ááá·áºá¡á¬áž á ááºážá á¬ážá á±áá±á¬ á¡ááá·áºááŒáá·áºáá±ážááœááºážáá»á¬ážá áœá¬ááŸááááºá
á ááá·áºáá®áá¬á áááºááŸá¬ áá»áœááºáá±á¬áºááá¯á·áá²á· áááºáááºážááááºážááᯠáááºá¡áá»áááºááŸá¬ áá¯ááºáá±ááá²ááá¯á· áá°ááá¯á·á áá±ážáá²á·áááºááá¯áááºá áá±á¬áºá ááá¯ááŸá¬ áá°ááá¯á· áá¬ááŒá±á¬áá·áº áá«ááá¯á·áá²á· áááºáááºážááœááᯠáá¯á¶ážááá¯á· á¡ááá¯ááŒá¯ááŒá®áž áá°áááºáž kubespray ááᯠááá°áááŸá¬áá²ááá¯á· áá±ážáá±ááŒá®á á€áááºááŸá¬ á¡áááºá¡áááºáááºážá á¬ážáá»á¬ážá áá±áááºááá¯ááºážááŒá¬ážááœá±ážáá±á«áºááŸá¯ááŒá áºáá±ááŒá®ááŒá áºáááºá
á¡áá±á·á¡áá»áá·áºá áááºáá²áááºá áá°ááœá±á á¡ááŸá¬ážá¡ááœááºážááœá± á¡áá»á¬ážááŒá®ážáá¯ááºáááºá á¡á²áá«á á¡áááºážáá±á¬ááºážáááºá á á¬áááºáááºážáá²á· ááá¯ááºááœá²ááŸá¬ááá¯ááºáá² á¡ááŸá¬ážáá¯ááºááááºá
á¡ááá¡ááŸááºááŒá¯áááºááŸááºáá»á¬ážááá°ááŒááºážá Github ááŸáá±á«ááºážáá¯ááºáá¯ááºááŒááºážááá¯ááºáᬠááá·áºáááºáá»ááºáá»á¬ážá áááºááá¯á·ááᯠáá»áœááºá¯ááºááá¯á· áá¯á¶ááŸááºááŒá¯á¶ááœá±á·áá±ááááºá á€áááºááŸá¬ ááááŒá áºááẠ- Selectel cloud ááœáẠá¡á á¯á¡á ááºáž 200 ááá·áºááᯠáááŒáá¯ááºááẠá¡áá¯á¶ážááŒá¯áá²á·áááºá á€á¡ááœáẠáááºáá°áá»áŸ áááºážááá¯á·á á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠááŒááºáááºáá¬ážááŒááºážáááŸááá«á
Selectel ááœáẠSlurm áááŒá±ááŒá¬áá»ááº
â
áá±ážááŸá¯ááºáž : 25 âœ
á¡ááá¯áá«á¡á á®á¡á ááºááá¯:
áá±á«ááºážá
áẠ#1- Kubernetes ááááºáááºá á¡ááá á¡á
áááºá¡ááá¯ááºážáá»á¬áž
- k8s áááºážááá¬ááááºáááºá áá±á¬áºááŒáá»ááºá á¡áá¯á¶ážáá»ááŸá¯á ááá±á¬ááá¬ážáá»á¬áž
â Podá ReplicaSetá Deploymentá Serviceá Ingressá PVá PVCá ConfigMapá áá»áŸáá¯á·ááŸááºáá»ááº
áá±á«ááºážá
ááºáá¶áá«áẠ2- Cluster áá®ááá¯ááºážá á¡ááá á¡á
áááºá¡ááá¯ááºážáá»á¬ážá á¡ááŸá¬ážáá¶ááá¯ááºáááºá k8s ááœááºáááº
- á¡á
á¯á¡áá±ážáá®ááá¯ááºážá á¡áááá¡á
áááºá¡ááá¯ááºážáá»á¬ážá á¡ááŸá¬ážáá¶ááá¯ááºáááº
- k8s ááœááºáááº
áá±á«ááºážá
áẠ#3- Kubesprayá áá»áááºááŸáááŒááºážááŸáá·áº Kubernetes á¡á
á¯á¡áá±ážáá
áºáᯠáááºáá±á¬ááºááŒááºážá
- Kubesprayá Kubernetes á¡á
á¯á¡áá±ážáááœá²á·á
ááºážáá¯á¶ááŸáá·áº áá»áááºááŸáááŒááºážá
áá±á«ááºážá
áẠ#4- á¡ááá·áºááŒáá·áº Kubernetes Abstractions
- DaemonSetá StatefulSetá RBACá Jobá CronJobá Pod Schedulingá InitContainer
áá±á«ááºážá
ááºáá¶áá«áẠ5- ááŒáá·áºáá»ááá±ážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº á¡ááºááºáá®áá±ážááŸááºážáá»á¬áž
â áááºáá±á¬ááºááŸá¯ááŒáá·áºáá»ááá±ážáááºážáááºážáá»á¬ážáááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááº- NodePort vs LoadBalancer vs Ingress
â Ingress Controller (Nginx) - á¡áááºá¡ááœá¬ážá¡áá¬ááᯠáá»áááºááŸáááŒááºážá
â áá»áœááºážáá»ááºáá°- SSL/TLS áááºááŸááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠááá°áá«á
áá±á«ááºážá ááºáá¶áá«áẠá- áá²á·á ááºá¡ááŒá±á¬ááºáž áááá«ááºáž
áá±á«ááºážá áẠ#7- áááºááŸááºáááºáá±áá»á¬ááᯠááá·áºááœááºážááŒááºážá
áá±á«ááºážá áẠ#8- Ceph- "áá«áá¯ááºáááᯠáá¯ááºáá«" ááá·áºááœááºážááŒááºážá
áá±á«ááºážá
ááºáá¶áá«áẠá- áá
áºáá¯ááºááŒááºážááŸáá·áº á
á±á¬áá·áºááŒáá·áºááŒááºážá
- á¡á
á¯á¡áá±ážá
á±á¬áá·áºááŒáá·áºááŒááºážá Prometheus
- á¡á
á¯ááá¯áẠááŸááºáááºážááá°ááŒááºážá ááœááºáááº/áá»á±á¬á·áá»á±á¬ááºážááŒááºáž/Kibana
áá±á«ááºážá áẠ#10- á¡á á¯á¡áá±áž á¡ááºááááº
áá±á«ááºážá ááºáá¶áá«áẠ11- áááºááœá±á·á¡áá¯ááºá á¡ááá®áá±ážááŸááºáž dockerization ááŸáá·áº á¡á á¯á¡áá±ážáá áºáá¯ááá¯á· á áááºáá«á
stepik.org ááŸá Docker ááŸáá·áº Ansible ááá¯ááºáá¬áááºáááºážáá»á¬ážááᯠá á»á±ážááŸá¯ááºážááœáẠááá·áºááœááºážáá¬ážáá«áááºá
â
áá±ážááŸá¯ááºáž : 45 âœ
á¡ááá¯áá«á¡á á®á¡á ááºááá¯:
áá±á«ááºážá
ááºáá¶áá«áẠ1- Git ááᯠááááºáááºááŒááºážá
- á¡ááŒá±áá¶á¡áááá·áºáá»á¬áž git initá commit, add, diff, log, status, pull, push
â áá±áááœááºážáááºáááºážáá»ááºááᯠáááºááŸááºááŒááºáž- áááºááœá±á·áá»áá±á¬ á¡ááŒá¶ááŒá¯áá»ááºáá»á¬áž
- Git á
á®ážáááºážááŸá¯á á¡ááá¯ááºážá¡áááºáá»á¬ážááŸáá·áº tagsá áá»á°áá¬áá»á¬ážááᯠáá±á«ááºážá
ááºážáá«á
- áá±ážáá¶áá±á«ááºáá®áá±á¬ repo á¡áá»á¬ážá¡ááŒá¬ážááŒáá·áºá¡áá¯ááºáá¯ááºááŒááºážá
áá±á«ááºážá
áẠ2- Git ááŒáá·áº á¡ááœá²á·ááá¯ááºáá¯ááºáá±á¬ááºááŒááºážá
- GitHub á
á®ážáááºážááŸá¯
- áá±á¬ááºážááá¯áá»ááºááᯠáááºáááºážá áááºá ááœá²áá«á
- á¡ááœá²á·áá»á¬ážááŸáá·áºáááºá
ááºáá±á¬ Gitflow ááŸáá·áºá¡ááŒá¬ážá
á®ážáááºážááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž áááááá¹ááá»á¬ážá áá¯ááºáá±ááŸá¯áá»á¬ážá
áá±á«ááºážá
áẠ#3- CI/CD á á¡ááá¯á¡áá»á±á¬ááºá
áá
áºá¡ááŒá±á¬ááºáž áááá«ááºáž
- git ááœáẠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŒááºáž (áá±á¬á·ááºáá»á¬ážá CI ááááºáááºá áá»áááºáá»á¬áž)
â Tools (bashá make, gradle)
- á
ááºáá¯á¶á
ááºážáá±ážááœá²ááá¯ááºážáá»á¬ážááŸáá·áº IT ááœááºáááºážááá¯á·ááá»áŸá±á¬ááºááœáŸá¬
áá±á«ááºážá
ááºáá¶áá«áẠ4- CI/CD- Gitlab ááŸáá·áºá¡áá¯ááºáá¯ááºááŒááºážá
- áááºáá±á¬ááºáá«á á
ááºážáááºáá«á á¡áá¯á¶ážáá»áá«á
- á¡ááá·áºáá»á¬ážá ááœá²ááŒá¬ážááŸá¯áá»á¬ážá áá¯ááºáá±á¬ááºááŸá¯ááááºážáá»á¯ááºááŸá¯ (áá¬á á¡áá«á áá«áááºáááº)
áá±á«ááºážá
áẠ5- ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸá¯áá±á¬áá·áºá០á¡ááá®áá±ážááŸááºážááŒáá·áº áá¯ááºáá±á¬ááºááŒááºážá
- áá»áœááºá¯ááºááá¯á·ááẠPython ááœáẠmicroservice (á
ááºážáááºááŸá¯áá»á¬ážá¡áá«á¡áááº) áá±ážáááº
- ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠdocker-compose ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
áá±á«ááºážá
áẠ6- á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ Code á¡ááŒá
áº
â IaC- á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáá¯ááºá¡ááŒá
Ạáá»ááºážáááºáá«á
- á¥ááá¬á¡áá±ááŒáá·áº Terraform ááá¯á¡áá¯á¶ážááŒá¯á IaC
â Ansible ááᯠááá°áá¬á¡ááŒá
ẠIaC ááᯠá¡áá¯á¶ážááŒá¯áááºá
- áá»áá¯á·áá²á·ááŒááºážá áá¯ááºáá±á¬áºááŒá±á¬ááá¯ááŒááºáž
- Ansible playbooks áááºáá®ážáá±á·áá»áá·áºáá«á
- ááœá²á·á
ááºážááŸá¯ááá¯ááŸá±á¬ááºááŸá¯á áá°ážáá±á«ááºážáá±á¬ááºááœááºááŸá¯á á¡ááá®áá±ážááŸááºážá¡ááá¯á¡áá»á±á¬ááºá
áá
áº
áá±á«ááºážá
ááºáá¶áá«áẠ7- á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá
ááºážáááºááŒááºážá
- Molecule ááŸáá·áº Gitlab CI ááŒáá·áº á
ááºážáááºááŒááºážááŸáá·áº á
ááºáááºáááŒááºáá±á«ááºážá
ááºááŒááºážá
áá±á«ááºážá
ááºáá¶áá«áẠ8- áá¬áá¬áá»á¬ážááᯠááŒáŸáá·áºáááºááŒááºážá á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŒááºážá
- áá¯ááºáá¯á¶áá»á¬ážá
á¯áá±á¬ááºážááŒááºážá
- PXE ááŸáá·áº DHCP
áá±á«ááºážá
ááºáá¶áá«áẠá- á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ á¡ááá¯á¡áá»á±á¬ááºá
áá
áº
- áá¬áá¬áá»á¬ážáá±á«áºááœáẠááœáá·áºááŒá¯áá»ááºá¡ááœáẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáááºáá±á¬ááºááŸá¯á á¥ááá¬
- ChatOps (ááá¯ááºááá¯ááºážáá»á¬ážááŸáá·áºá¡áá° instant messenger áá»á¬ážáá±á«ááºážá
ááºážááŒááºáž)
áá±á«ááºážá
áẠ#10- áá¯á¶ááŒá¯á¶áá±áž á¡ááá¯á¡áá»á±á¬ááºá
áá
áº
- CI/CD áá
á¹á
ááºážáá»á¬áž áááºááŸááºáá±ážááá¯ážááŒááºážá
- á¡á¬ážáááºážáá»ááºá
áááºááºáááºááŒááºážá
áá±á«ááºážá
ááºáá¶áá«áẠáá- á
á±á¬áá·áºááŒáá·áºáá±á·áá¬ááŒááºážá
- SLAá SLOá Error Budget ááŸáá·áº SRE áááá¹áá¬ááŸá¡ááŒá¬ážááŒá±á¬ááºá
áá¬á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬áž
â SRE- SLI ááŸáá·áº SLO á
á±á¬áá·áºááŒáá·áºáá±á·áá»áá·áºááŸá¯
â SRE: Error Budget ááá¯á¡áá¯á¶ážááŒá¯ááŒááºáž á¡áá±á·á¡áá»áá·áº
- SRE- á¡ááŸá±á¬áá·áºá¡ááŸááºááŸáá·áº áá¯ááºáááºážáááºáááºááŸá¯ááá¯ááºáᬠáááºá
á®áá¶ááá·áºááœá²ááŸá¯ (apigatewayá service meshá circuit breakers)
- ááá¯ááºááá¯ááºážáá»á¬ážááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž ááá¯ááºážáá¬ááŸá¯áá»á¬ážááᯠá
á±á¬áá·áºááŒáá·áºááŒááºážá
source: www.habr.com