НаучитС ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ микросСрвисС. Π”Π΅ΠΎ 1. Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€

НаучитС ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ микросСрвисС. Π”Π΅ΠΎ 1. Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚ ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€

Π₯Сј Π₯Π°Π±Ρ€.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ ΠΆΠ΅Π»ΠΈΠΌ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ свом искуству Ρƒ ΡΡ‚Π²Π°Ρ€Π°ΡšΡƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° Π·Π° ΡƒΡ‡Π΅ΡšΠ΅ Π·Π° Π΅ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡΠ°ΡšΠ΅ са микросСрвисима. Када сам Π½Π°ΡƒΡ‡ΠΈΠΎ сваки Π½ΠΎΠ²ΠΈ Π°Π»Π°Ρ‚, ΡƒΠ²Π΅ΠΊ сам ΠΆΠ΅Π»Π΅ΠΎ Π΄Π° Π³Π° испробам Π½Π΅ само Π½Π° локалној машини, Π²Π΅Ρ› ΠΈΡƒ Ρ€Π΅Π°Π»Π½ΠΈΡ˜ΠΈΠΌ условима. Π—Π±ΠΎΠ³ Ρ‚ΠΎΠ³Π° сам ΠΎΠ΄Π»ΡƒΡ‡ΠΈΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Ρ™Π΅Π½Ρƒ микросСрвисну Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ, која сС каснијС ΠΌΠΎΠΆΠ΅ β€žΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈβ€œ свим врстама Π·Π°Π½ΠΈΠΌΡ™ΠΈΠ²ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°. Π“Π»Π°Π²Π½ΠΈ Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ јС њСгова максимална Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π±Π»ΠΈΠ·ΠΈΠ½Π° стварном систСму.

Π£ ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΡƒ сам ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° Ρ€Π°Π·Π±ΠΈΠΎ Ρƒ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΊΠΎΡ€Π°ΠΊΠ°:

  1. НаправитС Π΄Π²Π΅ услугС - 'Π±Π°Ρ†ΠΊΠ΅Π½Π΄' (Π±Π°Ρ†ΠΊΠ΅Π½Π΄) ΠΈ 'Π³Π°Ρ‚Π΅Π²Π°ΠΈ' ​​(Π³Π°Ρ‚Π΅Π²Π°ΠΈ), ΡΠΏΠ°ΠΊΡƒΡ˜Ρ‚Π΅ ΠΈΡ… Ρƒ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ сликС ΠΈ подСситС ΠΈΡ… Π΄Π° Ρ€Π°Π΄Π΅ зајСдно

    ΠšΡ™ΡƒΡ‡Π½Π΅ Ρ€Π΅Ρ‡ΠΈ: Јава 11, Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚, Π”ΠΎΡ†ΠΊΠ΅Ρ€, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° сликС

  2. Развој ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ систСма Ρƒ Π“ΠΎΠΎΠ³Π»Π΅ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π•Π½Π³ΠΈΠ½Π΅-Ρƒ

    ΠšΡ™ΡƒΡ‡Π½Π΅ Ρ€Π΅Ρ‡ΠΈ: ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ, Π“ΠšΠ•, ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ рСсурсима, Π°ΡƒΡ‚ΠΎΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅, Ρ‚Π°Ρ˜Π½Π΅

  3. ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½Π° са Π₯Π΅Π»ΠΌ 3 Π·Π° Π±ΠΎΡ™Π΅ ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ кластСрима

    ОзнакС: Π₯Π΅Π»ΠΌ 3, Ρ€Π°ΡΠΏΠΎΡ€Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½Π°

  4. ПодСшавањС ЏСнкинса ΠΈ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π° Π·Π° аутоматску испоруку ΠΊΠΎΠ΄Π° Ρƒ кластСр

    ΠšΡ™ΡƒΡ‡Π½Π΅ Ρ€Π΅Ρ‡ΠΈ: ЏСнкинс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, Π΄ΠΎΠ΄Π°Ρ†ΠΈ, одвојСно ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°

ΠŸΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° сваком ΠΊΠΎΡ€Π°ΠΊΡƒ посвСтим посСбан Ρ‡Π»Π°Π½Π°ΠΊ.

Ѐокус ΠΎΠ²Π΅ ΡΠ΅Ρ€ΠΈΡ˜Π΅ Ρ‡Π»Π°Π½Π°ΠΊΠ° нијС ΠΊΠ°ΠΊΠΎ написати микросСрвисС, Π²Π΅Ρ› ΠΊΠ°ΠΊΠΎ ΠΈΡ… Π½Π°Ρ‚Π΅Ρ€Π°Ρ‚ΠΈ Π΄Π° Ρ€Π°Π΄Π΅ Ρƒ јСдном систСму. Иако су свС ΠΎΠ²Π΅ ствари ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π²Π°Π½ одговорности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Π°, мислим Π΄Π° јС ΠΈΠΏΠ°ΠΊ корисно Π±ΠΈΡ‚ΠΈ ΡƒΠΏΠΎΠ·Π½Π°Ρ‚ са њима Π±Π°Ρ€Π΅ΠΌ 20% (ΡˆΡ‚ΠΎ, ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‚Π΅, дајС 80% Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°). НСкС бСзусловно Π²Π°ΠΆΠ½Π΅ Ρ‚Π΅ΠΌΠ΅, ΠΏΠΎΠΏΡƒΡ‚ бСзбСдности, Π±ΠΈΡ›Π΅ изостављСнС ΠΈΠ· ΠΎΠ²ΠΎΠ³ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°, Ρ˜Π΅Ρ€ Π°ΡƒΡ‚ΠΎΡ€ ΠΌΠ°Π»ΠΎ Ρ€Π°Π·ΡƒΠΌΠ΅ Π΄Π° јС овај систСм ΠΊΡ€Π΅ΠΈΡ€Π°Π½ искључиво Π·Π° Π»ΠΈΡ‡Π½Ρƒ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Ρƒ. ΠŸΠΎΠ·Π΄Ρ€Π°Π²Ρ™Π°ΠΌ свако ΠΌΠΈΡˆΡ™Π΅ΡšΠ΅ ΠΈ конструктивну ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ.

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ микросСрвиса

УслугС су написанС Ρƒ Јави 11 користСћи Π‘ΠΏΡ€ΠΈΠ½Π³ Π‘ΠΎΠΎΡ‚. Π˜Π½Ρ‚Π΅Ρ€ΡΠ΅Ρ€Π²ΠΈΡΠ½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° јС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π Π•Π‘Π’-Π°. ΠŸΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Ρ›Π΅ ΡƒΠΊΡ™ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π°Π½ Π±Ρ€ΠΎΡ˜ тСстова (ΠΊΠ°ΠΊΠΎ Π±ΠΈ каснијС Π±ΠΈΠ»ΠΎ ΡˆΡ‚Π° Π΄Π° сС тСстира Ρƒ ЏСнкинсу). Π˜Π·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ Π·Π° услугС јС доступан Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ±-Ρƒ: Π±Π°Ρ†ΠΊΠ΅Π½Π΄ ΠΈ ΠΏΡ€ΠΎΠ»Π°Π·.

Π”Π° бистС ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ статус свакС ΠΎΠ΄ услуга, ΡšΠΈΡ…ΠΎΠ²ΠΈΠΌ зависностима јС Π΄ΠΎΠ΄Π°Ρ‚ Π‘ΠΏΡ€ΠΈΠ½Π³ Ацтуатор. Π’ΠΎ Ρ›Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ /Π°Ρ†Ρ‚ΡƒΠ°Ρ‚ΠΎΡ€/Ρ…Π΅Π°Π»Ρ‚Ρ… ΠΊΡ€Π°Ρ˜ΡšΡƒ Ρ‚Π°Ρ‡ΠΊΡƒ ΠΈ Π²Ρ€Π°Ρ‚ΠΈΡ‚ΠΈ статус 200 Π°ΠΊΠΎ јС услуга спрСмна Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚ΠΈ ΡΠ°ΠΎΠ±Ρ€Π°Ρ›Π°Ρ˜, ΠΈΠ»ΠΈ 504 Π°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, ΠΎΠ²ΠΎ јС ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°, ΠΏΠΎΡˆΡ‚ΠΎ су услугС Π²Π΅ΠΎΠΌΠ° Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π΅, Π° Ρƒ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ вишС силС Π²Π΅Ρ›Π° јС Π²Π΅Ρ€ΠΎΠ²Π°Ρ‚Π½ΠΎΡ›Π° Π΄Π° Ρ›Π΅ постати ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ нСдоступнС Π½Π΅Π³ΠΎ Π΄Π° остану Π΄Π΅Π»ΠΈΠΌΠΈΡ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π΅. Али Ρƒ стварним систСмима, Ацтуатор ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΡ›ΠΈ Ρƒ Π΄ΠΈΡ˜Π°Π³Π½ΠΎΡΡ‚ΠΈΡ†ΠΈΡ€Π°ΡšΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ корисници ΠΏΠΎΡ‡Π½Ρƒ Π΄Π° сС Π±ΠΎΡ€Π΅ ΠΎΠΊΠΎ њСга. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ са приступом Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠΎ аутоматски Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ Π½Π° ΠΎΠ²ΠΎ Π·Π°ΡƒΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π΄Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π° са ΠΏΠΎΠΊΠ²Π°Ρ€Π΅Π½ΠΎΠΌ инстанцом услугС.

Π‘Π°Ρ†ΠΊΠ΅Π½Π΄ Π‘Π΅Ρ€Π²ΠΈΡ†Π΅

Позадински сСрвис Ρ›Π΅ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π±Ρ€ΠΎΡ˜Π°Ρ‚ΠΈ ΠΈ Π²Ρ€Π°Ρ‚ΠΈΡ‚ΠΈ Π±Ρ€ΠΎΡ˜ ΠΏΡ€ΠΈΡ…Π²Π°Ρ›Π΅Π½ΠΈΡ… Π·Π°Ρ…Ρ‚Π΅Π²Π°.

Код ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΡ€Π°:

@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.url=http://localhost:8081
instance.id=${random.int}
secret="default-secret"

Π‘Π°Ρ†ΠΊΠ΅Π½Π΄ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€:

@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);
    }
}

Π›Π°Π½ΡΠΈΡ€Π°ΡšΠ΅:

ΠŸΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ Π±Π°Ρ†ΠΊΠ΅Π½Π΄:

./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). Π”Π° Π±ΠΈ сС ΠΎΠ²ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, услугС ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°Π½Π΅ Ρƒ Ρ˜Π΅Π΄Π½Ρƒ ΠΌΡ€Π΅ΠΆΡƒ, Π° само Π³Π΅Ρ˜Ρ‚Π²Π΅Ρ˜ Ρ‚Ρ€Π΅Π±Π° Π΄Π° "ΡˆΡ‚Ρ€Ρ‡ΠΈ" споља.
Π’Π°ΠΊΠΎΡ’Π΅, ΠΎΠ±Π΅ услугС Π΄Π΅Π»Π΅ јСдан систСм Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π΅ стримовС ΠΈ Ρƒ јСдном Ρ‚Ρ€Π΅Π½ΡƒΡ‚ΠΊΡƒ ΠΌΠΎΠ³Ρƒ Π΄Π° ΠΏΠΎΡ‡Π½Ρƒ Π΄Π° ΠΎΠΌΠ΅Ρ‚Π°Ρ˜Ρƒ јСдна Π΄Ρ€ΡƒΠ³Ρƒ. Π‘ΠΈΠ»ΠΎ Π±ΠΈ Π»Π΅ΠΏΠΎ Π΄Π° ΠΈΠ·ΠΎΠ»ΡƒΡ˜Π΅ΠΌΠΎ нашС микросСрвисС. Ово сС ΠΌΠΎΠΆΠ΅ постићи Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜ΠΎΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ машинама (ΠΏΡƒΠ½ΠΎ Π½ΠΎΠ²Ρ†Π°, Ρ‚Π΅ΡˆΠΊΠΎ), ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΡ… машина (ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½Π΅ рСсурсС, Π΄ΡƒΠ³ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅) ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅. Као ΡˆΡ‚ΠΎ сС ΠΈ ΠΎΡ‡Π΅ΠΊΠΈΠ²Π°Π»ΠΎ, Π±ΠΈΡ€Π°ΠΌΠΎ Ρ‚Ρ€Π΅Ρ›Ρƒ ΠΎΠΏΡ†ΠΈΡ˜Ρƒ ΠΈ Π»ΡƒΡ‡ΠΊΠΈ Ρ€Π°Π΄Π½ΠΈΠΊ ΠΊΠ°ΠΎ ΠΎΡ€ΡƒΡ’Π΅ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ.

Π»ΡƒΡ‡ΠΊΠΈ Ρ€Π°Π΄Π½ΠΈΠΊ

Π£ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Π΄ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΡ€Π΅ΠΈΡ€Π° ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅, јСдан ΠΏΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ. Π”Π° бистС користили Π΄ΠΎΡ†ΠΊΠ΅Ρ€, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ - упутства Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ ΠΈ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. Π—Π°Ρ‚ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слику, Π΄Π° јС ΠΎΡ‚ΠΏΡ€Π΅ΠΌΠΈΡ‚Π΅ Ρƒ рСгистар слика (Π±Ρ€. Π”ΠΎΡ†ΠΊΠ΅Ρ€Π₯ΡƒΠ±) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΠ²ΠΎΡ˜Ρƒ микроуслугу Ρƒ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ Ρƒ јСдној ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅

ЈСдна ΠΎΠ΄ Π½Π°Ρ˜Π²Π°ΠΆΠ½ΠΈΡ˜ΠΈΡ… карактСристика сликС јС њСна Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°. ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° слика Ρ›Π΅ сС ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ Π±Ρ€ΠΆΠ΅ ΠΈΠ· ΡƒΠ΄Π°Ρ™Π΅Π½ΠΎΠ³ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°, Π·Π°ΡƒΠ·ΠΈΠΌΠ°Ρ‚ΠΈ мањС простора ΠΈ ваша услуга Ρ›Π΅ ΠΏΠΎΡ‡Π΅Ρ‚ΠΈ Π±Ρ€ΠΆΠ΅. Π‘ΠΈΠ»ΠΎ која слика јС ΠΈΠ·Π³Ρ€Π°Ρ’Π΅Π½Π° Π½Π° основу основнС сликС, Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΡ‡ΡƒΡ˜Π΅ сС Π΄Π° ΠΈΠ·Π°Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π°Ρ˜ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π½ΠΈΡ˜Ρƒ ΠΎΠΏΡ†ΠΈΡ˜Ρƒ. Π”ΠΎΠ±Ρ€Π° ΠΎΠΏΡ†ΠΈΡ˜Π° јС АлпинС, ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π° Π›ΠΈΠ½ΡƒΠΊ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π° са ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΠΌΠ°.

ΠŸΡ€Π²ΠΎ, ΠΏΠΎΠΊΡƒΡˆΠ°Ρ˜ΠΌΠΎ Π΄Π° напишСмо Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ "Π½Π° Ρ‡Π΅Π»ΠΎ" (ΠΎΠ΄ΠΌΠ°Ρ… Ρ›Ρƒ Ρ€Π΅Ρ›ΠΈ Π΄Π° јС ΠΎΠ²ΠΎ лош Π½Π°Ρ‡ΠΈΠ½, Π½Π΅ΠΌΠΎΡ˜Ρ‚Π΅ Ρ‚ΠΎ Ρ€Π°Π΄ΠΈΡ‚ΠΈ):

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"]

ОвдС користимо основну слику Π±Π°Π·ΠΈΡ€Π°Π½Ρƒ Π½Π° АлпинС-Ρƒ са Π²Π΅Ρ› инсталираним ΠˆΠ”Πš-ΠΎΠΌ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄ΡšΡƒ нашСг ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°. Командом АДД додајСмо Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΈ срц Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Π½Π° слику, ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΠΌΠΎ Π³Π° ΠΊΠ°ΠΎ Ρ€Π°Π΄Π½ΠΈ (Π’ΠžΠ ΠšΠ”Π˜Π ) ΠΈ Π·Π°ΠΏΠΎΡ‡ΠΈΡšΠ΅ΠΌΠΎ ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅. Команда Π•ΠšΠ‘ΠŸΠžΠ‘Π• 8080 сигнализира Π΄ΠΎΡ†ΠΊΠ΅Ρ€-Ρƒ Π΄Π° Ρ›Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Ρƒ користити свој ΠΏΠΎΡ€Ρ‚ 8080 (ΠΎΠ²ΠΎ Π½Π΅Ρ›Π΅ ΡƒΡ‡ΠΈΠ½ΠΈΡ‚ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ доступном споља, Π°Π»ΠΈ Ρ›Π΅ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ приступ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π½Π° ΠΈΡΡ‚ΠΎΡ˜ ΠΌΡ€Π΅ΠΆΠΈ Π΄ΠΎΡ†ΠΊΠ΅Ρ€-Π° ).

Π”Π° бистС спаковали услугС Ρƒ сликС, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΠ· ΠΊΠΎΡ€Π΅Π½Π° сваког ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°:

docker image build . -t msvc-backend:1.0.0

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ јС слика ΠΎΠ΄ 456 ΠœΠ‘ (ΠΎΠ΄ Ρ‡Π΅Π³Π° јС основна ΠˆΠ”Πš слика Π·Π°ΡƒΠ·ΠΈΠΌΠ°Π»Π° 340 ΠœΠ‘). И свС Ρ‚ΠΎ упркос Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†ΠΈ Π΄Π° сС часови Ρƒ нашСм ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Ρƒ ΠΌΠΎΠ³Ρƒ ΠΈΠ·Π±Ρ€ΠΎΡ˜Π°Ρ‚ΠΈ Π½Π° прст. Π”Π° бистС смањили Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ нашС сликС:

  • ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ ΠΌΠΎΠ½Ρ‚Π°ΠΆΡƒ Ρƒ вишС ΠΊΠΎΡ€Π°ΠΊΠ°. Π£ ΠΏΡ€Π²ΠΎΠΌ ΠΊΠΎΡ€Π°ΠΊΡƒ Ρ›Π΅ΠΌΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚, Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ›Π΅ΠΌΠΎ инсталирати ΠˆΠ Π•, Π°Ρƒ Ρ‚Ρ€Π΅Ρ›Π΅ΠΌ ΠΊΠΎΡ€Π°ΠΊΡƒ Ρ›Π΅ΠΌΠΎ свС Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ΠΈ Ρƒ Π½ΠΎΠ²Ρƒ чисту АлпинС слику. Π£ΠΊΡƒΠΏΠ½ΠΎ, само ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Π½Π° ΠΊΠΎΠ½Π°Ρ‡Π½ΠΎΡ˜ слици.
  • Π₯ајдС Π΄Π° користимо ΠΌΠΎΠ΄ΡƒΠ»Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ јава. ΠŸΠΎΡ‡Π΅Π²ΡˆΠΈ ΠΎΠ΄ ЈавС 9, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити Π°Π»Π°Ρ‚ΠΊΡƒ јлинк Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠˆΠ Π• само ΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»Π° који су Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ

Π—Π° Ρ€Π°Π΄ΠΎΠ·Π½Π°Π»Π΅, Π΅Π²ΠΎ Π΄ΠΎΠ±Ρ€ΠΎΠ³ Ρ‡Π»Π°Π½ΠΊΠ° ΠΎ приступима смањСња сликС. https://habr.com/ru/company/ruvds/blog/485650/.

ΠšΠΎΠ½Π°Ρ‡Π½ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅:

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 network create msvc-network

Π—Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ позадински ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ 'Π±Π°Ρ†ΠΊΠ΅Π½Π΄' са сликом мицросСрвицСс-Π±Π°Ρ†ΠΊΠ΅Π½Π΄:1.0.0:

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

Π’Ρ€Π΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡƒΡ‚ΠΈ Π΄Π° ΠΌΡ€Π΅ΠΆΠ° мостова ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Ρƒ услугу ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° ΠΏΠΎ ΡšΠΈΡ…ΠΎΠ²ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°. Π’ΠΎ Ρ˜Π΅ΡΡ‚, позадинска услуга Ρ›Π΅ Π±ΠΈΡ‚ΠΈ доступна ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ ΠΌΡ€Π΅ΠΆΠ΅ Π½Π° адрСси 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 ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ ΠΎΠΏΡ†ΠΈΡ˜Π΅ Π΅Π½Π² Π΄Π° бисмо поставили ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° којС Ρ›Π΅ аутоматски Ρ‡ΠΈΡ‚Π°Ρ‚ΠΈ спринг ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΈ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° ΠΈΠ· Π°ΠΏΠΏΠ»ΠΈΡ†Π°Ρ‚ΠΈΠΎΠ½.пропСртиСс.

Након ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΠ°, Π·ΠΎΠ²Π΅ΠΌΠΎ http://localhost/ ΠΈ ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅ сС Π΄Π° свС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅, ΠΊΠ°ΠΎ Ρƒ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ.

Π—Π°ΠΊΡ™ΡƒΡ‡Π°ΠΊ

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ³Π°, Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ смо Π΄Π²Π° Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° микросСрвиса, спаковали ΠΈΡ… Ρƒ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅ ΠΈ зајСдно ΠΈΡ… ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΠ»ΠΈ Π½Π° ΠΈΡΡ‚ΠΎΡ˜ машини. ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, добијСни систСм ΠΈΠΌΠ° Π½ΠΈΠ· нСдостатака:

  • Π‘Π»Π°Π±Π° Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π³Ρ€Π΅ΡˆΠ°ΠΊΠ° - свС Ρ€Π°Π΄ΠΈ Π·Π° нас Π½Π° јСдном сСрвСру
  • Π›ΠΎΡˆΠ° скалабилност - ΠΊΠ°Π΄Π° сС ΠΎΠΏΡ‚Π΅Ρ€Π΅Ρ›Π΅ΡšΠ΅ ΠΏΠΎΠ²Π΅Ρ›Π°, Π±ΠΈΠ»ΠΎ Π±ΠΈ Π»Π΅ΠΏΠΎ аутоматски ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π΄ΠΎΠ΄Π°Ρ‚Π½Π΅ инстанцС услугС ΠΈ балансирати ΠΎΠΏΡ‚Π΅Ρ€Π΅Ρ›Π΅ΡšΠ΅ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ ΡšΠΈΡ…
  • БлоТСност ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° - ΠΌΠΎΡ€Π°Π»ΠΈ смо Π΄Π° унСсСмо најмањС 3 ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΠΈ са ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° (ΠΎΠ²ΠΎ јС само Π·Π° 2 услугС)

Π”Π° бистС Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π³ΠΎΡ€Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½ΠΈΠ· Ρ€Π΅ΡˆΠ΅ΡšΠ° ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π‘Π²Π°Ρ€ΠΌ, Номад, ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ ΠΈΠ»ΠΈ ΠžΠΏΠ΅Π½Π‘Ρ…ΠΈΡ„Ρ‚. Ако јС Ρ†Π΅ΠΎ систСм написан Π½Π° Јави, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΏΡ€Π΅ΠΌΠ° Π‘ΠΏΡ€ΠΈΠ½Π³ Π¦Π»ΠΎΡƒΠ΄ (Π΄ΠΎΠ±Π°Ρ€ Ρ‡Π»Π°Π½Π°ΠΊ).

Π’ слСдСћи Π΄Π΅ΠΎ Π“ΠΎΠ²ΠΎΡ€ΠΈΡ›Ρƒ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ сам подСсио ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΎ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Π½Π° Π“ΠΎΠΎΠ³Π»Π΅ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π•Π½Π³ΠΈΠ½Π΅.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€