แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ. แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 1. แƒกแƒแƒ’แƒแƒ–แƒแƒคแƒฎแƒฃแƒšแƒ แƒฉแƒ”แƒฅแƒ›แƒ แƒ“แƒ แƒ“แƒแƒ™แƒ”แƒ แƒ˜

แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ. แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 1. แƒกแƒแƒ’แƒแƒ–แƒแƒคแƒฎแƒฃแƒšแƒ แƒฉแƒ”แƒฅแƒ›แƒ แƒ“แƒ แƒ“แƒแƒ™แƒ”แƒ แƒ˜

แƒฐแƒ”แƒ˜ แƒฐแƒแƒ‘แƒ .

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ แƒฉแƒ”แƒ›แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒแƒ–แƒ” แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒงแƒแƒ•แƒ”แƒš แƒแƒฎแƒแƒš แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒก แƒ•แƒกแƒฌแƒแƒ•แƒšแƒแƒ‘แƒ“แƒ˜, แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒแƒžแƒแƒ แƒแƒขแƒ–แƒ”, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒฃแƒคแƒ แƒ แƒ แƒ”แƒแƒšแƒ˜แƒกแƒขแƒฃแƒ  แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜แƒช. แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒจแƒ”แƒ›แƒ”แƒฅแƒ›แƒœแƒ แƒ’แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ โ€žแƒ“แƒแƒคแƒแƒ แƒแƒกโ€œ แƒงแƒ•แƒ”แƒšแƒแƒœแƒแƒ˜แƒ แƒ˜ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒ—. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒแƒฎแƒšแƒแƒ•แƒ” แƒ แƒ”แƒแƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒกแƒ—แƒแƒœ.

แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒ›แƒ” แƒ“แƒแƒ•แƒงแƒแƒ•แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ”แƒขแƒแƒžแƒแƒ“:

  1. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ - 'backend' (backend) แƒ“แƒ 'gateway' (gateway), แƒฉแƒแƒแƒšแƒแƒ’แƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ”แƒ แƒ—แƒแƒ“ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒœ

    แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜: Java 11, Spring Boot, Docker, แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ

  2. Kubernetes-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ Google Kubernetes Engine-แƒจแƒ˜

    แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜: Kubernetes, GKE, แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ, แƒแƒ•แƒขแƒแƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ, แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒแƒ”แƒ‘แƒ”แƒ‘แƒ˜

  3. แƒฉแƒแƒ แƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ Helm 3-แƒ˜แƒ— แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜ แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

    แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜: Helm 3, แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ

  4. แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒ˜แƒก แƒ“แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒจแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

    แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜: แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ“แƒแƒœแƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜

แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒœแƒแƒ‘แƒ˜แƒฏแƒก แƒชแƒแƒšแƒ™แƒ” แƒกแƒขแƒแƒขแƒ˜แƒ แƒ›แƒ˜แƒ•แƒฃแƒซแƒฆแƒ•แƒœแƒ.

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ˜แƒก แƒคแƒแƒ™แƒฃแƒกแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ แƒ แƒ˜แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ”แƒ แƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ˜, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ›แƒแƒ, แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘, แƒ›แƒแƒ˜แƒœแƒช แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒชแƒœแƒแƒ‘แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 20%-แƒ˜แƒ— (แƒ แƒแƒช, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ’แƒ”แƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒแƒ—, แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก 80%-แƒก). แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒ‘แƒแƒ“ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ—แƒ”แƒ›แƒ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ, แƒ“แƒแƒ แƒฉแƒ”แƒ‘แƒ แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒ•แƒขแƒแƒ แƒก แƒชแƒแƒขแƒ แƒ แƒแƒ› แƒ”แƒกแƒ›แƒ˜แƒก แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ› แƒ”แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒ˜แƒ•แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ›แƒแƒกแƒแƒ–แƒ แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒฃแƒš แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒแƒก.

แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ Java 11-แƒจแƒ˜ Spring Boot-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ—แƒแƒจแƒแƒ แƒ˜แƒกแƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ REST-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก (แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒ แƒแƒฆแƒแƒช แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒšแƒ˜). แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ GitHub-แƒ–แƒ”: backend ะธ แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ”.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“, แƒ›แƒแƒ— แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ Spring Actuator. แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก /actuator/health endpoint-แƒก แƒ“แƒ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก 200 แƒกแƒขแƒแƒขแƒฃแƒกแƒก, แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ›แƒ–แƒแƒ“ แƒแƒ แƒ˜แƒก แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“, แƒแƒœ 504-แƒก, แƒ—แƒฃ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒคแƒ˜แƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ แƒ“แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒคแƒแƒ แƒกแƒ›แƒแƒŸแƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฃแƒคแƒ แƒ แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ˜แƒแƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ”แƒแƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒจแƒ˜ Actuator-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒ”แƒฎแƒ›แƒแƒ แƒแƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜, แƒกแƒแƒœแƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ”แƒœ แƒ›แƒแƒกแƒ–แƒ” แƒ‘แƒ แƒซแƒแƒšแƒแƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ—แƒฃ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ•แƒฃแƒžแƒแƒกแƒฃแƒฎแƒแƒ— แƒแƒ›แƒแƒก แƒ“แƒ แƒจแƒ”แƒ•แƒแƒฉแƒ”แƒ แƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ’แƒแƒขแƒ”แƒฎแƒ˜แƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ–แƒ”.

Back end แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜

backend แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ—แƒ•แƒšแƒ˜แƒก แƒ“แƒ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก.

แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

@RestController
public class RequestsCounterController {

    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/requests")
    public Long getRequestsCount() {
        return counter.incrementAndGet();
    }
}

แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜:

@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void firstRequest_one() throws Exception {
        mockMvc.perform(get("/requests"))
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.content().string("1"));
    }
}

แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ”

แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ” แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก backend แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒจแƒ˜, แƒแƒ•แƒกแƒ”แƒ‘แƒก แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒ—:

  • แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก ID. แƒ”แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒ
  • แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ "แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ", แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ แƒแƒšแƒก (แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒฅแƒฃแƒฅแƒ˜-แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜)

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ application.properties-แƒจแƒ˜:

backend.url=http://localhost:8081
instance.id=${random.int}
secret="default-secret"

Backend แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜:

@Service
public class BackendAdapter {

    private static final String REQUESTS_ENDPOINT = "/requests";

    private final RestTemplate restTemplate;

    @Value("${backend.url}")
    private String backendUrl;

    public BackendAdapter(RestTemplateBuilder builder) {
        restTemplate = builder.build();
    }

    public String getRequests() {
        ResponseEntity<String> response = restTemplate.getForEntity(
backendUrl + REQUESTS_ENDPOINT, String.class);
        return response.getBody();
    }
}

แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜:

@RestController
@RequiredArgsConstructor
public class EndpointController {

    private final BackendAdapter backendAdapter;

    @Value("${instance.id}")
    private int instanceId;

    @Value("${secret}")
    private String secret;

    @GetMapping("/")
    public String getRequestsCount() {
        return String.format("Number of requests %s (gateway %d, secret %s)", backendAdapter.getRequests(), instanceId, secret);
    }
}

แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ:

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— backend-แƒก:

./mvnw package -DskipTests
java -Dserver.port=8081 -jar target/microservices-backend-1.0.0.jar

แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ:

./mvnw package -DskipTests
java -jar target/microservices-gateway-1.0.0.jar

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—:

$ curl http://localhost:8080/
Number of requests 1 (gateway 38560358, secret "default-secret")

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒ•แƒ˜แƒจแƒšแƒ˜แƒก แƒฎแƒ”แƒšแƒก, แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒจแƒ”แƒ•แƒ˜แƒ“แƒ”แƒ— แƒ‘แƒ”แƒฅแƒ”แƒœแƒ“แƒ–แƒ”, แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ•แƒšแƒ˜แƒ— (http://localhost:8081/requests). แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ—, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ“แƒ”แƒก แƒ”แƒ แƒ— แƒฅแƒกแƒ”แƒšแƒจแƒ˜ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ” แƒฃแƒœแƒ“แƒ "แƒ’แƒแƒ›แƒแƒ แƒฉแƒ”แƒก" แƒ’แƒแƒ แƒ”แƒ—.
แƒแƒกแƒ”แƒ•แƒ”, แƒแƒ แƒ˜แƒ•แƒ” แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒคแƒแƒ˜แƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก, แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒก แƒ“แƒ แƒ”แƒ แƒ— แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒจแƒ˜ แƒฉแƒแƒ แƒ”แƒ•แƒ. แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ–แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒแƒžแƒแƒ แƒแƒขแƒ”แƒ‘แƒ–แƒ” แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— (แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒคแƒฃแƒšแƒ˜, แƒ แƒ—แƒฃแƒšแƒ˜), แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ–แƒ” แƒ˜แƒœแƒขแƒ”แƒœแƒกแƒ˜แƒฃแƒ แƒ˜, แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ) แƒแƒœ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒ˜แƒงแƒ, แƒ•แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒก แƒ“แƒ docker แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ.

docker

แƒ›แƒแƒ™แƒšแƒ”แƒ“, แƒ“แƒแƒ™แƒ”แƒ แƒ˜ แƒฅแƒ›แƒœแƒ˜แƒก แƒ˜แƒ–แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒก, แƒ—แƒ˜แƒ—แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒ–แƒ”. แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— Dockerfile - แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒกแƒฃแƒ แƒแƒ—แƒ˜, แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ”แƒกแƒขแƒ แƒจแƒ˜ (No. แƒ“แƒแƒ™แƒ”แƒ แƒฐแƒแƒ‘แƒ˜) แƒ“แƒ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  dockerized แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—.

dockerfile

แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒ–แƒแƒ›แƒแƒ. แƒ™แƒแƒ›แƒžแƒแƒฅแƒขแƒฃแƒ แƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒฉแƒแƒ›แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜แƒ“แƒแƒœ, แƒ“แƒแƒ˜แƒ™แƒแƒ•แƒ”แƒ‘แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘ แƒแƒ“แƒ’แƒ˜แƒšแƒก แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ. แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒ“แƒ แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒ˜แƒกแƒขแƒฃแƒ แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ. แƒ™แƒแƒ แƒ’แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒ Alpine, แƒกแƒ แƒฃแƒšแƒ˜ Linux แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒ—.

แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— Dockerfile "แƒจแƒฃแƒ‘แƒšแƒ–แƒ”" (แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ•แƒ˜แƒขแƒงแƒ•แƒ˜, แƒ แƒแƒ› แƒ”แƒก แƒชแƒฃแƒ“แƒ˜ แƒ’แƒ–แƒแƒ, แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก):

FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]

แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒแƒšแƒžแƒฃแƒ  แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒก JDK-แƒ˜แƒ— แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“. ADD แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒกแƒฃแƒ แƒแƒ—แƒก แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” src แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒก, แƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“ (WORKDIR) แƒ“แƒ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— build-แƒก. EXPOSE 8080 แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ“แƒแƒ™แƒ”แƒ แƒก, แƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒžแƒแƒ แƒขแƒก 8080 (แƒ”แƒก แƒแƒ  แƒ’แƒแƒฎแƒ“แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ˜แƒ›แƒแƒ•แƒ” แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ“แƒแƒœ. ).

แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒแƒ“ แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ“แƒแƒœ:

docker image build . -t msvc-backend:1.0.0

แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก 456 MB แƒกแƒฃแƒ แƒแƒ—แƒ˜ (แƒแƒฅแƒ”แƒ“แƒแƒœ แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ JDK แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ 340 MB). แƒ“แƒ แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒ›แƒ˜แƒกแƒ“แƒ แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒ–แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒ—แƒ•แƒแƒšแƒแƒก. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ–แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“:

  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒ แƒแƒ•แƒแƒšแƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ˜แƒแƒœ แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒแƒก. แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ”แƒขแƒแƒžแƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒก, แƒ›แƒ”แƒแƒ แƒ” แƒ”แƒขแƒแƒžแƒ–แƒ” แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ— JRE-แƒก, แƒฎแƒแƒšแƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ”แƒขแƒแƒžแƒ–แƒ” แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ“แƒแƒ•แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ— แƒแƒฎแƒแƒš แƒกแƒฃแƒคแƒ—แƒ แƒแƒšแƒžแƒฃแƒ  แƒกแƒฃแƒ แƒแƒ—แƒจแƒ˜. แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ‘แƒแƒจแƒ˜, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒแƒจแƒ˜.
  • แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒฏแƒแƒ•แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ. Java 9-แƒ“แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— jlink แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ JRE-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ

แƒชแƒœแƒแƒ‘แƒ˜แƒกแƒ›แƒแƒงแƒ•แƒแƒ แƒ”แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. https://habr.com/ru/company/ruvds/blog/485650/.

แƒกแƒแƒ‘แƒแƒšแƒแƒ Dockerfile:

FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine as builder
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests

FROM alpine:3.10.3 as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink 
    --verbose 
    --add-modules 
        java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument 
    --compress 2 --strip-debug --no-header-files --no-man-pages 
    --release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE" 
    --output "$JAVA_MINIMAL"

FROM alpine:3.10.3
LABEL maintainer="Anton Shelenkov [email protected]"
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY --from=builder /src/target/microservices-backend-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

แƒฉแƒ•แƒ”แƒœ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒกแƒฃแƒ แƒแƒ—แƒก แƒ“แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ›แƒแƒœ แƒฌแƒแƒœแƒแƒจแƒ˜ 6-แƒฏแƒ”แƒ  แƒ“แƒแƒ™แƒแƒ แƒ’แƒ, แƒ แƒแƒช 77 แƒ›แƒ‘-แƒก แƒจแƒ”แƒแƒ“แƒ’แƒ”แƒœแƒก. แฒชแƒฃแƒ“แƒ˜ แƒแƒ แƒแƒ. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ–แƒ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒแƒก แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ”แƒกแƒขแƒ แƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒงแƒแƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜แƒ“แƒแƒœ แƒฉแƒแƒ›แƒแƒกแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ“.

Docker-แƒจแƒ˜ แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒ•แƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜

แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒฅแƒกแƒ”แƒšแƒจแƒ˜. แƒ“แƒแƒ™แƒ”แƒ แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒ˜แƒžแƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜ แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒแƒ—แƒ’แƒแƒœ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒ แƒ˜แƒ›แƒ˜แƒขแƒ˜แƒฃแƒšแƒก - bridge-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ“แƒแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒแƒ— แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ แƒ˜แƒ›แƒแƒ•แƒ” แƒฐแƒแƒกแƒขแƒ–แƒ”. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒฅแƒกแƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

docker network create msvc-network

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ— backend แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒแƒ“ 'backend' microservices-backend:1.0.0 แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒ—:

docker run -dit --name backend --network msvc-net microservices-backend:1.0.0

แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒฎแƒ˜แƒ“แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒแƒก แƒ›แƒแƒ—แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—. แƒแƒœแƒฃ, backend แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— http://backend:8080.

แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ:

docker run -dit -p 80:8080 --env secret=my-real-secret --env BACKEND_URL=http://backend:8080/ --name gateway --network msvc-net microservices-gateway:1.0.0

แƒแƒ› แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ•แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒฐแƒแƒกแƒขแƒ˜แƒก 80 แƒžแƒแƒ แƒขแƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก 8080 แƒžแƒแƒ แƒขแƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— env แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒ’แƒแƒ–แƒแƒคแƒฎแƒฃแƒšแƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ“แƒแƒแƒญแƒแƒ แƒ‘แƒ”แƒ‘แƒก แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒก application.properties-แƒ“แƒแƒœ.

แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ•แƒฃแƒ แƒ”แƒ™แƒแƒ•แƒ— http://localhost/ แƒ“แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒ แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒจแƒ”แƒ•แƒคแƒฃแƒ—แƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ”แƒ แƒ—แƒแƒ“ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ˜แƒ— แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒ–แƒ”. แƒแƒ›แƒแƒกแƒ—แƒแƒœ, แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜:

  • แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒชแƒฃแƒ“แƒ˜ แƒขแƒแƒšแƒ”แƒ แƒแƒœแƒขแƒแƒ‘แƒ - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ”แƒ แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”
  • แƒชแƒฃแƒ“แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ - แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ, แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ“แƒแƒแƒ‘แƒแƒšแƒแƒœแƒกแƒแƒ— แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก
  • แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ” - แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 3 แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ แƒ“แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒ— (แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ 2 แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก)

แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ Docker Swarm, Nomad, Kubernetes แƒแƒœ OpenShift. แƒ—แƒฃ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ Java-แƒ–แƒ”แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ˜แƒฎแƒ”แƒ“แƒแƒ— Spring Cloud-แƒ˜แƒกแƒ™แƒ”แƒœ (แƒ™แƒแƒ แƒ’แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ).

ะ’ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ›แƒ” แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” Kubernetes แƒ“แƒ แƒ’แƒแƒ•แƒแƒ•แƒ แƒชแƒ”แƒšแƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ Google Kubernetes Engine-แƒ–แƒ”.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ