เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹. เปเบ›.: เบชเปˆเบงเบ™ เบ—เบณ เบญเบดเบ” เบŠเบธเบ”เบ™เบตเป‰เบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญเปเบ™เบฐเบ™เปเบฒเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ” Istio เปเบฅเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบฒเบซเบ™เปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰, เปเบฅเบฐเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ (manifests เบชเปเบฒเบฅเบฑเบš Kubernetes เปเบฅเบฐ Istio) เบˆเบฒเบ repository เบงเบดเบŠเบฒเบชเบฐเป€เบžเบฒเบฐ.

เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™

เบ”เป‰เบงเบ Istio, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเปเปˆเบ›เบฐเบเบปเบ”เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเป€เบžเบทเปˆเบญเบชเบฐเปœเบญเบ‡:

  • เบเบณเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบ: canary rollouts, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš A/B;
  • เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”: เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบญเบ”เบ„เปˆเบญเบ‡, เบญเบตเบ‡เปƒเบชเปˆ hashes;
  • เบเบฒเบ™โ€‹เบŸเบทเป‰เบ™โ€‹เบ•เบปเบงโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹: timeouts, retries, circuit breakers;
  • เปเบŠเบเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡: เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบธเบ”เบฅเบปเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบšเบปเบ”เบ„เบงเบฒเบกเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆ, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡เป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเป€เบฅเบทเบญเบเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบ™เปเบฒเป„เบ›เบ™เปเบฒ. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ—เปเบฒเบญเบดเบ”เบˆเบฐเป€เบ›เบฑเบ™ DestinationRules (เป€เบŠเบฑเปˆเบ™: เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™/เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป - เบ›เบฐเบกเบฒเบ™ transl.), เบ”เป‰เบงเบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš A/B.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš A/B: เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ›เบฒเบเบ—เบฒเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš A/B เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบชเบญเบ‡เบฎเบธเปˆเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ (เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเบžเบงเบเบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบฒเบ‡เบชเบฒเบเบ•เบฒ) เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบญเบฑเบ™เปƒเบ”เบˆเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบชเบฐเบšเบฑเบšเบžเป‰เบญเบกเป†เบเบฑเบ™เปเบฅเบฐเป€เบเบฑเบšเบเปเบฒ metrics.

เป€เบžเบทเปˆเบญเบ›เบฑเบšเปƒเบŠเป‰เป€เบงเบตเบŠเบฑเบ™เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡ frontend, เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš A/B, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ manifest เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบชเบตโ€‹เบ‚เบฝเบงโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบชเบญเบ‡โ€‹เบšเปˆเบญเบ™โ€‹:

  1. เบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเปเบ—เบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ - istio-green,
  2. เบเบฑเบเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ version: green.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบชเบญเบ‡เบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ app: sa-frontend,เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป‚เบ”เบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ virtual sa-external-services เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ sa-frontend, เบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบ—เบธเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบเบฒเบ™เป‚เบซเบผเบ”เบˆเบฐเบ–เบทเบเปเบˆเบเบขเบฒเบเบœเปˆเบฒเบ™ เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบฎเบญเบš-เป‚เบฃเบšเบดเบ™, เบŠเบถเปˆเบ‡เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2
เบšเปเปˆเบžเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป

เบšเปเปˆเบžเบปเบšเป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบ•เบฑเป‰เบ‡เบŠเบทเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เป€เบงเบตเบŠเบฑเบ™เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ™เบตเป‰:

$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ index.html, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเบฐเบšเบฑเบšเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ„เบปเบ‡เบ—เบตเปˆ, เบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเบปเปˆเบ‡เป‚เบ”เบ load balancer เบเบฑเบš pods เบ—เบตเปˆเบกเบตเบชเบฐเบšเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆ, เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบˆเบฐเปเบˆเป‰เบ‡, เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบกเบต. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”: "เป€เบงเบตเบŠเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ index.html เบ„เบงเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเป„เบ›".

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เบ—เบตเปˆเบ™เบฑเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ hash เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡ (Consistent Hash Loadbalancing)... เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰ เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡ backend เบ”เบฝเบงเบเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ - เบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบปเบง HTTP. เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ DestinationRules.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ›เบฒเบเบ—เบฒเบ‡

เบซเบฅเบฑเบ‡เบˆเบฒเบ เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Virtual เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เป‚เบ”เบเปƒเบŠเป‰ DestinationRules เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ™เบฐเป‚เบเบšเบฒเบเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰:

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2
เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Istio

ะŸั€ะธะผะตั‡ะฐะฝะธะต: เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Istio เปƒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปƒเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆ. เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™, เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ”เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบ Envoy เปƒเบ™ Ingress Gateway เบ—เบตเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ CRD.

เบ”เป‰เบงเบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ›เบฒเบเบ—เบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เป€เบžเบทเปˆเบญเปƒเบŠเป‰ hashes เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡ เปเบฅเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบšเปเบฅเบดเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ”เบฝเบงเบเบฑเบ™. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰ (destinationrule-sa-frontend.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-frontend
spec:
  host: sa-frontend
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: version   # 1

1 - hash เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ HTTP header version.

เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เป‰เบงเบเบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created

เบ•เบญเบ™เบ™เบตเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเบชเปˆเบงเบ™เบซเบปเบง version:

$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main

ะŸั€ะธะผะตั‡ะฐะฝะธะต: เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบชเปˆเบงเบ™เบซเบปเบงเปเบฅเบฐเบ—เบปเบ”เบชเบญเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบเบปเบ‡เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ™เบตเป‰ เบเบฑเบš Chrome (เบซเบผเบท เบเบฑเบšเบ™เบตเป‰ เบชเปเบฒเบฅเบฑเบš Firefox - เบ›เบฐเบกเบฒเบ™. เปเบ›.).

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, DestinationRules เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ” - เบเบงเบ”เป€เบšเบดเปˆเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™.

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบถเบเบชเบฒ VirtualService เบ•เบทเปˆเบกเบญเบตเบ, เปƒเบซเป‰เบฅเบถเบš "เป€เบงเบตเบŠเบฑเปˆเบ™เบชเบตเบ‚เบฝเบง" เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบชเบฑเบ™เบˆเบญเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions โ€œsa-frontend-greenโ€ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io โ€œsa-frontendโ€ deleted

Mirroring: เบšเปเบฅเบดเบเบฒเบ™ virtual เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบเบฒเบ™เบฎเบปเปˆเบก (โ€œเบเบฒเบ™โ€‹เบ›เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€) เบซเบผเบท mirroring ("เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™") เปƒเบŠเป‰เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ: เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบŠเป‰เปเบฒ ("เบเบฐเบˆเบปเบ") เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™. เป€เบงเบปเป‰เบฒเบ‡เปˆเบฒเบเป†, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบเป€เบญเบปเบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ‚เบตเป‰เบเบธเปˆเบ™เบเป‰เบญเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบšเปเปˆเบกเบตเปƒเบœเบชเบฒเบกเบฒเบ”เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เป„เบ”เป‰.

เป€เบžเบทเปˆเบญเบ—เบปเบ”เบชเบญเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปƒเบซเป‰เบชเป‰เบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡ SA-Logic เบเบฑเบšเปเบกเบ‡เป„เบกเป‰ (buggy) เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เปเบฅเปˆเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created

เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เบธเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบต app=sa-logic เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆเบ—เบตเปˆเบกเบตเบฅเบธเป‰เบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™:

$ kubectl get pods -l app=sa-logic --show-labels
NAME                              READY   LABELS
sa-logic-568498cb4d-2sjwj         2/2     app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c         2/2     app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66   2/2     app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz   2/2     app=sa-logic,version=v2

เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ sa-logic เป€เบ›เบปเป‰เบฒเปเบฒเบเบเบฑเบเบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ app=sa-logic, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเปเบˆเบเบขเบฒเบเปƒเบ™เบšเบฑเบ™เบ”เบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”:

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2

... เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ v1 instances เปเบฅเบฐ mirrored เบเบฑเบš v2 instances:

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™ VirtualService เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš DestinationRule, เบšเปˆเบญเบ™เบ—เบตเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฐเบเปเบฒเบ™เบปเบ”เบŠเบธเบ”เบเปˆเบญเบเปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡ VirtualService เป„เบ›เบซเบฒเบŠเบธเบ”เบเปˆเบญเบเบชเบฐเป€เบžเบฒเบฐ.

เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบเปˆเบญเบเปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ›เบฒเบเบ—เบฒเบ‡

เบŠเบธเบ”เบเปˆเบญเบ (เบŠเบธเบ”เบเปˆเบญเบ) เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰ (sa-logic-subsets-destinationrule.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-logic
spec:
  host: sa-logic    # 1
  subsets:
  - name: v1        # 2
    labels:
      version: v1   # 3
  - name: v2
    labels:
      version: v2

  1. เป€เบˆเบปเป‰เบฒเบžเบฒเบš (host) เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เปƒเบŠเป‰เบเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบชเบนเปˆเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ sa-logic;
  2. เบซเบปเบงเบ‚เปเป‰ (name) subsets เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ routing เบเบฑเบš subset instances;
  3. เบ›เป‰เบฒเบเบเบณเบเบฑเบš (label) เบเบณเบ™เบปเบ”เบ„เบนเปˆเบ„เบต-เบ„เปˆเบฒเบ—เบตเปˆ instances เบ•เป‰เบญเบ‡เบเบปเบ‡เบเบฑเบ™เป€เบžเบทเปˆเบญเบเบฒเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบŠเบธเบ”เบเปˆเบญเบ.

เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เป‰เบงเบเบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบŠเบธเบ”เบเปˆเบญเบเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบทเบšเบ•เปเปˆเปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒ VirtualService เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบทเปˆเบญ sa-logic เป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒ:

  1. เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบŠเบธเบ”เบเปˆเบญเบ v1,
  2. เบชเบฐเบ—เป‰เบญเบ™เบเบฑเบšเบŠเบธเบ”เบเปˆเบญเบ v2.

manifesto เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบšเบฑเบ™เบฅเบธเปเบœเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (sa-logic-subsets-shadowing-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic          
  http:
  - route:
    - destination:
        host: sa-logic  
        subset: v1      
    mirror:             
      host: sa-logic     
      subset: v2

เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เปƒเบซเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹:

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created

เปƒเบซเป‰เป€เบžเบตเปˆเบกเบเบฒเบ™เป‚เบซเบผเบ”เป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ while true; do curl -v http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ Grafana, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเปเบกเบ‡เป„เบกเป‰ (.buggy) เบฅเบปเป‰เบกเป€เบซเบฅเบงเบชเปเบฒเบฅเบฑเบš ~ 60% เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เปเบ•เปˆเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบงเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบกเบตเบœเบปเบ™เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบเบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป‚เบ”เบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ.

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2
เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ sa-logic เบฎเบธเปˆเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™

เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ”เป„เบ”เป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™ VirtualService เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบš Envoys เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เป€เบกเบทเปˆเบญ sa-web-app เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹ sa-logic, เบกเบฑเบ™เบœเปˆเบฒเบ™ sidecar Envoy, เป€เบŠเบดเปˆเบ‡ - เบœเปˆเบฒเบ™ VirtualService - เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบŠเบธเบ”เบเปˆเบญเบ v1 เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบŠเบธเบ”เบเปˆเบญเบ v2 เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. sa-logic.

เบ‚เป‰เบญเบเบฎเบนเป‰, เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ„เบดเบ”เปเบฅเป‰เบงเบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Virtual เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ. เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ‚เบฐเบซเบเบฒเบเบกเบฑเบ™เป‚เบ”เบเบเปˆเบฒเบงเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบเบดเปˆเบ‡เปƒเบซเบเปˆเปเบ—เป‰เป†.

Canary rollouts

Canary Deployment เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบงเบตเบŠเบฑเบ™เปƒเปเปˆเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบˆเบณเบ™เบงเบ™เปœเป‰เบญเบเปœเบถเปˆเบ‡. เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ”เป†เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบกเบฑเป‰เบ™เปƒเบˆเปƒเบ™เบ„เบธเบ™เบ™เบฐเบžเบฒเบš (เบเบฒเบ™เบ›เปˆเบญเบเบญเบญเบเบกเบฒ), เปเบˆเบเบขเบฒเบเบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบญเบทเปˆเบ™เป†.ะพเบœเบนเป‰เบŠเบปเบกเปƒเบซเบเปˆเบเบงเปˆเบฒ.

เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง canary, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบŠเบธเบ”เบเปˆเบญเบ buggy ัƒ sa-logic.

เบšเปเปˆเปƒเบซเป‰เป€เบชเบเป€เบงเบฅเบฒเปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป† เปเบฅเบฐเบชเบปเปˆเบ‡เบœเบนเป‰เปƒเบŠเป‰ 20% เป„เบ›เบซเบฒเป€เบงเบตเบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡ (เบญเบฑเบ™เบ™เบตเป‰เบˆเบฐเบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง canary เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ), เปเบฅเบฐ 80% เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบด. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบซเป‰เปƒเบŠเป‰ VirtualService เบ•เปเปˆเป„เบ›เบ™เบตเป‰ (sa-logic-subsets-canary-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic    
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 80         # 1
    - destination: 
        host: sa-logic
        subset: v2
      weight: 20 # 1

1 เปเบกเปˆเบ™โ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒ (weight), เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ™เปเบฒเป„เบ›เบซเบฒเบœเบนเป‰เบฎเบฑเบšเบซเบผเบทเบŠเบธเบ”เบเปˆเบญเบเบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš.

เปƒเบซเป‰เบญเบฑเบšเป€เบ”เบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ VirtualService เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบชเปเบฒเบฅเบฑเบš sa-logic เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

... เปเบฅเบฐโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เป€เบซเบฑเบ™โ€‹เปƒเบ™โ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เบงเปˆเบฒโ€‹เบšเบฒเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ™เปเบฒโ€‹เป„เบ›โ€‹เบชเบนเปˆโ€‹เบ„เบงเบฒเบกโ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹:

$ while true; do 
   curl -i http://$EXTERNAL_IP/sentiment 
   -H "Content-type: application/json" 
   -d '{"sentence": "I love yogobella"}' 
   --silent -w "Time: %{time_total}s t Status: %{http_code}n" 
   -o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500

VirtualServices เป€เบ›เบตเบ”เปƒเบŠเป‰ canary rollouts: เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบ”เปเบ„เบšเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบตเปˆเบญเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบเบฑเบš 20% เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบœเบนเป‰เปƒเบŠเป‰. เบญเบฑเบ”เบชเบฐเบˆเบฑเบ™! เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปƒเบ™เบ—เบธเบเป†เบเปเบฅเบฐเบ™เบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป† - เบชเบฐเป€เบซเบกเบต ...), เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ mirroring เปเบฅเบฐ canary rollouts.

เปเบปเบ”เป€เบงเบฅเบฒ เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเปƒเปเปˆ

เปเบ•เปˆเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบšเปเปˆเบชเบฐเป€เบซเบกเบตเป„เบ›เบชเบดเป‰เบ™เบชเบธเบ”เปƒเบ™เบฅเบฐเบซเบฑเบ”. เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบˆเบฒเบ "8 เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบœเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เปเบˆเบเบขเบฒเบ"เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ„เบงเบฒเบกเป€เบŠเบทเปˆเบญเบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”เบงเปˆเบฒ "เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰." เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เป€เบ„เบทเบญเบ‚เปˆเบฒเบ เบšเปเปˆ เป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰, เปเบฅเบฐเบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒเปเบปเบ”เป€เบงเบฅเบฒ (เปเบปเบ”เป€เบงเบฅเบฒ) เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบญเบตเบเบ„เบฑเป‰เบ‡ (เบžเบฐเบเบฒเบเบฒเบก).

เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบฒโ€‹เบ—เบดเบ”โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบชเบทเบšโ€‹เบ•เปเปˆโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹ sa-logic (buggy), เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบˆเปเบฒเบฅเบญเบ‡เบ„เบงเบฒเบกเบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเปเบšเบšเบชเบธเปˆเบก.

เปƒเบซเป‰เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเปเบกเบ‡เป„เบกเป‰เบกเบตเป‚เบญเบเบฒเบ” 1/3 เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡, 1/3 เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบเปƒเบ™, เปเบฅเบฐเป‚เบญเบเบฒเบ” 1/3 เบ‚เบญเบ‡เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบซเบ™เป‰เบฒเบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™.

เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบŠเบตเบงเบดเบ”เบ”เบตเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”:

  1. เป€เบžเบตเปˆเบกเบเบฒเบ™เปเบปเบ”เป€เบงเบฅเบฒเบ–เป‰เบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒ 8 เบงเบดเบ™เบฒเบ—เบตเป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเปœเบญเบ‡,
  2. เบฅเบญเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡เบ–เป‰เบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบฅเบปเป‰เบกเป€เบซเบฅเบง.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบ™เบดเบเบฒเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰ (sa-logic-retries-timeouts-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 50
    - destination: 
        host: sa-logic
        subset: v2
      weight: 50
    timeout: 8s           # 1
    retries:
      attempts: 3         # 2
      perTryTimeout: 3s # 3

  1. เป€เบงเบฅเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 8 เบงเบดเบ™เบฒเบ—เบต;
  2. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™ retried 3 เป€เบ—เบทเปˆเบญ;
  3. เปเบฅเบฐเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”เบ–เป‰เบฒเป€เบงเบฅเบฒเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป€เบเบตเบ™ 3 เบงเบดเบ™เบฒเบ—เบต.

เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบฒเบฐเบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบซเบผเบฒเบเบเบงเปˆเบฒ 8 เบงเบดเบ™เบฒเบ—เบตเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเปƒเบซเบกเปˆเบชเบฒเบกเบ„เบฑเป‰เบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบง, เป€เบžเบตเปˆเบกเป‚เบญเบเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบญเบฑเบšเป€เบ”เบ”เปเบฅเป‰เบงเบ”เป‰เบงเบเบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เปƒเบ™เบเบฒเบŸ Grafana เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡:

เบเบฑเบšเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบˆเบธเบฅเบฐเบžเบฒเบเบเบฑเบš Istio. เบžเบฒเบเบ—เบต 2
เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบชเบฐเบ–เบดเบ•เบดเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบžเบตเปˆเบกเบเบฒเบ™เบซเบกเบปเบ”เป€เบงเบฅเบฒเปเบฅเบฐเบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเปƒเบซเบกเปˆ

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบžเบฒเบเบ•เปเปˆเป„เบ› (เบซเบผเบทเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เปƒเบ™เบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบ™เบตเป‰เบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบ - เบ›เบฐเบกเบฒเบ™. transl.), เบฅเบถเบš sa-logic-buggy เปเบฅเบฐ VirtualService เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ kubectl delete deployment sa-logic-buggy
deployment.extensions โ€œsa-logic-buggyโ€ deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io โ€œsa-logicโ€ deleted

เบŠเบธเบ”เบ•เบปเบงเบ•เบฑเบ”เบงเบปเบ‡เบˆเบญเบ™ เปเบฅเบฐ เบฎเบนเบšเปเบšเบš Bulkhead

เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบญเบ‡เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบˆเบธเบฅเบฐเบžเบฒเบเบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเบเบฒเบ™เบŸเบทเป‰เบ™เบ•เบปเบงเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบเบฒเบ™โ€‹เบ›เบดเปˆเบ™โ€‹เบ›เบปเบงโ€‹เบ”เป‰เบงเบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹) เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.

Circuit Breaker ("เป€เบ„เบทเปˆเบญเบ‡เบ•เบฑเบ”เบงเบปเบ‡เบˆเบญเบ™") เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบขเบธเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ–เบทเบงเปˆเบฒเบšเปเปˆเบ”เบตเปเบฅเบฐเบŸเบทเป‰เบ™เบŸเบนเบกเบฑเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบชเบธเบ‚เบฐเบžเบฒเบšเบ”เบตเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบฑเป‰เบ™ (เป€เบŠเบดเปˆเบ‡เป€เบžเบตเปˆเบกเบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”). (เบซเบกเบฒเบเป€เบซเบ”: เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เบตเปˆเบ™เบตเป‰.)

Bulkhead ("เบžเบฒโ€‹เบ—เบดโ€‹เบŠเบฑเบ™โ€‹"โ€‹) isolates เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบˆเบฒเบเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ B เบ–เบทเบเบ—เปเบฒเบฅเบฒเบเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบญเบทเปˆเบ™ (เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบšเปเบฅเบดเบเบฒเบ™ B) เป€เบฎเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบเบฑเบšเบšเปเบฅเบดเบเบฒเบ™ B, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบซเบกเบปเบ”เป„เบ›เปƒเบ™เบเบธเปˆเบกเบเบฐเบ—เบนเป‰เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบญเบทเปˆเบ™เป„เบ”เป‰ (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบกเบฒเบˆเบฒเบเบšเปเบฅเบดเบเบฒเบ™ B). (เบซเบกเบฒเบเป€เบซเบ”: เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เบตเปˆเบ™เบตเป‰.)

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เป€เบžเบฒเบฐโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เปƒเบ™โ€‹ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™, เปเบฅเบฐเบ‚เป‰เบญเบเบเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปเบฅเบฐเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปƒเบ™เบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก.

PS เบˆเบฒเบเบ™เบฑเบเปเบ›

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™