๐Ÿ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.

  1. Dแป… quan sรกt - MSA cho phรฉp theo dรตi cรกc dแป‹ch vแปฅ dแป… dร ng hฦกn.

  2. 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แปฅ.

  3. 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.

  4. 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 ฤ‘รณ:

  1. Khแบฃ nฤƒng mแปŸ rแป™ng

  2. Linh hoแบกt

  3. ฤแป™c lแบญp vร  tแปฑ chแปง

  4. Quแบฃn lรฝ phรขn tรกn

  5. Khแบฃ nฤƒng phแปฅc hแป“i

  6. Cรด lแบญp cรกc lแป—i

  7. 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.

  1. Cฦก sแปŸ dแปฏ liแป‡u cho mแป—i dแป‹ch vแปฅ

  2. 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:

  1. Viแป‡c giแปฏ nguyรชn data storage hiแป‡n cรณ rแบฅt quan trแปng.

  2. Khรดng nรชn cรณ thay ฤ‘แป•i nร o ฤ‘แป‘i vแป›i codebase cแปงa data layer hiแป‡n cรณ.

  3. 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 ฤ‘แป:

  1. Nguy cฦก xung ฤ‘แป™t dแปฏ liแป‡u

  2. 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.

  1. ฤแป™ 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.

  2. Cung cแบฅp nhiแปu chแบฟ ฤ‘แป™ xem cho mแปฅc ฤ‘รญch truy vแบฅn.

  3. 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:

  1. Biรชn ฤ‘แบกo (Choreography)

  2. 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:

  1. 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.

  2. 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แป™.

  3. 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.

Circuit Breaker in NGINX

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

Circuit Breaker Pattern
  • 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:

  1. 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.

  2. Cรกch tรฌm ra ai ฤ‘ang sแปญ dแปฅng dแป‹ch vแปฅ cแปงa hแป.

  3. 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:

  1. API RESTful dแปฑa trรชn HTTP

  2. 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