์ฐํด๊ฐ ๋๋๊ณ Istio Service Mesh ์๋ฆฌ์ฆ์ ๋ ๋ฒ์งธ ๊ฒ์๋ฌผ๋ก ๋์์์ต๋๋ค.
์ค๋์ ์ฃผ์ ๋ ํ๋ก ์ฐจ๋จ๊ธฐ(Circuit Breaker)์
๋๋ค. ์ด๋ ๋ฌ์์ ์ ๊ธฐ ๊ณตํ์์ "ํ๋ก ์ฐจ๋จ๊ธฐ"๋ฅผ ์๋ฏธํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก "ํ๋ก ์ฐจ๋จ๊ธฐ"๋ฅผ ์๋ฏธํฉ๋๋ค. Istio์์๋ง ์ด ๋จธ์ ์ ๋จ๋ฝ๋๊ฑฐ๋ ๊ณผ๋ถํ๋ ํ๋ก๊ฐ ์๋๋ผ ๊ฒฐํจ์ด ์๋ ์ปจํ
์ด๋์ ์ฐ๊ฒฐ์ ๋์ต๋๋ค.
์ด๊ฒ์ด ์ด์์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์
์๋ฅผ ๋ค์ด OpenShift ํ๋ซํผ ๋ด์์ Kubernetes๋ก ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ด๋ฆฌํ๋ฉด ๋ก๋์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์ฅ ๋ฐ ์ถ์๋ฉ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค๋ ํฌ๋์์ ์คํ๋๋ฏ๋ก ํ๋์ ์๋ํฌ์ธํธ์ ์ปจํ ์ด๋ํ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ์์ ์ ์์ผ๋ฉฐ Kubernetes๋ ์์ฒญ์ ๋ผ์ฐํ ํ๊ณ ์ธ์คํด์ค ๊ฐ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์์ ์ผ๋ก๋ ์ด ๋ชจ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์๊ณ ์ผ์์ ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ํ๋๊ณ ์ฌ๋ผ์ง๋ ์ฉ์ดํจ์ ๋ปํ๋ ๋ง์์์ ์ข ์ข ๊ณผ์ํ๊ฐ๋๊ธฐ๋ ํ๋ค. Pod์์ ๋ ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค ์ธ์คํด์ค์ ํ์๊ณผ ์๋ฉธ์ ์๋นํ ์์๋๋ ์ผ์ ๋๋ค. OpenShift์ Kubernetes๋ ์ด๋ฅผ ์ ์ฒ๋ฆฌํ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ํ๋ฅญํ๊ฒ ์๋ํ์ง๋ง ์ด๋ก ์์ผ๋ก๋ ๋ค์ ๊ทธ๋ ์ต๋๋ค.
์ค์ ์๋ ๋ฐฉ์
์ด์ ๋ง์ดํฌ๋ก์๋น์ค์ ํน์ ์ธ์คํด์ค, ์ฆ ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ์๋ตํ์ง ์๊ฑฐ๋(์ค๋ฅ 503), ๋ ๋ถ์พํ ๊ฒ์ ์๋ตํ์ง๋ง ๋๋ฌด ๋๋ฆฝ๋๋ค. ์ฆ, ๊ฒฐํจ์ด ๋ฐ์ํ๊ฑฐ๋ ์์ฒญ์ ์๋ตํ์ง ์์ง๋ง ํ์์ ์๋์ผ๋ก ์ ๊ฑฐ๋์ง๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๋ค์ ์๋ํ์๊ฒ ์ต๋๊น? ๋ผ์ฐํ ๊ตฌ์ฑํ์์ ์ด๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ "๋๋ฌด ๋๋ฆฌ๋ค"๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ๊ทธ ์ซ์๋ ๋ช ๊ฐ์ด๋ฉฐ, ๋๊ฐ ๊ฒฐ์ ํฉ๋๊น? ์ ์ ์ฌ์๋ค๊ฐ ๋์ค์ ๋ค์ ์๋ํด ๋ณด์ธ์. ๊ทธ๋ ๋ค๋ฉด ์ผ๋ง๋ ๋์ค์์?
Istio์ ํ ๋ฐฐ์ถ์ด๋ ๋ฌด์์ ๋๊น?
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ Istio๋ ๋ผ์ฐํ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฆฌ์์ค ํ์์ ๊ฒฐํจ์ด ์๋ ์ปจํ ์ด๋๋ฅผ ์ผ์์ ์ผ๋ก ์ ๊ฑฐํ๊ณ ํ ์ ๊ฑฐ ์ ์ฐจ๋ฅผ ๊ตฌํํ๋ ํ๋ก ์ฐจ๋จ๊ธฐ ๋ณดํธ ์์คํ ์ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ ๋์ฐ์ต๋๋ค.
Istio๋ ์ด์๊ฐ ๊ฐ์ง ์ ๋ต์ ์ฌ์ฉํ์ฌ ๋ผ์ธ์ ๋ฒ์ด๋ Pod ๊ณก์ ์ ๊ฐ์งํ๊ณ ์ ์ ์ฐฝ์ด๋ผ๊ณ ํ๋ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ ์๊ฐ ๋์ ๋ฆฌ์์ค ํ์์ ์ด๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
OpenShift ํ๋ซํผ์ Kubernetes์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ ์ฅ์์ ์์์ ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์คํฌ๋ฆฐ์ท๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์คํจ์ ๋๋นํ๊ธฐ
ํ ์ ๊ฑฐ๋ฅผ ์ํํ๊ธฐ ์ ์ Istio ๋ผ์ฐํ ๊ท์น์ ์์ฑํด์ผ ํฉ๋๋ค. Pod ๊ฐ์ ์์ฒญ์ 50/50 ๋น์จ๋ก ๋ฐฐํฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ํ ๋ค์๊ณผ ๊ฐ์ด v2 ์ปจํ ์ด๋์ ์๋ฅผ XNUMX์์ XNUMX๋ก ๋๋ฆด ๊ฒ์ ๋๋ค.
oc scale deployment recommendation-v2 --replicas=2 -n tutorial
์ด์ ํธ๋ํฝ์ด 50/50 ๋น์จ๋ก ํฌ๋ ๊ฐ์ ๋ถ์ฐ๋๋๋ก ๋ผ์ฐํ ๊ท์น์ ์ค์ ํ์ต๋๋ค.
์ด ๊ท์น์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ํ๋ฉด์ด 50/50์ด ์๋๋ผ 14:9๋ผ๋ ์ ์์ ๋ฌธ์ ์ ์ ์ฐพ์ ์ ์์ง๋ง ์๊ฐ์ด ์ง๋๋ฉด ์ํฉ์ด ๊ฐ์ ๋ ๊ฒ์
๋๋ค.
๊ฒฐํจ ๋ง๋ค๊ธฐ
์ด์ ๋ ๊ฐ์ v2 ์ปจํ ์ด๋ ์ค ํ๋๋ฅผ ๋นํ์ฑํํ์ฌ ํ๋์ ์ ์ v1 ์ปจํ ์ด๋, ํ๋์ ์ ์ v2 ์ปจํ ์ด๋ ๋ฐ ํ๋์ ๊ฒฐํจ์ด ์๋ v2 ์ปจํ ์ด๋๋ฅผ ๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฒฐํจ ์์
๋ฐ๋ผ์ ๊ฒฐํจ์ด ์๋ ์ปจํ ์ด๋๊ฐ ์์ผ๋ฏ๋ก ์ด์ Pool Ejection์ ์ํํ ์๊ฐ์ ๋๋ค. ๋งค์ฐ ๊ฐ๋จํ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ด ์คํจํ ์ปจํ ์ด๋๋ฅผ 15์ด ๋์ ๋ชจ๋ ๋ผ์ฐํ ์ฒด๊ณ์์ ์ ์ธํ์ฌ ์ ์ ์ํ(๋ค์ ์์ ๋๋ ์ฑ๋ฅ ๋ณต์)๋ก ๋์๊ฐ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด ๊ตฌ์ฑ์ ๋ชจ์ต๊ณผ ์์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ณด์๋ค์ํผ, ์คํจํ v2 ์ปจํ
์ด๋๋ ํ์์ ์ ๊ฑฐ๋์๊ธฐ ๋๋ฌธ์ ์์ฒญ ๋ผ์ฐํ
์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ํ์ง๋ง 15์ด๊ฐ ์ง๋๋ฉด ์๋์ผ๋ก ํ๋ก ๋์๊ฐ๋๋ค. ์ค์ ๋ก ์ฐ๋ฆฌ๋ Pool Ejection์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ฃผ์์ต๋๋ค.
๊ฑด์ถ์ ์์ํ์
Istio์ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉ๋ Pool Ejection์ ์ฌ์ฉํ๋ฉด ๊ฒฐํจ์ด ์๋ ์ปจํ
์ด๋๋ฅผ ์๋์ผ๋ก ๊ต์ฒดํ๊ธฐ ์ํ ํ๋ ์์ํฌ ๊ตฌ์ถ์ ์์ํ์ฌ ๊ฐ๋ ์ค์ง ์๊ฐ๊ณผ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ์ง๋ ๋ชปํ๋๋ผ๋ ์ค์ผ ์ ์์ต๋๋ค.
โ
NASA์๋ ํ๋์ ํฐ ๋ชจํ ๊ฐ ์์ต๋๋ค. ์คํจ๋ ์ต์
์ด ์๋๋ฉฐ ์ ์๋ ๋นํ ๋๋ ํฐ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์์ ์ด ๊ฒ์ฒ๋ผ Istio๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์์ ์ ์ ์ฆ๋ ํ๋ก ์ฐจ๋จ๊ธฐ ๊ฐ๋ ์ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ธฐ ํ๋ก ์ฐจ๋จ๊ธฐ๊ฐ ํ๋ก์ ๋ฌธ์ ๋ถ๋ถ์ ๋๋ ๊ฒ์ฒ๋ผ Istio์ ์ํํธ์จ์ด Circuit Breaker๋ ์๋ํฌ์ธํธ์ ๋ฌธ์ ๊ฐ ์์ ๋(์: ์๋ฒ๊ฐ ์ถฉ๋ํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์์ํ์ ๋) ์์ฒญ ์คํธ๋ฆผ๊ณผ ๋ฌธ์ ์ปจํ ์ด๋ ์ฌ์ด์ ์ฐ๊ฒฐ์ ์ฝ๋๋ค. ์ฒ์ฒํ ํด.
๋์ฑ์ด ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ ์ปจํ ์ด๋์ ๋ธ๋ ์ดํฌ๋ก ์ธํด ํด๋น ์ปจํ ์ด๋์ ์ก์ธ์คํ๋ ์๋น์ค๊ฐ ์ฐ์์ ์ผ๋ก ์ง์ฐ๋ ๋ฟ๋ง ์๋๋ผ ๊ฒฐ๊ณผ์ ์ผ๋ก ์์คํ ์ ์ฒด์ ์ฑ๋ฅ์ด ์ ํ๋ ๋ฟ๋ง ์๋๋ผ ๋ฐ๋ณต์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฏธ ๋๋ฆฌ๊ฒ ์คํ๋๋ ์๋น์ค์ ๋ํ ์์ฒญ์ ์ํฉ์ ๋์ฑ ์ ํ์ํฌ ๋ฟ์ ๋๋ค.
์ด๋ก ์์ ํ๋ก ์ฐจ๋จ๊ธฐ
ํ๋ก ์ฐจ๋จ๊ธฐ๋ ์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ ํ๋ฆ์ ์ ์ดํ๋ โโํ๋ก์์ ๋๋ค. ์ด ์ง์ ์ด ์๋์ ๋ฉ์ถ๊ฑฐ๋ ์ง์ ๋ ์ค์ ์ ๋ฐ๋ผ ์๋๊ฐ ๋๋ ค์ง๊ธฐ ์์ํ๋ฉด ํ๋ก์๋ ์ปจํ ์ด๋์์ ์ฐ๊ฒฐ์ ๋์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ผ๋ก ์ธํด ํธ๋ํฝ์ด ๋ค๋ฅธ ์ปจํ ์ด๋๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ์ฐ๊ฒฐ์ ์ง์ ๋ ์ ์ ์ฐฝ(์: XNUMX๋ถ) ๋์ ์ด๋ ค ์์ผ๋ฉฐ ๊ทธ ์ดํ์๋ ์ ๋ฐ๋ง ์ด๋ฆฐ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ค์ ์์ฒญ์ ๋ณด๋ด๋ ค๋ ์๋์ ๋ฐ๋ผ ์ฐ๊ฒฐ์ ์ถ๊ฐ ์ํ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. ์๋น์ค์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์ฐ๊ฒฐ์ด ์๋ ์ํ๋ก ๋์๊ฐ๊ณ ๋ค์ ๋ซํ๋๋ค. ์ฌ์ ํ ์๋น์ค์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ณ ์ ์ ์ฐฝ์ด ๋ค์ ํ์ฑํ๋ฉ๋๋ค. ๋จ์ํ๋ ํ๋ก ์ฐจ๋จ๊ธฐ ์ํ ๋ค์ด์ด๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ์ด ๋ชจ๋ ๊ฒ์ด ๋งํ์๋ฉด ์์คํ
์ํคํ
์ฒ ์์ค์์ ๋ฐ์ํ๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ ์์ ์์๋ ์๋ต์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๊ฑฐ๋ ๊ฐ๋ฅํ๋ฉด ์๋น์ค ์กด์ฌ๋ฅผ ๋ฌด์ํ๋ ๋ฑ ํ๋ก ์ฐจ๋จ๊ธฐ์ ํจ๊ป ์๋ํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฅด์ณ์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๊ฒฉ๋ฒฝ ํจํด์ด ์ฌ์ฉ๋์ง๋ง ์ด๋ ์ด ๊ธฐ์ฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
์ค์ ํ๋ก ์ฐจ๋จ๊ธฐ
์๋ฅผ ๋ค์ด OpenShift์์ ๋ ๊ฐ์ง ๋ฒ์ ์ ์ถ์ฒ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์คํํ๊ฒ ์ต๋๋ค. ๋ฒ์ 1์ ์ ์๋ํ์ง๋ง v2์์๋ ์๋ฒ ์๋ ์ ํ๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๊ธฐ ์ํด ์ง์ฐ ์๊ฐ์ ๊ตฌ์ถํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io
๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๋น์ฉ์ ์ผ๋ง์
๋๊น? ์ธ๋ป ๋ณด๋ฉด ๊ฐ์ฉ์ฑ์ด 100%์ด์ง๋ง ์์ธํ ์ดํด๋ณด๋ฉด ์ต๋ ํธ๋์ญ์
๊ธฐ๊ฐ์ 12์ด์
๋๋ค. ์ด๋ ๋ถ๋ช
ํ ๋ณ๋ชฉ ํ์์ด๋ฏ๋ก ํ์ฅ์ด ํ์ํฉ๋๋ค.
์ด๋ฅผ ์ํด Istio๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฆฐ ์ปจํ ์ด๋์ ๋ํ ํธ์ถ์ ์ ๊ฑฐํฉ๋๋ค. ๋ค์์ ํ๋ก ์ฐจ๋จ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ํด๋น ๊ตฌ์ฑ์ ๋ชจ์ต์ ๋๋ค.
httpMaxRequestsPerConnection ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ ๋ง์ง๋ง ์ค์ ๊ธฐ์กด ์ฐ๊ฒฐ ์ธ์ ๋ค๋ฅธ ์ฐ๊ฒฐ(๋ ๋ฒ์งธ ์ฐ๊ฒฐ)์ ๋ง๋ค๋ ค๊ณ ํ ๋ ์ฐ๊ฒฐ์ ๋์ด์ผ ํจ์ ๋ํ๋
๋๋ค. ์ปจํ
์ด๋๋ ๋๋ฆฐ ์๋น์ค๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๋ฏ๋ก ์ด๋ฌํ ์ํฉ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๋ฉฐ Istio๋ 503 ์ค๋ฅ๋ฅผ ๋ฐํํ์ง๋ง ์ด๋ siege์์ ํ์๋๋ ๋ด์ฉ์
๋๋ค.
์ข์์, ํ๋ก ์ฐจ๋จ๊ธฐ๊ฐ ์์ต๋๋ค. ๋ค์์ ๋ฌด์์ธ๊ฐ์?
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๋น์ค ์์ฒด์ ์์ค ์ฝ๋๋ฅผ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์๋ ์ข ๋ฃ๋ฅผ ๊ตฌํํ์ต๋๋ค. ์์์ ์ค๋ช ํ ํ๋ก ์ฐจ๋จ๊ธฐ ๋ฐ ํ ์ ๊ฑฐ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ ์ดํฌ ์ปจํ ์ด๋๊ฐ ์ ์์ผ๋ก ๋์์ฌ ๋๊น์ง ๋ฆฌ์์ค ํ์์ ๋ธ๋ ์ดํฌ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ง์ ๋ ๋น๋๋ก ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด ์์์๋ XNUMX๋ถ์ ๋๋ค(sleepWindow ๋งค๊ฐ ๋ณ์).
503 ์ค๋ฅ์ ์๋ตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ์์ค ์ฝ๋ ์์ค์์ ์ค์ ๋ฉ๋๋ค. ์ํฉ์ ๋ฐ๋ผ ํ๋ก ์ฐจ๋จ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ ๋ต์ ๋ค์ํฉ๋๋ค.
๋ค์ ๊ฒ์๋ฌผ์์: Istio์ ์ด๋ฏธ ๋ด์ฅ๋์ด ์๊ฑฐ๋ ์ฝ๊ฒ ์ถ๊ฐ๋๋ ์ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง๊ณผ ์๋์ ์ผ๋ก ์์คํ
์ ์ค๋ฅ๋ฅผ ๋์
ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com