рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ

рдкрд░рд┐рдЪрдп

рд╣рдо рдЕрдВрджрд░ рд╣реИрдВ Shopify рдЗрд╕реНрддрд┐рдпреЛ рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдПрдХ рдЪреАрдЬрд╝ рдХреЛ рдЫреЛрдбрд╝рдХрд░: рдпреЗ рдорд╣рдВрдЧрд╛ рд╣реИ.

╨Т рдкреНрд░рдХрд╛рд╢рд┐рдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:

рдЗрд╕реНрддрд┐рдпреЛ 1.1 рдХреЗ рд╕рд╛рде, рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рддрд┐ 0,6 рдЕрдиреБрд░реЛрдз рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓рдЧрднрдЧ 1000 рд╡реАрд╕реАрдкреАрдпреВ (рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрд░) рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред

рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдореЗрдВ рдкрд╣рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП (рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрд░рдл 2 рдкреНрд░реЙрдХреНрд╕реА), рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП 1200 рдХреЛрд░ рд╣реЛрдВрдЧреЗ, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рджрд╕ рд▓рд╛рдЦ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рджрд░ рд╕реЗред Google рдХреЗ рд▓рд╛рдЧрдд рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рдЧрднрдЧ $40/рдорд╛рд╣/рдХреЛрд░ рдмреИрдарддрд╛ рд╣реИ n1-standard-64рдпрд╛рдиреА, рдЕрдХреЗрд▓реЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 50 рдорд┐рд▓рд┐рдпрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдорд╛рд╣ 1 рд╣рдЬрд╛рд░ рдбреЙрд▓рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдЦрд░реНрдЪ рдЖрдПрдЧрд╛ред

рдЗрд╡рд╛рди рд╕рд┐рдо (рдЗрд╡рд╛рди рд╕рд┐рдо) рджреГрд╖реНрдЯрд┐рдЧрдд рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЧрдИ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рджреЗрд░реА рд╣реБрдИ рдФрд░ рдореЗрдореЛрд░реА рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛:

рдЬрд╛рд╣рд┐рд░ рд╣реИ, values-istio-test.yaml рд╕реАрдкреАрдпреВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмрдврд╝рд╛ рджреЗрдЧрд╛ред рдпрджрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЧрдгрд┐рдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 24 рд╕реАрдкреАрдпреВ рдХреЛрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП 0,5 рд╕реАрдкреАрдпреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореЗрд░реЗ рдкрд╛рд╕ рдЙрддрдирд╛ рдирд╣реАрдВ рд╣реИ. рдЬрдм рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рддреЛ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред

рдореИрдВ рд╕реНрд╡рдпрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реНрддрд┐рдпреЛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рд╕реА рдЕрдиреНрдп рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ рдХреЗ рд╕рдорд╛рди рдХреИрд╕реЗ рд╣реИ: рд▓рд┐рдВрдХрд░рдб.

рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рд╕реНрдерд╛рдкрдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╕реБрдкрд░рдЧреНрд▓реВ:

$ supergloo init
installing supergloo version 0.3.12
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!

рдореИрдВрдиреЗ рд╕реБрдкрд░рдЧреНрд▓реВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ рдХреЛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛. рд╣рдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реБрдкрд░рдЧреНрд▓реВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрддрдГ рдХреБрдЫ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рдПрдХ-рдПрдХред

рдпрд╣ рдкреНрд░рдпреЛрдЧ Google Kubernetes рдЗрдВрдЬрди рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ 1.12.7-gke.7 рдФрд░ рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдкреВрд▓ n1-standard-4 рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдиреЛрдб рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде (рдиреНрдпреВрдирддрдо 4, рдЕрдзрд┐рдХрддрдо 16)ред

рдлрд┐рд░ рдореИрдВрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдПред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛:

$ supergloo install linkerd --name linkerd
+---------+--------------+---------+---------------------------+
| INSTALL |     TYPE     | STATUS  |          DETAILS          |
+---------+--------------+---------+---------------------------+
| linkerd | Linkerd Mesh | Pending | enabled: true             |
|         |              |         | version: stable-2.3.0     |
|         |              |         | namespace: linkerd        |
|         |              |         | mtls enabled: true        |
|         |              |         | auto inject enabled: true |
+---------+--------------+---------+---------------------------+

рдлрд┐рд░ рдЗрд╕реНрддрд┐рдпреЛ:

$ supergloo install istio --name istio --installation-namespace istio-system --mtls=true --auto-inject=true
+---------+------------+---------+---------------------------+
| INSTALL |    TYPE    | STATUS  |          DETAILS          |
+---------+------------+---------+---------------------------+
| istio   | Istio Mesh | Pending | enabled: true             |
|         |            |         | version: 1.0.6            |
|         |            |         | namespace: istio-system   |
|         |            |         | mtls enabled: true        |
|         |            |         | auto inject enabled: true |
|         |            |         | grafana enabled: true     |
|         |            |         | prometheus enabled: true  |
|         |            |         | jaeger enabled: true      |
+---------+------------+---------+---------------------------+

рдХреНрд░реИрд╢-рд▓реВрдк рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧреЗ рдФрд░ рдлрд┐рд░ рдирд┐рдпрдВрддреНрд░рдг рдкреИрдирд▓ рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдПред

(рдиреЛрдЯ: рд╕реБрдкрд░рдЧреНрд▓реВ рдЕрднреА рдХреЗрд╡рд▓ рдЗрд╕реНрддрд┐рдпреЛ 1.0.x рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реНрддрд┐рдпреЛ 1.1.3 рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рджреЛрд╣рд░рд╛рдпрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред)

рдЗрд╕реНрддрд┐рдпреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рд╕реНрдерд╛рдкрдирд╛

рдЗрд╕реНрддрд┐рдпреЛ рдХреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рдПрдиреНрд╡реЙрдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╛рдЗрдбрдХрд╛рд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - MutatingAdmissionWebhook. рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ. рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рд╕рднреА рдирдП рдкреЙрдбреНрд╕ рдХреА рдкрд╣реБрдВрдЪ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдЗрдбрдХрд╛рд░ рдФрд░ рдЗрдирд┐рдЯрдХрдВрдЯреЗрдирд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ iptables.

рд╢реЙрдкрд┐рдлрд╝рд╛рдИ рдореЗрдВ рд╣рдордиреЗ рд╕рд╛рдЗрдбрдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдиреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдбрдХрд╛рд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ istio-injection: enabled:

$ kubectl label namespace irs-client-dev istio-injection=enabled
namespace/irs-client-dev labeled

$ kubectl label namespace irs-server-dev istio-injection=enabled
namespace/irs-server-dev labeled

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓рд┐рдВрдХрд░рдб рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рд╕реНрдерд╛рдкрдирд╛

рд▓рд┐рдВрдХрд░рдб рд╕рд╛рдЗрдбрдХрд╛рд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИ kubectl edit):

metadata:
  annotations:
    linkerd.io/inject: enabled

$ k edit ns irs-server-dev 
namespace/irs-server-dev edited

$ k get ns irs-server-dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    linkerd.io/inject: enabled
  name: irs-server-dev
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

рдЗрд╕реНрддрд┐рдпреЛ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░

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

рдлреНрд▓реИрд╢ рдмрд┐рдХреНрд░реА рдХреЗ рджреМрд░рд╛рди рд╢реЙрдкрд┐рдлрд╛рдИ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рднрд╛рд░реА рднрд╛рд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, Shopify рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЛ рдРрд╕реА рдмрд┐рдХреНрд░реА рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ. рдмрдбрд╝реЗ рдЧреНрд░рд╛рд╣рдХ рдХрднреА-рдХрднреА рдирд┐рдпреЛрдЬрд┐рдд рдлреНрд▓реИрд╢ рд╕реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд▓реЛрдЧ рдЙрдиреНрд╣реЗрдВ рджрд┐рди рдпрд╛ рд░рд╛рдд рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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

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

рдпрд╣рд╛рдВ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • рд╣рдордиреЗ 10 рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рд╣реИрдВ bar рд╕реЗрд╡рд╛ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рддреА рд╣реИ 200/OK 100 рдПрдордПрд╕ рдХреЗ рдмрд╛рдж.
  • рд╣рдо 10 рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100 рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ bar.
  • рд╣рд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рд╣рдо 1 рд╕рд░реНрд╡рд░ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ 5xx рдЧреНрд░рд╛рд╣рдХ рдкрд░.

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

(рдиреЛрдЯ: рд╣рдо рдЗрд╕реНрддрд┐рдпреЛ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреА рдУрдкрди рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред)

рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░

рд╣рдо рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╢реАрд▓ рдиреЛрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  • irs-client-loadgen: 3 рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкреНрд░рддрд┐ 100 рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреА рд╣реИрдВ irs-client.
  • irs-client: 3 рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рдЬреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИрдВ, 100ms рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВ irs-server.
  • irs-server: 3 рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рдЬреЛ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИрдВ 200/OK 100 рдПрдордПрд╕ рдХреЗ рдмрд╛рдж.

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдо 9 рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд┐рд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдЗрдбрдХрд╛рд░реНрд╕ рдЗрди irs-client-loadgen ╨╕ irs-server рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100 рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ irs-client - 200 (рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ)ред

рд╣рдо рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ DataDogрдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИред

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

рдХрдгреНрдЯреНрд░реЛрд▓ рдкреЗрдирд▓реНрд╕

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╕реАрдкреАрдпреВ рдЦрдкрдд рдХреА рдЬрд╛рдВрдЪ рдХреАред

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рд▓рд┐рдВрдХрд░рдб рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ ~22 рдорд┐рд▓реАрдХреЛрд░

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдЗрд╕реНрддрд┐рдпреЛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖: ~750 рдорд┐рд▓реАрдХреЛрд░

рдЗрд╕реНрддрд┐рдпреЛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рд▓рдЧрднрдЧ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ 35 рдЧреБрдирд╛ рдЕрдзрд┐рдХ CPU рд╕рдВрд╕рд╛рдзрдирд▓рд┐рдВрдХрд░рдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рдмреЗрд╢рдХ, рд╕рдм рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕реНрддрд┐рдпреЛ-рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреА рд╣реИ (рдЗрд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдШрдЯрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рддреЛ рднреА рд╣рдореЗрдВ 100 рдорд┐рд▓реАрдХреЛрд░реНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХрд▓рд┐рдВрдХрд░рдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

рд╕рд╛рдЗрдбрдХрд╛рд░ рдкреНрд░реЙрдХреНрд╕реА

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

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рд▓рд┐рдВрдХрд░реНрдб: рдЖрдИрдЖрд░рдПрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП ~100 рдорд┐рд▓реАрдХреЛрд░реНрд╕, рдЖрдИрдЖрд░рдПрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ-рд▓реЛрдбрдЬреЗрди рдХреЗ рд▓рд┐рдП ~50 рдорд┐рд▓реАрдХреЛрд░реНрд╕

рдкрд░рд┐рдгрд╛рдо рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд▓реЛрдбрдЬреЗрди рдкреНрд░реЙрдХреНрд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛрдЧреБрдирд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ: рд▓реЛрдбрдЬреЗрди рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рдПрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдЗрд╕реНрддрд┐рдпреЛ/рджреВрдд: рдЖрдИрдЖрд░рдПрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП ~155 рдорд┐рд▓реАрдХреЛрд░реНрд╕, рдЖрдИрдЖрд░рдПрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ-рд▓реЛрдбрдЬреЗрди рдХреЗ рд▓рд┐рдП ~75 рдорд┐рд▓реАрдХреЛрд░реНрд╕

рд╣рдо рдЗрд╕реНрддрд┐рдпреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕реНрддрд┐рдпреЛ/рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓рдЧрднрдЧ 50% рдЕрдзрд┐рдХ CPU рд╕рдВрд╕рд╛рдзрдирд▓рд┐рдВрдХрд░рдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

рд╣рдо рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рднреА рдпрд╣реА рдпреЛрдЬрдирд╛ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рд▓рд┐рдВрдХрд░рдб: рдЖрдИрдЖрд░рдПрд╕-рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП ~50 рдорд┐рд▓реАрдХреЛрд░

рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рд▓рд┐рдВрдХрд░рдб рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдЦрдкрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдЗрд╕реНрддрд┐рдпреЛ/рджреВрдд: рдЖрдИрдЖрд░рдПрд╕-рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП ~80 рдорд┐рд▓реАрдХреЛрд░

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, рд╕рд╛рдЗрдбрдХрд╛рд░ рдЗрд╕реНрддрд┐рдпреЛ/рдПрдиреНрд╡реЙрдп рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ рд▓рдЧрднрдЧ 60% рдЕрдзрд┐рдХ CPU рд╕рдВрд╕рд╛рдзрдирд▓рд┐рдВрдХрд░рдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

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

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

рд╣рдо рдЕрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрди рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ!

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

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