Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•

เชชเชฐเชฟเชšเชฏ

เช…เชฎเซ‡ เช…เช‚เชฆเชฐ เช›เซ€เช Shopify Istio เชจเซ‡ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เชคเชฐเซ€เช•เซ‡ เชœเชฎเชพเชตเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚. เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฐเซ€เชคเซ‡, เชเช• เชตเชธเซเชคเซ เชธเชฟเชตเชพเชฏ, เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡: เชคเซ‡ เชฎเซ‹เช‚เช˜เซ เช›เซ‡.

ะ’ เชชเซเชฐเช•เชพเชถเชฟเชค เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• Istio เชฎเชพเชŸเซ‡ เชคเซ‡ เช•เชนเซ‡ เช›เซ‡:

Istio 1.1 เชธเชพเชฅเซ‡, เชชเซเชฐเซ‹เช•เซเชธเซ€ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชฆเซ€เช  0,6 เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡ เช†เชถเชฐเซ‡ 1000 vCPUs (เชตเชฐเซเชšเซเชฏเซเช…เชฒ เช•เซ‹เชฐเซ‹) เชตเชพเชชเชฐเซ‡ เช›เซ‡.

เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถเชฎเชพเช‚ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชฆเซ‡เชถ เชฎเชพเชŸเซ‡ (เช•เชจเซ‡เช•เซเชถเชจเชจเซ€ เชฆเชฐเซ‡เช• เชฌเชพเชœเซเช 2 เชชเซเชฐเซ‹เช•เซเชธเซ€), เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฎเชพเชคเซเชฐ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชฎเชพเชŸเซ‡ 1200 เช•เซ‹เชฐเซ‹ เชนเชถเซ‡, เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชเช• เชฎเชฟเชฒเชฟเชฏเชจ เชตเชฟเชจเช‚เชคเซ€เช“เชจเชพ เชฆเชฐเซ‡. Google เชจเชพ เช–เชฐเซเชš เช•เซ‡เชฒเซเช•เซเชฏเซเชฒเซ‡เชŸเชฐ เชฎเซเชœเชฌ, เชคเซ‡ เช—เซ‹เช เชตเชฃเซ€ เชฎเชพเชŸเซ‡ เชฒเช—เชญเช— $40/เชฎเชนเชฟเชจเซ‹/เช•เซ‹เชฐ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซ‡ เช›เซ‡ n1-standard-64, เชเชŸเชฒเซ‡ เช•เซ‡, เชเช•เชฒเชพ เช† เชชเซเชฐเชฆเซ‡เชถเชฎเชพเช‚ เช…เชฎเชจเซ‡ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก 50 เชฎเชฟเชฒเชฟเชฏเชจ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡ เชฆเชฐ เชฎเชนเชฟเชจเซ‡ 1 เชนเชœเชพเชฐ เชกเซ‹เชฒเชฐเชฅเซ€ เชตเชงเซ เช–เชฐเซเชš เชฅเชถเซ‡.

เช‡เชตเชพเชจ เชธเชฟเชฎ (เช‡เชตเชพเชจ เชธเชฟเชฎ) เชฆเซƒเชทเซเชŸเชฟเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€เชฎเชพเช‚ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เช—เชฏเชพ เชตเชฐเซเชทเซ‡ เชตเชฟเชฒเช‚เชฌ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เช…เชจเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชฎเชพเชŸเซ‡ เชคเซ‡ เชœ เชตเชšเชจ เช†เชชเซเชฏเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€:

เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, values-istio-test.yaml CPU เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‡ เช—เช‚เชญเซ€เชฐเชคเชพเชฅเซ€ เชตเชงเชพเชฐเชถเซ‡. เชœเซ‹ เชฎเซ‡เช‚ เชฎเชพเชฐเซเช‚ เช—เชฃเชฟเชค เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ เชฎเชพเชŸเซ‡ เชฒเช—เชญเช— 24 CPU เช•เซ‹เชฐเซ‹ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชชเซเชฐเซ‹เช•เซเชธเซ€ เชฎเชพเชŸเซ‡ 0,5 CPU เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเชŸเชฒเซเช‚ เชจเชฅเซ€. เชœเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชตเชงเซ เชธเช‚เชธเชพเชงเชจเซ‹ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชนเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเซ€เชถ.

เชนเซเช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹ เช•เซ‡ เช‡เชธเซเชŸเชฟเช“เชจเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ เช…เชจเซเชฏ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เชธเชพเชฅเซ‡ เช•เซ‡เชŸเชฒเซเช‚ เชธเชฎเชพเชจ เช›เซ‡: เชฒเชฟเช‚เช•เชฐเซเชก.

เชธเซ‡เชตเชพ เชฎเซ‡เชถ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ

เชธเซŒ เชชเซเชฐเชฅเชฎ, เชฎเซ‡เช‚ เชคเซ‡เชจเซ‡ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเซเช‚ เชธเซเชชเชฐเช—เซเชฒเซ‚:

$ 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!

เชฎเซ‡เช‚ SuperGloo เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถเชจเซ‡ เชฌเซเชŸเชธเซเชŸเซเชฐเซ‡เชชเชฟเช‚เช— เช–เซ‚เชฌ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชฎเชพเชฐเซ‡ เช˜เชฃเซเช‚ เช•เชฐเชตเชพเชจเซเช‚ เชจเชนเซ‹เชคเซเช‚. เช…เชฎเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ SuperGloo เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เช†เชตเชพ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เช†เชฆเชฐเซเชถ เช›เซ‡. เชฆเชฐเซ‡เช• เชธเซ‡เชตเชพ เชฎเซ‡เชถ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซ‡ เชถเชพเชฌเซเชฆเชฟเช• เชฐเซ€เชคเซ‡ เชฅเซ‹เชกเชพ เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹. เชฎเซ‡เช‚ เช†เช‡เชธเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชฌเซ‡ เช•เซเชฒเชธเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ - เชเช•-เชเช• Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡.

เช† เชชเซเชฐเชฏเซ‹เช— Google Kubernetes Engine เชชเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชฎเซ‡เช‚ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ 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      |
+---------+------------+---------+---------------------------+

เช•เซเชฐเซ‡เชถ-เชฒเซ‚เชชเชฎเชพเช‚ เชฅเซ‹เชกเซ€ เชฎเชฟเชจเชฟเชŸเซ‹ เชฒเชพเช—เซ€, เช…เชจเซ‡ เชชเช›เซ€ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ เชธเซเชฅเชฟเชฐ เชฅเชˆ.

(เชจเซ‹เช‚เชง: SuperGloo เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ Istio 1.0.x เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชฎเซ‡เช‚ Istio 1.1.3 เชธเชพเชฅเซ‡ เชชเซเชฐเชฏเซ‹เช— เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเซเชฏเซ‹, เชชเชฐเช‚เชคเซ เช•เซ‹เชˆ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชคเชซเชพเชตเชค เชœเชฃเชพเชฏเซ‹ เชจเชฅเซ€.)

Istio เช“เชŸเซ‹เชฎเซ‡เชŸเชฟเช• เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

Istio เชจเซ‡ เชธเชพเช‡เชกเช•เชพเชฐ เชเชจเซเชตเซ‹เชฏ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชธเชพเช‡เชกเช•เชพเชฐ เช‡เชจเซเชœเซ‡เช•เซเชŸเชฐ - เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช MutatingAdmissionWebhook. เช…เชฎเซ‡ เช† เชฒเซ‡เช–เชฎเชพเช‚ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚. เชนเซเช‚ เชซเช•เซเชค เชเชŸเชฒเซเช‚ เชœ เช•เชนเซ€ เชฆเช‰เช‚ เช•เซ‡ เช† เชเช• เชจเชฟเชฏเช‚เชคเซเชฐเช• เช›เซ‡ เชœเซ‡ เชคเชฎเชพเชฎ เชจเชตเชพ เชชเซ‹เชกเซเชธเชจเซ€ เชเช•เซเชธเซ‡เชธ เชชเชฐ เชจเชœเชฐ เชฐเชพเช–เซ‡ เช›เซ‡ เช…เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชเช• sidecar เช…เชจเซ‡ initContainer เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡, เชœเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡. iptables.

เช…เชฎเซ‡ Shopify เชชเชฐ เชธเชพเช‡เชกเช•เชพเชฐเซเชธเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชเช•เซเชธเซ‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐ เชฒเช–เซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เช† เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• เชฎเชพเชŸเซ‡ เชฎเซ‡เช‚ เช‡เชธเซเชŸเชฟเช“ เชธเชพเชฅเซ‡ เช†เชตเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹. เชœเซเชฏเชพเชฐเซ‡ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เชถเซ‹เชฐเซเชŸเช•เชŸ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชธเชพเช‡เชกเช•เชพเชฐเซเชธเชจเซ‡ เช‡เชจเซเชœเซ‡เช•เซเชŸ เช•เชฐเซ‡ เช›เซ‡ 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

เชธเซเชตเชšเชพเชฒเชฟเชค Linkerd เชœเชฎเชพเชตเชŸ เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

Linkerd เชธเชพเช‡เชกเช•เชพเชฐ เชเชฎเซเชฌเซ‡เชกเชฟเช‚เช— เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชเชจเซ‹เชŸเซ‡เชถเชจเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช (เชฎเซ‡เช‚ เชคเซ‡เชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เช›เซ‡ 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

Istio เชซเซ‹เชฒเซเชŸ เชŸเซ‹เชฒเชฐเชจเซเชธ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐ

Shopify เชฎเชพเชŸเซ‡ เช…เชจเชจเซเชฏ เชŸเซเชฐเชพเชซเชฟเช• เชธเชพเชฅเซ‡ เชชเซเชฐเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ Istio เชจเชพเชฎเชจเซเช‚ เชซเซ‹เชฒเซเชŸ เชŸเซ‹เชฒเชฐเชจเซเชธ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐ เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡. เช…เชฎเชจเซ‡ เชตเซˆเชตเชฟเชงเซเชฏเชชเซ‚เชฐเซเชฃ เชŸเซ‹เชชเซ‹เชฒเซ‹เชœเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชงเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€ เชœเซ‡ เช…เชฎเชพเชฐเชพ เชธเซ‡เชตเชพ เช—เซเชฐเชพเชซเชจเชพ เชšเซ‹เช•เซเช•เชธ เชญเชพเช—เชจเซ‡ เชฐเชœเซ‚ เช•เชฐเซ‡, เชœเซ‡ เชšเซ‹เช•เซเช•เชธ เชตเชฐเซเช•เชฒเซ‹เชกเชจเซ‡ เชฎเซ‹เชกเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ‡เชฒ เชนเซ‹เชฏ.

เชซเซเชฒเซ‡เชถ เชตเซ‡เชšเชพเชฃ เชฆเชฐเชฎเชฟเชฏเชพเชจ Shopify เชจเซเช‚ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชญเชพเชฐเซ‡ เชญเชพเชฐ เชนเซ‡เช เชณ เช›เซ‡. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, Shopify เชตเซ‡เชšเชพเชฃเช•เชฐเซเชคเชพเช“เชจเซ‡ เช†เชตเชพ เชตเซ‡เชšเชพเชฃเชจเซ‡ เชตเชงเซ เชตเช–เชค เชฐเชพเช–เชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡. เชฎเซ‹เชŸเชพ เช—เซเชฐเชพเชนเช•เซ‹ เช•เซเชฏเชพเชฐเซ‡เช• เช†เชฏเซ‹เชœเชฟเชค เชซเซเชฒเซ‡เชถ เชตเซ‡เชšเชพเชฃ เชตเชฟเชถเซ‡ เชšเซ‡เชคเชตเชฃเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เชฆเชฟเชตเชธ เช•เซ‡ เชฐเชพเชคเซเชฐเชฟเชจเชพ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชฏเซ‡ เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เช…เชจเชชเซ‡เช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเซ‡ เช›เซ‡.

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช•เชคเชพ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐเชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‡ เชฎเซ‹เชกเซ‡เชฒ เช•เชฐเชตเชพ เช‡เชšเซเช›เซ€เช เช›เซ€เช เชœเซ‡ เชŸเซ‹เชชเซ‹เชฒเซ‹เชœเซ€ เช…เชจเซ‡ เชตเชฐเซเช•เชฒเซ‹เชกเซเชธ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชฏ เช›เซ‡ เชœเซ‡เชฃเซ‡ เชญเซ‚เชคเช•เชพเชณเชฎเชพเช‚ Shopify เชจเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‡ เชฆเชฌเชพเชตเซ€ เชฆเซ€เชงเซเช‚ เช›เซ‡. เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชฎเซเช–เซเชฏ เชนเซ‡เชคเซ เช เช›เซ‡ เช•เซ‡ เช…เชฎเชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชธเซเชคเชฐเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏเชคเชพ เช…เชจเซ‡ เช–เชพเชฎเซ€ เชธเชนเชฟเชทเซเชฃเซเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ เช•เซ‡ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เช…เช—เชพเช‰ เชธเซ‡เชตเชพเช“เชฎเชพเช‚ เชตเชฟเช•เซเชทเซ‡เชช เชชเชพเชกเชคเชพ เชญเชพเชฐเชจเซ‹ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชคเซ‡ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ‡ เช›เซ‡.

เชซเซ‹เชฒเซเชŸ เชŸเซ‹เชฒเชฐเชจเซเชธ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐเชจเชพ เชนเชพเชฐเซเชฆเชฎเชพเช‚ เชตเชฐเซเช•เชฐ เชจเซ‹เชก เช›เซ‡, เชœเซ‡ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เชจเซ‹เชก เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชตเชฐเซเช•เชฐ เชจเซ‹เชกเชจเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏเซ‡ เชธเซเชฅเชฟเชฐ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช…เชฅเชตเชพ REST API เชฆเซเชตเชพเชฐเชพ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฐเซ€เช—เซเชฐเซ‡เชธเชจ เชŸเซ‡เชธเซเชŸเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชตเชฐเซเช•เชฐ เชจเซ‹เชกเซเชธเชจเชพ เชกเชพเชฏเชจเซ‡เชฎเชฟเช• เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช.

เช…เชนเซ€เช‚ เช†เชตเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡:

  • เช…เชฎเซ‡ 10 เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช bar เชธเซ‡เชตเชพ เชœเซ‡ เชชเซเชฐเชคเชฟเชธเชพเชฆ เช†เชชเซ‡ เช›เซ‡ 200/OK 100 ms เชชเช›เซ€.
  • เช…เชฎเซ‡ 10 เช•เซเชฒเชพเชฏเชจเซเชŸเซเชธ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช - เชฆเชฐเซ‡เช• เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชกเซ‡ 100 เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ bar.
  • เชฆเชฐ 10 เชธเซ‡เช•เชจเซเชกเซ‡ เช…เชฎเซ‡ 1 เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐเชจเซ€ เชญเซ‚เชฒเซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€เช เช›เซ€เช 5xx เช—เซเชฐเชพเชนเช• เชชเชฐ.

เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเชพ เช…เช‚เชคเซ‡, เช…เชฎเซ‡ เชฒเซ‹เช— เช…เชจเซ‡ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ เชŸเซ‡เชธเซเชŸ เชชเชพเชธ เชฅเชฏเซ‹ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚. เช† เชฐเซ€เชคเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถเชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจ เชตเชฟเชถเซ‡ เชœเชพเชฃเซ€เช เช›เซ€เช เช…เชจเซ‡ เช–เชพเชฎเซ€ เชธเชนเชฟเชทเซเชฃเซเชคเชพ เชตเชฟเชถเซ‡ เช…เชฎเชพเชฐเซ€ เชงเชพเชฐเชฃเชพเช“เชจเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ€เช—เซเชฐเซ‡เชถเชจ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช.

(เชจเซ‹เช‚เชง: เช…เชฎเซ‡ Istio เชซเซ‹เชฒเซเชŸ เชŸเซ‹เชฒเชฐเชจเซเชธ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐ เช“เชชเชจ เชธเซ‹เชฐเซเชธเชฟเช‚เช— เชชเชฐ เชตเชฟเชšเชพเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชชเชฐเช‚เชคเซ เชนเชœเซ เชธเซเชงเซ€ เชคเซ‡เชฎ เช•เชฐเชตเชพ เชคเซˆเชฏเชพเชฐ เชจเชฅเซ€.)

เชธเชฐเซเชตเชฟเชธ เชฎเซ‡เชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• เชฎเชพเชŸเซ‡ Istio เชซเซ‹เชฒเซเชŸ เชŸเซ‹เชฒเชฐเชจเซเชธ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐ

เช…เชฎเซ‡ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเชฐเชจเชพ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เช—เชพเช‚เช เซ‹ เชธเซ‡เชŸ เช•เชฐเซเชฏเชพ เช›เซ‡:

  • irs-client-loadgen: 3 เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“ เชœเซ‡ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชฆเซ€เช  100 เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ irs-client.
  • irs-client: 3 เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“ เช•เซ‡ เชœเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‡ เช›เซ‡, 100ms เชฐเชพเชน เชœเซเช“ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเซ‡ เชซเซ‹เชฐเชตเชฐเซเชก เช•เชฐเซ‹ irs-server.
  • irs-server: 3 เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“ เชœเซ‡ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ 200/OK 100 ms เชชเช›เซ€.

เช† เช—เซ‹เช เชตเชฃเซ€ เชธเชพเชฅเซ‡, เช…เชฎเซ‡ 9 เช…เช‚เชคเชฟเชฎ เชฌเชฟเช‚เชฆเซเช“ เชตเชšเซเชšเซ‡ เชธเซเชฅเชฟเชฐ เชŸเซเชฐเชพเชซเชฟเช• เชชเซเชฐเชตเชพเชนเชจเซ‡ เชฎเชพเชชเซ€ เชถเช•เซ€เช เช›เซ€เช. เชฎเชพเช‚ เชธเชพเช‡เชกเช•เชพเชฐ irs-client-loadgen ะธ irs-server เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก 100 เชตเชฟเชจเช‚เชคเซ€เช“ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‹, เช…เชจเซ‡ irs-client - 200 (เช‡เชจเช•เชฎเชฟเช‚เช— เช…เชจเซ‡ เช†เช‰เชŸเช—เซ‹เช‡เช‚เช—).

เช…เชฎเซ‡ เชธเช‚เชธเชพเชงเชจ เชตเชชเชฐเชพเชถเชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเซ€เช เช›เซ€เช เชกเซ‡เชŸเชพเชกเซ‹เช—เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ เช•เซเชฒเชธเซเชŸเชฐ เชจเชฅเซ€.

เชฐเชฟเชเชฒเซเชŸ

เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซ‡เชจเชฒเซเชธ

เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ CPU เชตเชชเชฐเชพเชถเชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€.

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
เชฒเชฟเช‚เช•เชฐเซเชก เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ ~22 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
Istio เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซ‡เชจเชฒ: ~750 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ

Istio เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซ‡เชจเชฒ เช†เชถเชฐเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ 35 เช—เชฃเชพ เชตเชงเซ CPU เชธเช‚เชธเชพเชงเชจเซ‹Linkerd เช•เชฐเชคเชพเช‚. เช…เชฒเชฌเชคเซเชค, เชฌเชงเซเช‚ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡, เช…เชจเซ‡ เช‡เชธเซเชŸเชฟเช“-เชŸเซ‡เชฒเชฟเชฎเซ‡เชŸเซเชฐเซ€ เช…เชนเซ€เช‚ เช˜เชฃเชพ เชฌเชงเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ (เช•เซ‡เชŸเชฒเชพเช• เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡). เชœเซ‹ เช†เชชเชฃเซ‡ เช† เช˜เชŸเช•เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€เช, เชคเซ‹ เชชเชฃ เช†เชชเชฃเชจเซ‡ 100 เชฅเซ€ เชตเชงเซ เชฎเชฟเชฒเซ€เช•เซ‹เชฐ เชฎเชณเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ 4 เช—เชฃเซ‹ เชตเชงเซLinkerd เช•เชฐเชคเชพเช‚.

เชธเชพเช‡เชกเช•เชพเชฐ เชชเซเชฐเซ‹เช•เซเชธเซ€

เช…เชฎเซ‡ เชชเช›เซ€ เชชเซเชฐเซ‹เช•เซเชธเซ€เชจเชพ เช‰เชชเชฏเซ‹เช—เชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซเชฏเซเช‚. เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชธเชพเชฅเซ‡ เชฐเซ‡เช–เซ€เชฏ เชธเช‚เชฌเช‚เชง เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช, เชชเชฐเช‚เชคเซ เชฆเชฐเซ‡เช• เชธเชพเช‡เชกเช•เชพเชฐ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเชพเช• เช“เชตเชฐเชนเซ‡เชก เช›เซ‡ เชœเซ‡ เชตเชณเชพเช‚เช•เชจเซ‡ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡.

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
เชฒเชฟเช‚เช•เชฐเซเชก: irs-เช•เซเชฒเชพเชฏเชจเซเชŸ เชฎเชพเชŸเซ‡ ~100 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ, IRs-เช•เซเชฒเชพเชฏเชจเซเชŸ-เชฒเซ‹เชกเชœเชจ เชฎเชพเชŸเซ‡ ~50 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ

เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชคเชพเชฐเซเช•เชฟเช• เชฒเชพเช—เซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชฒเซ‹เชกเชœเชจ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชคเชพ เชฌเชฎเชฃเซเช‚ เชŸเซเชฐเชพเชซเชฟเช• เชฎเซ‡เชณเชตเซ‡ เช›เซ‡: เชฒเซ‹เชกเชœเชจเชฎเชพเช‚เชฅเซ€ เชฆเชฐเซ‡เช• เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชตเชฟเชจเช‚เชคเซ€ เชฎเชพเชŸเซ‡, เช•เซเชฒเชพเชฏเช‚เชŸ เชชเชพเชธเซ‡ เชเช• เช‡เชจเช•เชฎเชฟเช‚เช— เช…เชจเซ‡ เชเช• เช†เช‰เชŸเช—เซ‹เช‡เช‚เช— เชนเซ‹เชฏ เช›เซ‡.

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
Istio/เชฆเซ‚เชค: irs-client เชฎเชพเชŸเซ‡ ~155 millicores, ~75 millicores for irs-client-loadgen

เช…เชฎเซ‡ Istio sidecars เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชœเซ‹เชˆเช เช›เซ€เช.

เชชเชฐเช‚เชคเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, Istio/Envoy เชชเซเชฐเซ‹เช•เซเชธเซ€เช“ เชตเชพเชชเชฐเซ‡ เช›เซ‡ เชฒเช—เชญเช— 50% เชตเชงเซ CPU เชธเช‚เชธเชพเชงเชจเซ‹Linkerd เช•เชฐเชคเชพเช‚.

เช…เชฎเซ‡ เชธเชฐเซเชตเชฐ เชฌเชพเชœเซ เชชเชฐ เชธเชฎเชพเชจ เชฏเซ‹เชœเชจเชพ เชœเซ‹เชˆเช เช›เซ€เช:

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
เชฒเชฟเช‚เช•เชฐเซเชก: IRs-เชธเชฐเซเชตเชฐ เชฎเชพเชŸเซ‡ ~50 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ

Istio เช…เชจเซ‡ Linkerd เชฎเชพเชŸเซ‡ CPU เชตเชชเชฐเชพเชถ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•
Istio/เชฆเซ‚เชค: irs-เชธเชฐเซเชตเชฐ เชฎเชพเชŸเซ‡ ~80 เชฎเชฟเชฒเซ€เช•เซ‹เชฐ

เชธเชฐเซเชตเชฐ เชฌเชพเชœเซ เชชเชฐ, เชธเชพเช‡เชกเช•เชพเชฐ Istio/เชฆเซ‚เชค เชตเชชเชฐเชพเชถ เช•เชฐเซ‡ เช›เซ‡ เชฒเช—เชญเช— 60% เชตเชงเซ CPU เชธเช‚เชธเชพเชงเชจเซ‹Linkerd เช•เชฐเชคเชพเช‚.

เชจเชฟเชทเซเช•เชฐเซเชท

Istio Envoy เชชเซเชฐเซ‹เช•เซเชธเซ€ เช…เชฎเชพเชฐเชพ เชธเชฟเชฎเซเชฏเซเชฒเซ‡เชŸเซ‡เชก เชตเชฐเซเช•เชฒเซ‹เชก เชชเชฐ Linkerd เช•เชฐเชคเชพเช‚ 50+% เชตเชงเซ CPU เชตเชพเชชเชฐเซ‡ เช›เซ‡. Linkerd เช•เช‚เชŸเซเชฐเซ‹เชฒ เชชเซ‡เชจเชฒ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเซเช–เซเชฏ เช˜เชŸเช•เซ‹ เชฎเชพเชŸเซ‡, Istio เช•เชฐเชคเชพเช‚ เช˜เชฃเชพ เช“เช›เชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

เช…เชฎเซ‡ เชนเชœเซ€ เชชเชฃ เช† เช–เชฐเซเชšเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเชตเซ‹ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชตเชฟเชšเชพเชฐเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เชถเซ‡เชฐ เช•เชฐเซ‹!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹