๐with Microservice
Introduce, 10 example,...
What is Microservice Architecture?
Kiแบฟn trรบc Microservice dแปฑa trรชn lฤฉnh vแปฑc kinh doanh, bao gแปm nhiแปu dแปch vแปฅ nhแป ฤแปc lแบญp. Trong kiแบฟn trรบc nร y, mแปi thร nh phแบงn ฤแปu tแปฑ chแปฉa vร liรชn quan ฤแบฟn mแปt khแบฃ nฤng kinh doanh cแปฅ thแป.
Tแบกi sao chรบng ta lแบกi cรขn nhแบฏc dรนng kiแบฟn trรบc Microservice thay vรฌ kiแบฟn trรบc ฤฦกn khแปi? Dฦฐแปi ฤรขy lร bแปn lรฝ do chรญnh vแป viแปc chแปn kiแบฟn trรบc Microservice hฦกn kiแบฟn trรบc ฤฦกn khแปi.
Dแป quan sรกt - MSA cho phรฉp theo dรตi cรกc dแปch vแปฅ dแป dร ng hฦกn.
Tฤng khแบฃ nฤng phแปฅc hแปi - Cแบฃi thiแปn khแบฃ nฤng phแปฅc hแปi mแบกng dแปch vแปฅ.
Rรบt ngแบฏn thแปi gian sแบฃn xuแบฅt - Giแบฃm thแปi gian tแปซ รฝ tฦฐแปng ฤแบฟn sแบฃn phแบฉm hoร n thiแปn.
Tiแบฟt kiแปm chi phรญ - Giแบฃm chi phรญ cho viแปc thiแบฟt kแบฟ, triแปn khai vร duy trรฌ cรกc dแปch vแปฅ IT.

Bรขy giแป bแบกn ฤรฃ biแบฟt kiแบฟn trรบc Microservice lร gรฌ vร tแบกi sao bแบกn cแบงn xem xรฉt kiแบฟn trรบc Microservice ฤแป xรขy dแปฑng แปฉng dแปฅng bแปn vแปฏng theo thแปi gian vร cรณ thแป mแป rแปng ฤแปง ฤแป xแปญ lรฝ lฦฐu lฦฐแปฃng trong thแบฟ giแปi thแปฑc. Hรฃy cรนng tรฌm hiแปu cรกc nguyรชn tแบฏc cฦก bแบฃn cแปงa Microservices vร mแบซu thiแบฟt kแบฟ mร bแบกn cรณ thแป sแปญ dแปฅng ฤแป giแบฃi quyแบฟt cรกc vแบฅn ฤแป phแป biแบฟn liรชn quan ฤแบฟn kiแบฟn trรบc microservice.
Hรฃy xem xรฉt cรกc nguyรชn tแบฏc mร kiแบฟn trรบc microservice ฤฦฐแปฃc xรขy dแปฑng dแปฑa trรชn ฤรณ:
Khแบฃ nฤng mแป rแปng
Linh hoแบกt
ฤแปc lแบญp vร tแปฑ chแปง
Quแบฃn lรฝ phรขn tรกn
Khแบฃ nฤng phแปฅc hแปi
Cรด lแบญp cรกc lแปi
Giao hร ng liรชn tแปฅc thรดng qua DevOps
Trong khi tuรขn thแปง cรกc nguyรชn tแบฏc trรชn, cรณ thแป sแบฝ cรณ mแปt sแป rแปงi ro khรกc mร cรกc nhร phรกt triแปn cรณ thแป gแบทp phแบฃi. ฤแป trรกnh ฤiแปu nร y, chรบng ta cรณ thแป sแปญ dแปฅng cรกc mแบซu thiแบฟt kแบฟ trong kiแบฟn trรบc microservice.
1. Database per Microservice Pattern
Thiแบฟt kแบฟ cฦก sแป dแปฏ liแปu ฤang phรกt triแปn nhanh chรณng, vร cรณ nhiแปu rร o cแบฃn cแบงn vฦฐแปฃt qua trong quรก trรฌnh phรกt triแปn mแปt giแบฃi phรกp dแปฑa trรชn microservices. Kiแบฟn trรบc cฦก sแป dแปฏ liแปu lร mแปt trong nhแปฏng khรญa cแบกnh quan trแปng nhแบฅt cแปงa microservices.
Cรกch lฦฐu trแปฏ dแปฏ liแปu tแปt nhแบฅt vร nรชn lฦฐu trแปฏ แป ฤรขu?
Cรณ hai lแปฑa chแปn chรญnh ฤแป tแป chแปฉc cฦก sแป dแปฏ liแปu khi sแปญ dแปฅng kiแบฟn trรบc microservice.
Cฦก sแป dแปฏ liแปu cho mแปi dแปch vแปฅ
Cฦก sแป dแปฏ liแปu chung
Trong lแปฑa chแปn "Cฦก sแป dแปฏ liแปu cho mแปi dแปch vแปฅ", mแปi microservice sแบฝ cรณ cฦก sแป dแปฏ liแปu riรชng biแปt cแปงa nรณ, giรบp ฤแบฃm bแบฃo ฤแปc lแบญp vร khรดng แบฃnh hฦฐแปng ฤแบฟn cรกc microservice khรกc. ฤiแปu nร y giรบp tฤng khแบฃ nฤng mแป rแปng vร cแบฃi thiแปn hiแปu suแบฅt.
แป lแปฑa chแปn "Cฦก sแป dแปฏ liแปu chung", nhiแปu microservice chia sแบป cรนng mแปt cฦก sแป dแปฏ liแปu. Mแบทc dรน ฤiแปu nร y cรณ thแป dแป dร ng hฦกn trong viแปc quแบฃn lรฝ nhฦฐng lแบกi tiแปm แบฉn nguy cฦก khi cรกc dแปch vแปฅ liรชn quan ฤแบฟn nhau vร cรณ thแป gรขy ra vแบฅn ฤแป vแป hiแปu suแบฅt.
Thรดng thฦฐแปng, lแปฑa chแปn "Cฦก sแป dแปฏ liแปu cho mแปi dแปch vแปฅ" ฤฦฐแปฃc ฦฐa chuแปng hฦกn trong kiแบฟn trรบc microservices vรฌ ฦฐu ฤiแปm vแป khแบฃ nฤng mแป rแปng, ฤแปc lแบญp vร hiแปu suแบฅt. Tuy nhiรชn, tรนy vร o yรชu cแบงu cแปฅ thแป cแปงa dแปฑ รกn, bแบกn cรณ thแป cรขn nhแบฏc giแปฏa hai lแปฑa chแปn nร y.
1.1 Cฦก sแป dแปฏ liแปu cho mแปi dแปch vแปฅ.
ร tฦฐแปng rแบฅt ฤฦกn giแบฃn. Sแบฝ cรณ mแปt cฦก sแป dแปฏ liแปu cho mแปi microservice (toร n bแป lฦฐแปฃc ฤแป hoแบทc mแปt bแบฃng). Cรกc dแปch vแปฅ khรกc khรดng thแป truy cแบญp vร o kho dแปฏ liแปu mร chรบng khรดng kiแปm soรกt. Mแปt giแบฃi phรกp nhฦฐ vแบญy cรณ rแบฅt nhiแปu ฦฐu ฤiแปm.
Cฦก sแป dแปฏ liแปu ฤแปc lแบญp, mแบทt khรกc, dแป dร ng mแป rแปng. Hฦกn nแปฏa, microservice ฤรณng gรณi dแปฏ liแปu cแปงa lฤฉnh vแปฑc (domain). Do ฤรณ, viแปc hiแปu dแปch vแปฅ vร dแปฏ liแปu cแปงa nรณ nhฦฐ mแปt thแป thแปng nhแบฅt trแป nรชn dแป dร ng hฦกn. ฤiแปu nร y ฤแบทc biแปt quan trแปng ฤแปi vแปi cรกc thร nh viรชn mแปi cแปงa development team.
Hแป sแบฝ mแบฅt รญt thแปi gian vร cรดng sแปฉc hฦกn ฤแป nแบฏm rรต lฤฉnh vแปฑc mร hแป chแปu trรกch nhiแปm. Nhฦฐแปฃc ฤiแปm chรญnh cแปงa dแปch vแปฅ cฦก sแป dแปฏ liแปu nร y lร cรณ nhu cแบงu vแป cฦก chแบฟ bแบฃo vแป trฦฐแปc lแปi trong trฦฐแปng hแปฃp truyแปn thรดng bแป giรกn ฤoแบกn.
1.2 Cฦก sแป dแปฏ liแปu chung
Viแปc sแปญ dแปฅng cฦก sแป dแปฏ liแปu chung ฤฦฐแปฃc xem lร mแปt anti-pattern. Tuy nhiรชn, ฤiแปu nร y vแบซn cรฒn khiแบฟm khuyแบฟt. Vแบฅn ฤแป lร khi cรกc microservice sแปญ dแปฅng cฦก sแป dแปฏ liแปu chung, chรบng mแบฅt ฤi cรกc ฤแบทc tรญnh chรญnh nhฦฐ khแบฃ nฤng mแป rแปng, แปn ฤแปnh vร ฤแปc lแบญp. Kแบฟt quแบฃ lร , microservices hiแบฟm khi sแปญ dแปฅng cฦก sแป dแปฏ liแปu chung.
Khi mแปt cฦก sแป dแปฏ liแปu chung dฦฐแปng nhฦฐ lร giแบฃi phรกp tแปt nhแบฅt cho mแปt dแปฑ รกn microservices, chรบng ta nรชn xem xรฉt lแบกi liแปu microservices thแปฑc sแปฑ cแบงn thiแบฟt hay khรดng. Cรณ thแป kiแบฟn trรบc ฤฦกn khแปi (monolith) lแบกi lร lแปฑa chแปn tแปt hฦกn. Hรฃy xem xรฉt cรกch hoแบกt ฤแปng cแปงa mแปt cฦก sแป dแปฏ liแปu chung.
Viแปc sแปญ dแปฅng cฦก sแป dแปฏ liแปu chung vแปi microservices khรดng phแบฃi lร tรฌnh huแปng phแป biแบฟn. Mแปt trแบกng thรกi tแบกm thแปi cรณ thแป ฤฦฐแปฃc tแบกo khi chuyแปn ฤแปi kiแบฟn trรบc ฤฦกn khแปi sang microservices. Quแบฃn lรฝ giao dแปch lร lแปฃi รญch cฦก bแบฃn cแปงa cฦก sแป dแปฏ liแปu chung so vแปi cฦก sแป dแปฏ liแปu cho mแปi dแปch vแปฅ. Khรดng cแบงn phแบฃi lan truyแปn giao dแปch trรชn cรกc dแปch vแปฅ.
2. Event Sourcing Pattern
Event sourcing cรณ trรกch nhiแปm cung cแบฅp mแปt chuแปi cรกc sแปฑ kiแปn ฤฦฐแปฃc sแบฏp xแบฟp. Trแบกng thรกi แปฉng dแปฅng cรณ thแป ฤฦฐแปฃc xรขy dแปฑng lแบกi bแบฑng cรกch truy vแบฅn dแปฏ liแปu, vร ฤแป lร m ฤiแปu nร y, chรบng ta cแบงn xรขy dแปฑng lแบกi mแปi thay ฤแปi trong trแบกng thรกi cแปงa แปฉng dแปฅng. Event sourcing dแปฑa trรชn รฝ tฦฐแปng rแบฑng bแบฅt kแปณ thay ฤแปi nร o trong trแบกng thรกi cแปงa mแปt entity ฤแปu nรชn ฤฦฐแปฃc hแป thแปng ghi lแบกi.
Viแปc persistence cแปงa mแปt business item ฤฦฐแปฃc thแปฑc hiแปn bแบฑng cรกch lฦฐu trแปฏ mแปt chuแปi cรกc sแปฑ kiแปn thay ฤแปi trแบกng thรกi. Mแปi khi trแบกng thรกi cแปงa mแปt object thay ฤแปi, mแปt event mแปi ฤฦฐแปฃc thรชm vร o chuแปi sแปฑ kiแปn. ฤiแปu nร y vแป cฦก bแบฃn lร atomic vรฌ ฤรณ lร mแปt hร nh ฤแปng. Bแบฑng cรกch replay cรกc event cแปงa mแปt entity, trแบกng thรกi hiแปn tแบกi cแปงa nรณ cรณ thแป ฤฦฐแปฃc xรขy dแปฑng lแบกi.
Mแปt event store ฤฦฐแปฃc sแปญ dแปฅng ฤแป theo dรตi tแบฅt cแบฃ cรกc event cแปงa bแบกn. Event store ฤรณng vai trรฒ nhฦฐ mแปt message broker cลฉng nhฦฐ mแปt cฦก sแป dแปฏ liแปu cแปงa cรกc event. Nรณ cung cแบฅp cho cรกc service khแบฃ nฤng subscribe cรกc event thรดng qua mแปt API. Event store gแปญi thรดng tin vแป mแปi event ฤฦฐแปฃc lฦฐu trแปฏ trong cฦก sแป dแปฏ liแปu cho tแบฅt cแบฃ cรกc subscriber quan tรขm. Trong kiแบฟn trรบc microservices dแปฑa trรชn sแปฑ kiแปn, event store lร nแปn tแบฃng.
Mรด hรฌnh nร y cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng trong cรกc tรฌnh huแปng sau:
Viแปc giแปฏ nguyรชn data storage hiแปn cรณ rแบฅt quan trแปng.
Khรดng nรชn cรณ thay ฤแปi nร o ฤแปi vแปi codebase cแปงa data layer hiแปn cรณ.
Cรกc Transaction rแบฅt quan trแปng ฤแปi vแปi thร nh cรดng cแปงa แปฉng dแปฅng.
Vรฌ vแบญy, tแปซ cuแปc thแบฃo luแบญn แป trรชn, rรต rร ng chแป ra rแบฑng event sourcing giแบฃi quyแบฟt thรกch thแปฉc cแปงa viแปc triแปn khai mแปt kiแบฟn trรบc dแปฑa trรชn sแปฑ kiแปn. Cรกc microservices vแปi shared database khรดng thแป dแป dร ng scale. Database cลฉng sแบฝ lร single point of failure. Thay ฤแปi database cรณ thแป แบฃnh hฦฐแปng ฤแบฟn nhiแปu services.

3. Command Query Segmentation (CQRS) Pattern
Trฦฐแปc ฤรขy, chรบng ta ฤรฃ thแบฃo luแบญn vแป event sourcing. Bรขy giแป, chรบng ta sแบฝ thแบฃo luแบญn vแป CQRS lร gรฌ? Chรบng ta cรณ thแป chia chแปง ฤแป nร y thร nh hai phแบงn vแปi cรกc lแปnh vร truy vแบฅn.
Lแปnh - Thay ฤแปi trแบกng thรกi cแปงa ฤแปi tฦฐแปฃng hoแบทc entity. Truy vแบฅn - Trแบฃ vแป trแบกng thรกi cแปงa entity vร khรดng thay ฤแปi bแบฅt cแปฉ ฤiแปu gรฌ.
Trong hแป thแปng quแบฃn lรฝ dแปฏ liแปu truyแปn thแปng, cรณ mแปt sแป vแบฅn ฤแป:
Nguy cฦก xung ฤแปt dแปฏ liแปu
Quแบฃn lรฝ hiแปu nฤng vร bแบฃo mแบญt phแปฉc tแบกp do cรกc ฤแปi tฦฐแปฃng tiแบฟp xรบc cแบฃ แปฉng dแปฅng ฤแปc vร ghi.
Vรฌ vแบญy, ฤแป giแบฃi quyแบฟt nhแปฏng vแบฅn ฤแป nร y, CQRS xuแบฅt hiแปn trong bแปi cแบฃnh lแปn hฦกn. CQRS cรณ trรกch nhiแปm thay ฤแปi trแบกng thรกi cแปงa entity hoแบทc trแบฃ vแป kแบฟt quแบฃ.
Lแปฃi รญch cแปงa viแปc sแปญ dแปฅng CQRS ฤฦฐแปฃc thแบฃo luแบญn bรชn dฦฐแปi.
ฤแป phแปฉc tแบกp cแปงa hแป thแปng giแบฃm xuแปng do cรกc mรด hรฌnh truy vแบฅn vร lแปnh ฤฦฐแปฃc tรกch biแปt.
Cung cแบฅp nhiแปu chแบฟ ฤแป xem cho mแปฅc ฤรญch truy vแบฅn.
Cรณ thแป tแปi ฦฐu hรณa phรญa ฤแปc cแปงa hแป thแปng riรชng biแปt khแปi phรญa ghi.
Phรญa ghi cแปงa mรด hรฌnh xแปญ lรฝ viแปc lฦฐu trแปฏ cรกc event vร hoแบกt ฤแปng nhฦฐ mแปt nguแปn thรดng tin cho phรญa ฤแปc. Mรด hรฌnh ฤแปc cแปงa hแป thแปng tแบกo ra cรกc chแบฟ ฤแป xem vแบญt liแปu hรณa cแปงa dแปฏ liแปu, thฦฐแปng lร cรกc chแบฟ ฤแป xem phi chuแบฉn hรณa cao.

4. SAGA
SAGA Pattern lร pattern ฤแบฃm bแบฃo tรญnh nhแบฅt quรกn cแปงa dแปฏ liแปu (bแบฑng cรกc quแบฃn lรฝ transactions) giแปฏa cรกc microservices khรกc nhau.
Vรฌ lร hแป thแปng phรขn tรกn nรชn mแปi รดng cรณ thแป xแปญ lรฝ mแปt phแบงn (nแบฑm trรชn mแปt transactions), nแบฟu mแปt cรกi bแป fail thรฌ SAGA lรบc nร y cรณ thแป thแปฑc hiแปn mแปt transactions thay thแบฟ bรน vร o cรกi transactions bแป fail ฤรณ.
Vแป mแบทt รฝ tฦฐแปng, mแปi micro services khi nhแบญn ฤฦฐแปฃc yรชu cแบงu thแปฑc hiแปn transactions, bแบฃn thรขn micro services ฤรณ sแบฝ thแปฑc hiแปn transactions tแบกi chรญnh services ฤรณ. Sau khi ฤรฃ thแปฑc hiแปn xong, theo hฦฐแปng cแปงa SAGA Pattern, services ฤรณ sแบฝ publish mแปt thรดng bรกo (message) hoแบทc mแปt events (sแปฑ kiแปn).
Tแปซ thรดng bรกo hoแบทc sแปฑ kiแปn ฤรณ sแบฝ biแบฟt ฤฦฐแปฃc transactions nร o nรชn ฤฦฐแปฃc thแปฑc hiแปn tiแบฟp.

Nhฦฐ hรฌnh phรญa trรชn, Order Services sau khi thแปฑc hiแปn transactions tแบกi service sแบฝ publish message hoแบทc event ฤแป biแบฟt kแบฟ tiแบฟp sแบฝ phแบฃi thแปฑc hiแปn transactions tแบกi Customer Service.
Customer Services sau ฤรณ publish tiแบฟp ฤแป biแบฟt cแบงn phแบฃi quay lแบกi Order Service ฤแป thแปฑc hiแปn tiแบฟp transactions.
Cรณ hai cรกch ฤแป thแปฑc hiแปn saga:
Biรชn ฤแบกo (Choreography)
Dร n dแปฑng (Orchestration) Trong saga biรชn ฤแบกo, khรดng cรณ sแปฑ dร n dแปฑng trung tรขm. Mแปi dแปch vแปฅ trong Saga thแปฑc hiแปn giao dแปch cแปงa mรฌnh vร xuแบฅt bแบฃn cรกc sแปฑ kiแปn. Cรกc dแปch vแปฅ khรกc ฤรกp แปฉng nhแปฏng sแปฑ kiแปn ฤรณ vร thแปฑc hiแปn cรกc nhiแปm vแปฅ cแปงa hแป. Ngoร i ra, tรนy thuแปc vร o tรฌnh huแปng, chรบng cรณ thแป hoแบทc khรดng xuแบฅt bแบฃn cรกc sแปฑ kiแปn bแป sung.
Trong saga dร n dแปฑng, mแปi dแปch vแปฅ tham gia trong saga thแปฑc hiแปn giao dแปch cแปงa hแป vร xuแบฅt bแบฃn cรกc sแปฑ kiแปn. Cรกc dแปch vแปฅ khรกc ฤรกp แปฉng nhแปฏng sแปฑ kiแปn nร y vร hoร n thร nh nhiแปm vแปฅ cแปงa hแป.
Lแปฃi รญch cแปงa viแปc sแปญ dแปฅng SAGA
Cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng ฤแป duy trรฌ tรญnh nhแบฅt quรกn dแปฏ liแปu giแปฏa cรกc dแปch vแปฅ mร khรดng cแบงn liรชn kแบฟt chแบทt chแบฝ.
Nhฦฐแปฃc ฤiแปm cแปงa viแปc sแปญ dแปฅng SAGA
ฤแป phแปฉc tแบกp cแปงa mแบซu thiแบฟt kแบฟ SAGA cao tแปซ gรณc nhรฌn cแปงa lแบญp trรฌnh viรชn, vร cรกc nhร phรกt triแปn khรดng quen vแปi viแปc viแบฟt saga nhฦฐ transaction truyแปn thแปng.

Saga Implementation Design
5. Backend For Frontend (BFF)
Mแบซu nร y ฤฦฐแปฃc sแปญ dแปฅng ฤแป xรกc ฤแปnh cรกch dแปฏ liแปu ฤฦฐแปฃc truy xuแบฅt giแปฏa mรกy chแปง vร mรกy khรกch. Lรฝ tฦฐแปng nhแบฅt, nhรณm frontend sแบฝ chแปu trรกch nhiแปm quแบฃn lรฝ BFF (Backend For Frontend).
Mแปt BFF duy nhแบฅt cรณ trรกch nhiแปm xแปญ lรฝ giao diแปn ngฦฐแปi dรนng ฤฦกn vร nรณ sแบฝ giรบp chรบng ta giแปฏ cho frontend ฤฦกn giแบฃn vร thแบฅy dแปฏ liแปu ฤฦฐแปฃc xem tแปng hแปฃp thรดng qua backend.
Tแบกi sao BFF cแบงn trong แปฉng dแปฅng microservice cแปงa chรบng ta? Mแปฅc tiรชu cแปงa kiแบฟn trรบc nร y lร tรกch biแปt cรกc แปฉng dแปฅng front-end khแปi kiแบฟn trรบc backend. Trong mแปt kแปch bแบฃn, hรฃy nghฤฉ vแป viแปc bแบกn cรณ mแปt แปฉng dแปฅng bao gแปm แปฉng dแปฅng di ฤแปng, แปฉng dแปฅng web vร cแบงn giao tiแบฟp vแปi cรกc dแปch vแปฅ backend trong kiแบฟn trรบc microservices.
Viแปc nร y cรณ thแป ฤฦฐแปฃc thแปฑc hiแปn thร nh cรดng, nhฦฐng nแบฟu bแบกn muแปn thay ฤแปi mแปt trong nhแปฏng dแปch vแปฅ frontend, bแบกn cแบงn triแปn khai phiรชn bแบฃn mแปi thay vรฌ chแป cแบญp nhแบญt mแปt dแปch vแปฅ.
Vรฌ vแบญy, kiแบฟn trรบc microservice xuแบฅt hiแปn vร nรณ cรณ khแบฃ nฤng hiแปu nhแปฏng gรฌ แปฉng dแปฅng cแปงa chรบng ta cแบงn vร cรกch xแปญ lรฝ cรกc dแปch vแปฅ.
ฤรขy lร mแปt cแบฃi tiแบฟn lแปn trong kiแบฟn trรบc microservice, vรฌ nรณ cho phรฉp cรด lแบญp backend cแปงa แปฉng dแปฅng khแปi frontend. Mแปt lแปฃi รญch khรกc mร chรบng ta cรณ thแป nhแบญn ฤฦฐแปฃc tแปซ BFF nร y lร chรบng ta cรณ thแป tรกi sแปญ dแปฅng mรฃ nguแปn, vรฌ nรณ cho phรฉp tแบฅt cแบฃ mรกy khรกch sแปญ dแปฅng mรฃ nguแปn tแปซ backend.
Giแปฏa mรกy khรกch vร cรกc API, dแปch vแปฅ bรชn ngoร i khรกc, vv, BFF hoแบกt ฤแปng tฦฐฦกng tแปฑ nhฦฐ mแปt mรกy chแปง proxy. Nแบฟu yรชu cแบงu phแบฃi ฤi qua mแปt thร nh phแบงn khรกc, ฤแป trแป chแบฏc chแบฏn sแบฝ tฤng lรชn.

6. API Gateway
Kiแบฟn trรบc microservice rแบฅt phรน hแปฃp cho cรกc แปฉng dแปฅng lแปn vแปi nhiแปu แปฉng dแปฅng client, vร nรณ chแปu trรกch nhiแปm cung cแบฅp mแปt ฤiแปm nhแบญp duy nhแบฅt cho mแปt nhรณm cรกc microservices.
API Gateway ฤแบทt giแปฏa แปฉng dแปฅng client vร microservices, hoแบกt ฤแปng nhฦฐ mแปt reverse proxy (proxy ngฦฐแปฃc) chuyแปn tiแบฟp yรชu cแบงu cแปงa client ฤแบฟn cรกc dแปch vแปฅ. Xรกc thแปฑc, SSL termination (kแบฟt thรบc SSL) vร caching (bแป nhแป ฤแปm) lร mแปt sแป dแปch vแปฅ cross-cutting (xuyรชn suแปt) khรกc mร API Gateway cรณ thแป cung cแบฅp.
Vรฌ sao chรบng ta lแบกi xem xรฉt kiแบฟn trรบc API Gateway thay vรฌ sแปญ dแปฅng liรชn lแบกc trแปฑc tiแบฟp tแปซ client ฤแบฟn microservice? Chรบng ta sแบฝ thแบฃo luแบญn ฤiแปu nร y vแปi cรกc vรญ dแปฅ sau:
Security issues (Vแบฅn ฤแป bแบฃo mแบญt) - Nแบฟu khรดng cรณ gateway, tแบฅt cแบฃ cรกc microservices sแบฝ phแบฃi tiแบฟt lแป ra "bรชn ngoร i", lร m tฤng mแปฉc ฤแป nguy cฦก tแบฅn cรดng so vแปi viแปc giแปฏ kรญn cรกc microservices nแปi bแป khรดng ฤฦฐแปฃc truy cแบญp trแปฑc tiแบฟp bแปi แปฉng dแปฅng client.
Cross-cutting concerns (Nhแปฏng vแบฅn ฤแป xuyรชn suแปt) - Cรกc microservice ฤฦฐแปฃc xuแบฅt bแบฃn cรดng khai phแบฃi xแปญ lรฝ riรชng biแปt viแปc แปงy quyแปn vร SSL. Trong nhiแปu trฦฐแปng hแปฃp, nhแปฏng vแบฅn ฤแป nร y cรณ thแป ฤฦฐแปฃc giแบฃi quyแบฟt ngay tแบกi API Gateway, giแบฃm sแป lฦฐแปฃng microservices nแปi bแป.
Coupling issues (Vแบฅn ฤแป kแบฟt nแปi) - Client apps rร ng buแปc vแปi cรกc microservices nแปi bแป mร khรดng cแบงn API Gateway. แปจng dแปฅng client cแบงn hiแปu cรกch cรกc microservices phรขn chia cรกc phแบงn khรกc nhau cแปงa แปฉng dแปฅng.
Cuแปi cรนng, API Gateway phแบฃi cรณ khแบฃ nฤng xแปญ lรฝ partial failures (thแบฅt bแบกi tแปซng phแบงn). Lแปi cแปงa mแปt microservice khรดng phแบฃn hแปi riรชng lแบป khรดng nรชn gรขy ra lแปi cho toร n bแป request.
API Gateway cรณ thแป xแปญ lรฝ cรกc partial failures bแบฑng nhiแปu cรกch, bao gแปm:
Sแปญ dแปฅng dแปฏ liแปu tแปซ yรชu cแบงu trฦฐแปc ฤรณ ฤรฃ ฤฦฐแปฃc lฦฐu trแปฏ trong bแป nhแป ฤแปm.
Trแบฃ lแบกi mรฃ lแปi nแบฟu dแปฏ liแปu quan trแปng ฤรฃ hแบฟt hแบกn.
Cung cแบฅp giรก trแป rแปng.
Dแปฑa trรชn giรก trแป hardware top 10 (giรก trแป phแบงn cแปฉng hร ng ฤแบงu).

7. Strangler
Strangler (Nghแบฝn) lร mแปt mแบซu thiแบฟt kแบฟ phแป biแบฟn giรบp chuyแปn ฤแปi แปฉng dแปฅng ฤฦกn khแปi (monolithic) sang microservices mแปt cรกch tแปซng bฦฐแปc thรดng qua viแปc thay thแบฟ cรกc chแปฉc nฤng cลฉ bแบฑng dแปch vแปฅ mแปi. Khi thร nh phแบงn mแปi ฤรฃ sแบตn sร ng, thร nh phแบงn cลฉ sแบฝ bแป "nghแบฝn" (strangled) vร thร nh phแบงn mแปi sแบฝ ฤฦฐแปฃc ฤฦฐa vร o sแปญ dแปฅng.
Giao diแปn facade, ฤรณng vai trรฒ lร giao diแปn chรญnh giแปฏa hแป thแปng cลฉ (legacy system) vร cรกc แปฉng dแปฅng, hแป thแปng khรกc sแปญ dแปฅng nรณ, lร mแปt trong nhแปฏng thร nh phแบงn quan trแปng nhแบฅt cแปงa mแบซu thiแบฟt kแบฟ Strangler.
Cรกc แปฉng dแปฅng (apps) vร hแป thแปng bรชn ngoร i (external) sแบฝ cรณ thแป xรกc ฤแปnh mรฃ lแบญp trรฌnh liรชn quan ฤแบฟn mแปt chแปฉc nฤng nhแบฅt ฤแปnh, trong khi mรฃ lแบญp trรฌnh cแปงa hแป thแปng lแปch sแปญ (historical system) sแบฝ bแป che giแบฅu bแปi giao diแปn facade. Mแบซu thiแบฟt kแบฟ Strangler giแบฃi quyแบฟt vแบฅn ฤแป nร y bแบฑng cรกch yรชu cแบงu cรกc nhร phรกt triแปn cung cแบฅp giao diแปn facade, cho phรฉp hแป tiแบฟt lแป cรกc dแปch vแปฅ vร chแปฉc nฤng khi chรบng ฤฦฐแปฃc tรกch ra khแปi ฤฦกn khแปi (monolith).
Bแบกn cแบงn hiแปu vแป chแบฅt lฦฐแปฃng vร ฤแป tin cแบญy cแปงa hแป thแปng cแปงa mรฌnh, dรน bแบกn ฤang lร m viแปc vแปi mรฃ lแบญp trรฌnh cลฉ (legacy code), bแบฏt ฤแบงu quรก trรฌnh "strangling" hแป thแปng cลฉ cแปงa bแบกn, hay ฤang chแบกy mแปt แปฉng dแปฅng ฤฦฐแปฃc ฤรณng gรณi trong container (containerized application) mแปi. Khi cรณ bแบฅt kแปณ sแปฑ cแป nร o xแบฃy ra, bแบกn cแบงn biแบฟt cรกch hแป thแปng ฤแบกt ฤแบฟn vแป trรญ ฤรณ vร lรฝ do tแบกi sao theo con ฤฦฐแปng ฤรณ. Trong quรก trรฌnh nร y, bแบกn cแบงn xem xรฉt cรกc vแบฅn ฤแป vแป Security issues (vแบฅn ฤแป bแบฃo mแบญt) ฤแป ฤแบฃm bแบฃo rแบฑng hแป thแปng ฤฦฐแปฃc nรขng cแบฅp vร duy trรฌ mแปt cรกch an toร n.

8. Circuit Breaker Pattern
Circuit breaker (Mแบกch ngแบฏt) lร giแบฃi phรกp cho sแปฑ cแป cแปงa cรกc cuแปc gแปi tแปซ xa hoแบทc treo khรดng trแบฃ lแปi cho ฤแบฟn khi ฤแบกt ฤแบฟn giแปi hแบกn thแปi gian chแป. Nแบฟu bแบกn cรณ nhiแปu ngฦฐแปi gแปi vแปi nhร cung cแบฅp khรดng phแบฃn hแปi, bแบกn cรณ thแป hแบฟt tร i nguyรชn quan trแปng vร ฤiแปu nร y sแบฝ dแบซn ฤแบฟn sแปฑ cแป trรชn nhiแปu hแป thแปng trong cรกc แปฉng dแปฅng.
Vรฌ vแบญy, mแบซu circuit breaker ฤฦฐแปฃc giแปi thiแปu nhแบฑm gรณi cรกc lแปnh ฤแปi vแปi mแปt hร m ฤฦฐแปฃc bแบฃo vแป trong mแปt ฤแปi tฦฐแปฃng circuit breaker, ฤแปi tฦฐแปฃng nร y sแบฝ giรกm sรกt lแปi. Khi sแป lฦฐแปฃng lแปi ฤแบกt ฤแบฟn mแปt mแปฉc ฤแป nhแบฅt ฤแปnh, mแบกch ngแบฏt hoแบกt ฤแปng vร tแบฅt cแบฃ cรกc cuแปc gแปi sau ฤรณ ฤแบฟn circuit breaker kแบฟt quแบฃ trong mแปt lแปi hoแบทc mแปt dแปch vแปฅ khรกc hoแบทc thรดng ฤiแปp mแบทc ฤแปnh, thay vรฌ lแปi gแปi ฤฦฐแปฃc bแบฃo vแป ฤฦฐแปฃc thแปฑc hiแปn.

Cรกc trแบกng thรกi khรกc nhau trong mแบซu circuit breaker:

Closed (ฤรณng): Khi mแปi thแปฉ hoแบกt ฤแปng tแปt theo cรกch thรดng thฦฐแปng, circuit breaker sแบฝ แป trแบกng thรกi ฤรณng.
Open (Mแป): Khi sแป lฦฐแปฃng lแปi trong hแป thแปng vฦฐแปฃt quรก ngฦฐแปกng tแปi ฤa, ฤiแปu nร y dแบซn ฤแบฟn viแปc mแป trแบกng thรกi mแป. ฤiแปu nร y sแบฝ gรขy ra lแปi cho cรกc cuแปc gแปi mร khรดng thแปฑc thi hร m.
Half-Open (Mแป mแปt phแบงn): Sau khi chแบกy hแป thแปng nhiแปu lแบงn, circuit breaker sแบฝ chuyแปn sang trแบกng thรกi mแป mแปt phแบงn ฤแป kiแปm tra vแบฅn ฤแป gแปc cรณ vแบซn tแปn tแบกi hay khรดng.
Dฦฐแปi ฤรขy, chรบng ta sแบฝ cรณ mแปt vรญ dแปฅ vแป mรฃ lแบญp trรฌnh ฤฦฐแปฃc xรขy dแปฑng bแบฑng cรกch sแปญ dแปฅng Netflix Hystrix.
Client application code sแบฝ gแปi hร m studentMethod(), vร nแบฟu call tแปi API /student khรดng nhแบญn ฤฦฐแปฃc bแบฅt kแปณ response nร o trong thแปi gian quy ฤแปnh, thรฌ sแบฝ thแปฑc hiแปn gแปi mแปt phฦฐฦกng thแปฉc dแปฑ phรฒng (fallback) thay thแบฟ. ฤiแปu nร y ฤฦฐแปฃc ฤแป cแบญp trong ฤoแบกn codedฦฐแปi ฤรขy.
Cรณ thแป sแปญ dแปฅng mแบซu circuit breaker ฤแป cแบฃi thiแปn tรญnh chแปu lแปi vร khแบฃ nฤng phแปฅc hแปi cแปงa kiแบฟn trรบc microservices vร ngฤn chแบทn viแปc lan truyแปn lแปi sang cรกc microservice khรกc.
Mแบซu circuit breaker ฤฦฐแปฃc sแปญ dแปฅng ฤแป giแบฃm thiแปu tรกc ฤแปng cแปงa lแปi trong hแป thแปng phรขn tรกn. Khi mแปt microservice gแบทp sแปฑ cแป vร khรดng thแป phแบฃn hแปi, mแบซu circuit breaker sแบฝ ngแบฏt kแบฟt nแปi tแปi microservice ฤรณ vร chuyแปn hฦฐแปng gแปi ฤแบฟn mแปt phฦฐฦกng thแปฉc dแปฑ phรฒng (fallback) thay thแบฟ. Viแปc nร y giรบp trรกnh viแปc tiแบฟp tแปฅc gแปi mแปt microservice khรดng hoแบกt ฤแปng, giแบฃm thiแปu thแปi gian chแป ฤแปฃi vร ngฤn chแบทn viแปc lan truyแปn lแปi ฤแบฟn cรกc microservice khรกc.
Mแบซu circuit breaker cลฉng cung cแบฅp khแบฃ nฤng giรกm sรกt vร ฤiแปu chแปnh lแบกi kแบฟt nแปi tแปi microservice bแป lแปi. Nแบฟu microservice ฤรฃ ฤฦฐแปฃc sแปญa chแปฏa vร hoแบกt ฤแปng lแบกi, circuit breaker cรณ thแป mแป kแบฟt nแปi lแบกi vร cho phรฉp gแปi lแบกi tแปi microservice ฤรณ.
Sแปญ dแปฅng mแบซu circuit breaker giรบp tฤng tรญnh kiรชn ฤแปnh vร khแบฃ nฤng chแปu lแปi cแปงa hแป thแปng microservices vร ngฤn chแบทn lan truyแปn lแปi ฤแบฟn cรกc thร nh phแบงn khรกc.
9. Externalized Configuration
Thรดng thฦฐแปng, cรกc dแปch vแปฅ cแบงn ฤฦฐแปฃc chแบกy trรชn nhiแปu mรดi trฦฐแปng khรกc nhau. ฤแป chแบกy trรชn mแปi mรดi trฦฐแปng, cแบงn phแบฃi cung cแบฅp cแบฅu hรฌnh riรชng cho tแปซng mรดi trฦฐแปng, bao gแปm cรกc khรณa bรญ mแบญt, thรดng tin ฤฤng nhแบญp cฦก sแป dแปฏ liแปu vร nhiแปu hฦกn nแปฏa. Tuy nhiรชn, thay ฤแปi dแปch vแปฅ cho mแปi mรดi trฦฐแปng cรณ nhiแปu hแบกn chแบฟ.
ฤแป giแบฃi quyแบฟt vแบฅn ฤแป nร y, ta cรณ thแป sแปญ dแปฅng mแบซu cแบฅu hรฌnh nhรขn rแปng (Externalized Configuration Pattern). Mแบซu nร y cho phรฉp bรชn ngoร i cรณ thแป ฤแบทt cแบฅu hรฌnh cแปงa แปฉng dแปฅng, bao gแปm thรดng tin ฤฤng nhแบญp cฦก sแป dแปฏ liแปu vร vแป trรญ mแบกng.
Vรญ dแปฅ, Spring Boot framework hแป trแปฃ cแบฅu hรฌnh nhรขn rแปng, cho phรฉp ฤแปc cแบฅu hรฌnh tแปซ nhiแปu nguแปn vร cรณ thแป thay ฤแปi cร i ฤแบทt cแบฅu hรฌnh ฤรฃ xรกc ฤแปnh trฦฐแปc dแปฑa trรชn thแปฉ tแปฑ ฤแปc. Tฦฐฦกng tแปฑ, FastAPI cลฉng hแป trแปฃ tรญnh nฤng cแบฅu hรฌnh nhรขn rแปng tรญch hแปฃp sแบตn.

Hรฃy mแป lแปp ConfigServerApplication vร kรญch hoแบกt discovery client vร configuration server bแบฑng cรกch sแปญ dแปฅng chรบ thรญch sau ฤรขy.
Remove the application.properties file and create a new application.yml file with the following content.
ฤรขy lร mแปt tแปp cแบฅu hรฌnh YAML cho Config Server cแปงa Spring Cloud. Tแปp nร y cแบฅu hรฌnh server ฤแป lแบฏng nghe trรชn cแปng 8001, ฤแบทt tรชn แปฉng dแปฅng lร "config-server", vร thiแบฟt lแบญp URI ฤแป truy cแบญp cรกc tแปp cแบฅu hรฌnh ฤฦฐแปฃc lฦฐu trแปฏ trรชn kho lฦฐu trแปฏ git ("https://github.com/alejandro-du/vaadin-microservices-demo-config.git").
Tแปp cแบฅu hรฌnh cลฉng cแบฅu hรฌnh Eureka Client vร Eureka Instance. Eureka Client ฤฦฐแปฃc sแปญ dแปฅng ฤแป ฤฤng kรฝ vร tรฌm kiแบฟm cรกc dแปch vแปฅ khรกc trong mรดi trฦฐแปng phรขn tรกn. Eureka Instance cแบฅu hรฌnh cรกc thรดng tin liรชn quan ฤแบฟn ฤฤng kรฝ ฤแปi vแปi Config Server.
10. Consumer-Driven Contract Tracing
Khi mแปt nhรณm ฤang xรขy dแปฑng nhiแปu dแปch vแปฅ liรชn quan ฤแปng thแปi trong bแปi cแบฃnh nแป lแปฑc hiแปn ฤแบกi hรณa vร nhรณm cแปงa bแบกn hiแปu "domain language" cแปงa mแปi liรชn hแป rร ng buแปc, nhฦฐng khรดng biแบฟt ฤแบฟn cรกc thuแปc tรญnh riรชng lแบป cแปงa tแปซng tแปng hแปฃp (aggregate) vร payload (dแปฏ liแปu mang theo) cแปงa sแปฑ kiแปn, thรฌ hฦฐแปng tiแบฟp cแบญn hแปฃp ฤแปng dแปฑa trรชn ngฦฐแปi tiรชu dรนng (consumer-driven contracts) cรณ thแป hiแปu quแบฃ. Hฦฐแปng tiแบฟp cแบญn nร y giรบp ฤแบฃm bแบฃo tรญnh แปn ฤแปnh giแปฏa cรกc dแปch vแปฅ bแบฑng cรกch triแปn khai hแปฃp ฤแปng dแปฑa trรชn cรกc yรชu cแบงu cแปงa ngฦฐแปi tiรชu dรนng (cรกc dแปch vแปฅ vแปi vai trรฒ lร consumer). Mแปi dแปch vแปฅ sแบฝ xรกc ฤแปnh cรกc yรชu cแบงu vร giแบฃ ฤแปnh vแป cรกc dแปch vแปฅ khรกc mร chรบng phแปฅ thuแปc vร o, rแปi thรดng qua quรก trรฌnh phรกt triแปn, nhรณm sแบฝ ฤแบฃm bแบฃo rแบฑng cรกc dแปch vแปฅ tuรขn theo hแปฃp ฤแปng ฤรฃ thแปa thuแบญn. Bแบฑng cรกch sแปญ dแปฅng phฦฐฦกng phรกp consumer-driven contracts, bแบกn cรณ thแป tฤng tรญnh linh hoแบกt, giแบฃm cรกc vแบฅn ฤแป phรกt sinh khi thay ฤแปi cรกc dแปch vแปฅ liรชn quan, ฤแปng thแปi thรบc ฤแบฉy sแปฑ tiแบฟp tแปฅc phรกt triแปn cแปงa cรกc dแปch vแปฅ theo ฤรบng "ngรดn ngแปฏ miแปn" trong mแปt mรดi trฦฐแปng phแปฉc tแบกp.

Mแบซu microservice nร y rแบฅt hแปฏu รญch ฤแปi vแปi cรกc แปฉng dแปฅng kแบฟ thแปซa (legacy) cรณ dแปฏ liแปu lแปn vร kรญch thฦฐแปc dแปch vแปฅ hiแปn trแบกng. Mแบซu thiแบฟt kแบฟ nร y giแบฃi quyแบฟt cรกc vแบฅn ฤแป sau:
Lร m thแบฟ nร o ฤแป bแป sung vร o API mร khรดng lร m hแปng cรกc client (khรกch hร ng) hแบก stream.
Cรกch tรฌm ra ai ฤang sแปญ dแปฅng dแปch vแปฅ cแปงa hแป.
Cรกch thแปฑc hiแปn vรฒng ฤแปi phรกt hร nh ngแบฏn vแปi tแปซng bฦฐแปc giao hร ng liรชn tแปฅc.
Trong kiแบฟn trรบc dแปฑa trรชn sแปฑ kiแปn (event-driven architecture), nhiแปu microservices tiแบฟt lแป hai loแบกi API:
API RESTful dแปฑa trรชn HTTP
API dแปฑa trรชn HTTP vร thรดng ฤiแปp (message-based API)
API RESTful cho phรฉp tรญch hแปฃp ฤแปng bแป vแปi cรกc dแปch vแปฅ nร y cลฉng nhฦฐ khแบฃ nฤng truy vแบฅn mแบกnh mแบฝ cho cรกc dแปch vแปฅ ฤรฃ nhแบญn sแปฑ kiแปn tแปซ mแปt dแปch vแปฅ khรกc.
Tรณm lแบกi, mแปt cรกch tiแบฟp cแบญn theo ngฦฐแปi dรนng (consumer-driven) ฤรดi khi ฤฦฐแปฃc sแปญ dแปฅng khi phรขn rรฃ mแปt แปฉng dแปฅng ฤฦกn khแปi (monolithic legacy application). Viแปc sแปญ dแปฅng phฦฐฦกng phรกp nร y giรบp tฤng tรญnh linh hoแบกt, quแบฃn lรฝ API mแปt cรกch hiแปu quแบฃ hฦกn, tรฌm ra ai sแปญ dแปฅng dแปch vแปฅ vร thรบc ฤแบฉy continuous delivery process.
Last updated