{"id":841,"date":"2021-07-04T03:27:51","date_gmt":"2021-07-04T03:27:51","guid":{"rendered":"https:\/\/egany.com\/blogs\/?p=841"},"modified":"2021-08-29T14:40:14","modified_gmt":"2021-08-29T14:40:14","slug":"microsevices-2-trien-khai-microservices-tinh-gon-de-bat-dau-de-dang-hon","status":"publish","type":"post","link":"https:\/\/egany.com\/blogs\/microsevices-2-trien-khai-microservices-tinh-gon-de-bat-dau-de-dang-hon\/","title":{"rendered":"Microsevices #2 &#8211; Tri\u1ec3n khai microservices &#8220;tinh g\u1ecdn&#8221; \u0111\u1ec3 b\u1eaft \u0111\u1ea7u d\u1ec5 d\u00e0ng h\u01a1n"},"content":{"rendered":"<p>Ch\u00e0o m\u1ecdi ng\u01b0\u1eddi \ud83d\udc4b, ti\u1ebfp n\u1ed1i ph\u1ea7n tr\u01b0\u1edbc &#8211; <a href=\"https:\/\/egany.com\/blogs\/microsevices-1-su-lua-chon\">Microsevices #1 \u2013 S\u1ef1 l\u1ef1a ch\u1ecdn<\/a>, trong b\u00e0i vi\u1ebft n\u00e0y m\u00ecnh xin chia s\u1ebb v\u1ec1 vi\u1ec7c <a href=\"#\">Tri\u1ec3n khai microservices &quot;tinh g\u1ecdn&quot; \u0111\u1ec3 b\u1eaft \u0111\u1ea7u d\u1ec5 d\u00e0ng h\u01a1n<\/a>, b\u00e0i chia s\u1ebb d\u1ef1a tr\u00ean g\u00f3c nh\u00ecn c\u00e1 nh\u00e2n mong nh\u1eadn \u0111\u01b0\u1ee3c s\u1ef1 \u0111\u00f3n nh\u1eadn c\u1ee7a c\u00e1c b\u1ea1n.<br \/>\nTr\u01b0\u1edbc ti\u00ean, m\u00ecnh mu\u1ed1n n\u00f3i r\u1eb1ng b\u00e0i n\u00e0y kh\u00f4ng ph\u00f9 h\u1ee3p l\u1eafm v\u1edbi ng\u01b0\u1eddi \u0111\u00e3 c\u00f3 kinh nghi\u1ec7m m\u00e0 s\u1ebd ph\u00f9 h\u1ee3p cho ng\u01b0\u1eddi m\u1edbi ho\u1eb7c team m\u1edbi ti\u1ebfp c\u1eadn microservices nh\u01b0 m\u00ecnh tr\u01b0\u1edbc \u0111\u00e2y. Nh\u1eefng ng\u01b0\u1eddi v\u1eeba ph\u1ea3i ti\u1ebfp c\u1eadn h\u00e0ng tr\u0103m thu\u1eadt ng\u1eef v\u00e0 ki\u1ebfn th\u1ee9c m\u1edbi, v\u1eeba ph\u1ea3i t\u00ecm hi\u1ec3u t\u1eebng c\u00e1i m\u1ed9t \u0111\u1ec3 xem \u1ee9ng d\u1ee5ng n\u00f3 nh\u01b0 th\u1ebf n\u00e0o \u1edf &quot;v\u0169 tr\u1ee5 microservice&quot; n\u00e0y.<\/p>\n<p>K\u1ebf ti\u1ebfp, m\u00ecnh s\u1ebd chia s\u1ebb c\u00e1c t\u1eeb kh\u00f3a ho\u1eb7c c\u00f4ng ngh\u1ec7 m\u00ecnh \u0111\u00e3 d\u00f9ng. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n b\u1edbt &quot;g\u00e1nh n\u1eb7ng&quot; h\u01a1n, bi\u1ebft c\u00e1i n\u00e0o n\u00ean \u00f4m v\u00e0o l\u00e0m, c\u00e1i n\u00e0o n\u00ean x\u00e0i h\u00e0ng c\u00f3 s\u1eb5n. M\u1ee5c ti\u00eau l\u00e0 s\u1edbm d\u1ef1ng \u0111\u01b0\u1ee3c h\u1ec7 th\u1ed1ng ch\u1ea1y microservices \u0111\u00e0ng ho\u00e0ng nh\u01b0ng v\u1eabn tinh g\u1ecdn v\u00e0 ti\u1ebft ki\u1ec7m \u0111\u01b0\u1ee3c nhi\u1ec1u c\u00f4ng s\u1ee9c.<\/p>\n<p>\u0110\u1ec3 x\u00e2y d\u1ef1ng microservices, \u0111\u00fang l\u00e0 c\u00f3 qu\u00e1 nhi\u1ec1u v\u1ea5n \u0111\u1ec1 c\u1ea7n quan t\u00e2m. Ch\u01b0a h\u1ebft, b\u1ea1n c\u00f2n ph\u1ea3i \u0111\u1ecdc h\u1eb1ng h\u00e0 sa s\u1ed1 ki\u1ebfn th\u1ee9c (h\u00e0n l\u00e2m, cao si\u00eau) t\u1eeb nh\u1eefng ng\u01b0\u1eddi \u0111i tr\u01b0\u1edbc. C\u00e1i n\u00e0o th\u1ea5y c\u0169ng hay, r\u1ed3i c\u1eafm \u0111\u1ea7u v\u00e0o l\u00e0m cho b\u1eb1ng h\u1ebft r\u1ed3i.. ch\u00ecm lu\u00f4n.<\/p>\n<blockquote>\n<p>N\u1ebfu b\u00ecnh t\u0129nh l\u1ea1i \u0111\u1ec3 ph\u00e2n t\u00edch: n\u0103ng l\u1ef1c v\u00e0 ki\u1ebfn th\u1ee9c hi\u1ec7n t\u1ea1i c\u1ee7a m\u00ecnh, nh\u1eefng ngu\u1ed3n l\u1ef1c m\u00ecnh \u0111ang c\u00f3 v\u00e0 t\u1ed5 ch\u1ee9c m\u00ecnh \u0111ang th\u1ef1c s\u1ef1 c\u1ea7n g\u00ec. B\u1ea1n s\u1ebd b\u1edbt b\u1ecb &quot;sa l\u1ea7y&quot; h\u01a1n \u0111\u1ea5y, tin m\u00ecnh \u0111i.<\/p>\n<\/blockquote>\n<p>C\u00e1c v\u1ea5n \u0111\u1ec1 c\u1ea7n gi\u1ea3i quy\u1ebft v\u1eeba n\u00eau tr\u00ean khi l\u00e0m Microservices g\u1ed3m:<\/p>\n<ul>\n<li>Decomposition<\/li>\n<li>Data management<\/li>\n<li>Testing<\/li>\n<li>Deployment<\/li>\n<li>Communication<\/li>\n<li>Security<\/li>\n<li>Observability<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>L\u01b0\u1ee3c \u0111\u1ed3 d\u01b0\u1edbi \u0111\u00e2y s\u1ebd cung c\u1ea5p cho b\u1ea1n c\u00e1i nh\u00ecn t\u1ed5ng quan<br \/>\n<img decoding=\"async\" src=\"https:\/\/microservices.io\/i\/MicroservicePatternLanguage.jpg\" alt=\"MicroservicePatternLanguage\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/microservices.io\/patterns\/index.html\" rel=\"nofollow noopener\" target=\"_blank\">microservices.io<\/a><\/em><br \/>\nChi ti\u1ebft xem t\u1ea1i <a href=\"https:\/\/microservices.io\/patterns\/index.html\" rel=\"nofollow noopener\" target=\"_blank\">microservices.io &#8211; patterns<\/a><\/p>\n<p>Ch\u00fang ta c\u00f3 th\u1ec3 th\u1ea5y c\u00f3 r\u1ea5t nhi\u1ec1u th\u1ee9 c\u1ea7n \u0111\u01b0\u1ee3c tri\u1ec3n khai, nh\u01b0ng trong giai \u0111o\u1ea1n \u0111\u1ea7u c\u00f3 nh\u1eefng th\u1ee9 l\u00e0 ch\u01b0a th\u1eadt s\u1ef1 c\u1ea7n thi\u1ebft (th\u1ef1c ra c\u00f3 khi c\u0169ng kh\u00f4ng l\u00e0m t\u1ed1t h\u1ebft \u0111\u01b0\u1ee3c). <\/p>\n<p>V\u00ec v\u1eady d\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng g\u00ec m\u00ecnh s\u1ebd tri\u1ec3n khai cho EGANY 2.0 sau khi \u0111\u00e3 c\u00f3 nguy\u00ean r\u1ed5 h\u00e0nh \u1edf l\u1ea7n \u0111\u1ea7u ti\u00ean \ud83e\udd2a. Xin l\u01b0u \u00fd, v\u00ec NodeJS \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng ch\u00ednh trong c\u00e1c d\u1ef1 \u00e1n c\u1ee7a EGANY, do \u0111\u00f3 nh\u1eefng n\u1ed9i dung d\u01b0\u1edbi \u0111\u00e2y s\u1ebd thi\u00ean v\u1ec1 NodeJS h\u01a1n, n\u00e0o b\u1eaft \u0111\u1ea7u th\u00f4i.<\/p>\n<h2>1. Core<\/h2>\n<p>Core l\u00e0 nh\u1eefng th\u00e0nh ph\u1ea7n c\u1ed1t l\u00f5i \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng, n\u00f3 l\u00e0 b\u1ea5t k\u1ef3 th\u1ee9 g\u00ec nh\u01b0 framework, n\u1ec1n t\u1ea3ng, ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh.. , \u1edf \u0111\u00e2y m\u00ecnh s\u1ebd b\u00e0n Framework.<\/p>\n<h3>Framework<\/h3>\n<p>Thay v\u00ec vi\u1ec7c t\u1ef1 tri\u1ec3n khai c\u00e1c module \u0111\u1ec3 tri\u1ec3n khai microservices nh\u01b0 c\u00e1c module d\u00f9ng \u0111\u1ec3 giao ti\u1ebfp (communication), logger, tracking, service discovery&#8230; Th\u00ec vi\u1ec7c l\u1ef1a ch\u1ecdn m\u1ed9t framework chuy\u00ean d\u1ee5ng l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn kh\u00f4ng h\u1ec1 t\u1ed3i, vi\u1ec7c c\u00f2n l\u1ea1i l\u00e0 t\u1eadp trung ph\u00e1t tri\u1ec3n nghi\u1ec7p v\u1ee5 ch\u00ednh. \u1ede \u0111\u00e2y m\u00ecnh \u0111\u00e3 ch\u1ecdn <a href=\"https:\/\/moleculer.services\/\" rel=\"nofollow noopener\" target=\"_blank\">moleculer.service<\/a>, m\u1ed9t framework d\u00e0nh cho NodeJS c\u00f3 g\u1ea7n nh\u01b0 l\u00e0 \u0111\u1ee7 c\u00e1c module \u0111\u1ec3 ph\u00e1t tri\u1ec3n microservices m\u1ed9t c\u00e1ch nhanh ch\u00f3ng. Ok, gi\u1edd \u0111\u00e3 x\u00e1c \u0111\u1ecbnh nh\u1eefng th\u00e0nh ph\u1ea7n c\u1ee7a core, gi\u1edd xem ta c\u1ea7n nh\u1eefng g\u00ec ti\u1ebfp theo.<\/p>\n<h2>2. API Gateway<\/h2>\n<p>\u0110\u00e2y c\u0169ng l\u00e0 service kh\u00e1 th\u00f4ng d\u1ee5ng trong microservices v\u00ec v\u1eady c\u00f3 d\u1ecbch v\u1ee5 tr\u1ea3 ph\u00ed, c\u0169ng nh\u01b0 project m\u00e3 ngu\u1ed3n m\u1edf. \u1ede \u0111\u00e2y \u0111\u1ec3 ti\u1ebft ki\u1ec7m chi ph\u00ed v\u00e0 n\u1ebfu \u0111\u00f3 l\u00e0 nh\u1eefng g\u00ec b\u1ea1n quan t\u00e2m th\u00ec vi\u1ec7c \u01b0u ti\u00ean t\u00ecm ki\u1ebfm c\u00e1c project m\u00e3 ngu\u1ed3n m\u1edf, uy t\u00edn v\u00e0 ch\u1ea5t l\u01b0\u1ee3ng s\u1ebd l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn \u1ed5n.<br \/>\nTrong tr\u01b0\u1eddng h\u1ee3p <a href=\"https:\/\/moleculer.services\/\" rel=\"nofollow noopener\" target=\"_blank\">moleculer.service<\/a> c\u0169ng c\u00f3 h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng API Gateway th\u00f4ng qua <a href=\"https:\/\/moleculer.services\/docs\/0.14\/moleculer-web.html\" rel=\"nofollow noopener\" target=\"_blank\">moleculer web<\/a>, v\u00ec v\u1eady vi\u1ec7c d\u00f9ng chung m\u1ed9t stack c\u1ee7a moleculer \u0111\u1ec3 t\u1eadn d\u1ee5ng c\u00e1c t\u00ednh n\u0103ng m\u00e0 n\u00f3 cung c\u1ea5p th\u00ec c\u00f2n g\u00ec b\u1eb1ng \ud83d\udc4f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.wp.nginx.com\/wp-content\/uploads\/2016\/04\/Richardson-microservices-part2-3_api-gateway.png\" alt=\"Richardson-microservices-part2-3_api-gateway.png\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/www.nginx.com\/blog\/building-microservices-using-an-api-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">nginx.com<\/a><\/em><\/p>\n<h2>3. Auth Service<\/h2>\n<p>N\u1ebfu y\u00eau c\u1ea7u v\u1ec1 b\u1ea3o m\u1eadt ch\u01b0a c\u1ea7n n\u00e2ng cao th\u00ec ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 l\u1ef1a ch\u1ecdn t\u1ef1 tri\u1ec3n khai m\u1ed9t auth service \u0111\u01a1n gi\u1ea3n v\u1edbi access token. M\u1ed9t v\u1ea5n \u0111\u1ec1 trong security l\u00e0 vi\u1ec7c auth gi\u1eefa c\u00e1c service v\u1edbi nhau, tuy nhi\u00ean n\u1ebfu trong tr\u01b0\u1eddng h\u1ee3p kh\u00f4ng c\u1ea7n thi\u1ebft th\u00ec b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ec3 sau.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.ctfassets.net\/cdy7uua7fh8z\/2nbNztohyR7uMcZmnUt0VU\/2c017d2a2a2cdd80f097554d33ff72dd\/auth-sequence-auth-code.png\" alt=\"auth-sequence-auth-code.png\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/auth0.com\/docs\/flows\/authorization-code-flow\" rel=\"nofollow noopener\" target=\"_blank\">auth0.com<\/a><\/em><\/p>\n<h2>4. Service Communication<\/h2>\n<p>\u1ede \u0111\u00e2y ta c\u00f3 th\u1ec3 c\u00f3 hai c\u00e1ch giao ti\u1ebfp ch\u00ednh l\u00e0 <a href=\"https:\/\/microservices.io\/patterns\/communication-style\/rpi.html\" rel=\"nofollow noopener\" target=\"_blank\">Remote Procedure Invocation<\/a> v\u00e0 <a href=\"https:\/\/microservices.io\/patterns\/communication-style\/messaging.html\" rel=\"nofollow noopener\" target=\"_blank\">Messaging<\/a>. Khi s\u1eed d\u1ee5ng framework th\u01b0\u1eddng s\u1ebd c\u00f3 transporter \u0111\u1ea3m nh\u1eadn vi\u1ec7c giao ti\u1ebfp gi\u1eefa c\u00e1c service v\u1edbi nhau.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/architecture\/microservices\/architect-microservice-container-applications\/media\/communication-in-microservice-architecture\/sync-vs-async-patterns-across-microservices.png\" alt=\"sync-vs-async-patterns-across-microservices.png\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/architecture\/microservices\/architect-microservice-container-applications\/communication-in-microservice-architecture\" rel=\"nofollow noopener\" target=\"_blank\">docs.microsoft.com<\/a><\/em><\/p>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p moleculer th\u00ec ch\u1ec9 c\u1ea7n c\u1ea5u h\u00ecnh lo\u1ea1i transporter mong mu\u1ed1n v\u00e0 sau \u0111\u1ea5y m\u1ecdi th\u1ee9 s\u1ebd ho\u1ea1t \u0111\u1ed9ng ^^. Chia s\u1ebb th\u00eam m\u00ecnh d\u00f9ng <a href=\"https:\/\/nats.io\/\" rel=\"nofollow noopener\" target=\"_blank\">NATS<\/a> cho transporter v\u00ec vi\u1ec7c c\u1ea5u h\u00ecnh ch\u1ea1y \u1edf ch\u1ebf \u0111\u1ed9 cluster r\u1ea5t \u0111\u01a1n gi\u1ea3n.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/moleculer.services\/docs\/0.14\/assets\/networking.svg\" alt=\"networking.svg\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/moleculer.services\/docs\/0.14\/networking.html#Transporters\" rel=\"nofollow noopener\" target=\"_blank\">moleculer.services<\/a><\/em><\/p>\n<h2>5. Data Management<\/h2>\n<p>Data l\u00e0 m\u1ed9t ph\u1ea7n kh\u00f4ng th\u1ec3 thi\u1ebfu trong h\u1ea7u nh\u01b0 m\u1ecdi \u1ee9ng d\u1ee5ng, \u0111\u1ed1i v\u1edbi microservices s\u1ebd c\u00f3 c\u00e1c chi\u1ebfn l\u01b0\u1ee3c tri\u1ec3n khai database ri\u00eang \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o hi\u1ec7u qu\u1ea3 n\u00f3. C\u00f3 nh\u1eefng h\u01b0\u1edbng tri\u1ec3n nh\u01b0 <a href=\"https:\/\/microservices.io\/patterns\/data\/cqrs.html\" rel=\"nofollow noopener\" target=\"_blank\">CQRS<\/a>, <a href=\"https:\/\/microservices.io\/patterns\/data\/shared-database.html\" rel=\"nofollow noopener\" target=\"_blank\">Shared database<\/a>, nh\u01b0ng v\u1edbi c\u00e1c d\u1ef1 \u00e1n th\u00f4ng th\u01b0\u1eddng \u00edt khi tri\u1ec3n khai. V\u00ec v\u1eady h\u00e3y ti\u1ebfp c\u1eadn nh\u1eefng th\u1ee9 g\u1ea7n g\u0169i h\u01a1n nh\u01b0 <a href=\"https:\/\/microservices.io\/patterns\/data\/database-per-service.html\" rel=\"nofollow noopener\" target=\"_blank\">Database per Service<\/a>, <a href=\"https:\/\/microservices.io\/patterns\/data\/domain-event.html\" rel=\"nofollow noopener\" target=\"_blank\">Domain event<\/a>,  v\u00e0 <a href=\"https:\/\/microservices.io\/patterns\/data\/api-composition.html\" rel=\"nofollow noopener\" target=\"_blank\">API Composition<\/a>.<\/p>\n<h2>6. Docker<\/h2>\n<p>V\u1edbi <a href=\"https:\/\/docs.docker.com\" rel=\"nofollow noopener\" target=\"_blank\">docker<\/a> ta c\u00f3 <a href=\"https:\/\/docs.docker.com\/engine\/\" rel=\"nofollow noopener\" target=\"_blank\">docker engine<\/a> v\u00e0 <a href=\"https:\/\/hub.docker.com\/\" rel=\"nofollow noopener\" target=\"_blank\">docker hub<\/a> \u0111\u01a1n gi\u1ea3n \u0111\u1ec3 t\u00ecm hi\u1ec3u, s\u1eed d\u1ee5ng, mi\u1ec5n ph\u00ed, h\u1ed7 tr\u1ee3 \u0111\u1ea7y \u0111\u1ee7 \u0111\u1ec3 deploy v\u00e0 qu\u1ea3n l\u00fd service.<br \/>\nNgo\u00e0i ra n\u1ebfu b\u1ea1n mu\u1ed1n c\u00f3 giao di\u1ec7n \u0111\u1ec3 xem tr\u1ef1c quan c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng th\u00eam <a href=\"https:\/\/www.portainer.io\/\" rel=\"nofollow noopener\" target=\"_blank\">portainer<\/a><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/docs.docker.com\/engine\/images\/architecture.svg\" alt=\"architecture.svg\" \/><br \/>\n<em>H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c tr\u00edch t\u1eeb <a href=\"https:\/\/docs.docker.com\/get-started\/overview\/\" rel=\"nofollow noopener\" target=\"_blank\">docs.docker.com<\/a><\/em><\/p>\n<p>Tr\u00ean \u0111\u00e2y l\u00e0 nh\u1eefng th\u00e0nh ph\u1ea7n c\u01a1 b\u1ea3n nh\u1ea5t \u0111\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 b\u1eaft \u0111\u1ea7u tri\u1ec3n khai microservices. C\u00f2n l\u1ea1i l\u00e0 vi\u1ec7c ph\u00e1t tri\u1ec3n c\u00e1c service kh\u00e1c ph\u1ee5c v\u1ee5 cho nhu c\u1ea7u s\u1ea3n ph\u1ea9m c\u1ee7a b\u1ea1n.<\/p>\n<p>T\u1edbi \u0111\u00e2y \u0111\u00e3 \u0111\u1ee7 \u0111\u1ed3 ch\u01a1i r\u1ed3i \u0111\u00f3 anh em, hy v\u1ecdng b\u00e0i n\u00e0y gi\u00fap cho m\u1ecdi ng\u01b0\u1eddi c\u00f3 th\u00eam th\u00f4ng tin gi\u00e1 tr\u1ecb v\u00e0 m\u1ed9t g\u00f3c nh\u00ecn kh\u00e1c v\u1ec1 vi\u1ec7c tri\u1ec3n khai microservice. B\u1eaft tay v\u00e0o l\u00e0m th\u00f4i..<\/p>\n<blockquote>\n<p>Ch\u01b0a b\u1eaft \u0111\u1ea7u l\u00e0m th\u00ec sao bi\u1ebft l\u00e0 kh\u00f4ng \u0111\u01b0\u1ee3c \ud83d\ude09<\/p>\n<\/blockquote>\n<p>C\u1ea3m \u01a1n m\u1ecdi ng\u01b0\u1eddi \u0111\u00e3 ch\u1ecbu kh\u00f3 \u0111\u1ecdc t\u1edbi \u0111\u00e2y!<\/p>\n<h2>Tham kh\u1ea3o<\/h2>\n<p>N\u1ed9i dung b\u00e0i vi\u1ebft c\u00f3 tham kh\u1ea3o, s\u1eed d\u1ee5ng h\u00ecnh \u1ea3nh, n\u1ed9i dung t\u1eeb c\u00e1c ngu\u1ed3n sau:<\/p>\n<ul>\n<li><a href=\"https:\/\/microservices.io\/\" rel=\"nofollow noopener\" target=\"_blank\">microservices.io<\/a><\/li>\n<li><a href=\"https:\/\/moleculer.services\/\" rel=\"nofollow noopener\" target=\"_blank\">moleculer service<\/a><\/li>\n<li><a href=\"https:\/\/www.nginx.com\/blog\/building-microservices-using-an-api-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">nginx.com<\/a><\/li>\n<li><a href=\"https:\/\/auth0.com\/docs\/flows\/authorization-code-flow\" rel=\"nofollow noopener\" target=\"_blank\">auth0.com<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/architecture\/microservices\/architect-microservice-container-applications\/communication-in-microservice-architecture\" rel=\"nofollow noopener\" target=\"_blank\">docs.microsoft.com<\/a><\/li>\n<li><a href=\"https:\/\/docs.docker.com\/get-started\/overview\/\" rel=\"nofollow noopener\" target=\"_blank\">docs.docker.com<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ch\u00e0o m\u1ecdi ng\u01b0\u1eddi \ud83d\udc4b, ti\u1ebfp n\u1ed1i ph\u1ea7n tr\u01b0\u1edbc &#8211; Microsevices #1 \u2013 S\u1ef1 l\u1ef1a ch\u1ecdn, trong b\u00e0i vi\u1ebft n\u00e0y m\u00ecnh xin chia s\u1ebb v\u1ec1 vi\u1ec7c Tri\u1ec3n khai microservices &quot;tinh g\u1ecdn&quot; \u0111\u1ec3 b\u1eaft \u0111\u1ea7u d\u1ec5 d\u00e0ng h\u01a1n, b\u00e0i chia s\u1ebb d\u1ef1a tr\u00ean g\u00f3c nh\u00ecn c\u00e1 nh\u00e2n mong nh\u1eadn \u0111\u01b0\u1ee3c s\u1ef1 \u0111\u00f3n nh\u1eadn c\u1ee7a c\u00e1c b\u1ea1n. Tr\u01b0\u1edbc ti\u00ean, m\u00ecnh mu\u1ed1n n\u00f3i r\u1eb1ng b\u00e0i n\u00e0y kh\u00f4ng ph\u00f9 h\u1ee3p l\u1eafm v\u1edbi ng\u01b0\u1eddi \u0111\u00e3 c\u00f3 kinh nghi\u1ec7m m\u00e0 s\u1ebd ph\u00f9 h\u1ee3p cho ng\u01b0\u1eddi m\u1edbi ho\u1eb7c team m\u1edbi ti\u1ebfp c\u1eadn microservices nh\u01b0 m\u00ecnh tr\u01b0\u1edbc \u0111\u00e2y. Nh\u1eefng ng\u01b0\u1eddi v\u1eeba ph\u1ea3i ti\u1ebfp c\u1eadn h\u00e0ng tr\u0103m thu\u1eadt ng\u1eef v\u00e0<\/p>\n","protected":false},"author":4,"featured_media":870,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27],"tags":[80,81,53,84,49,73,79,82,43,83],"_links":{"self":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts\/841"}],"collection":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/comments?post=841"}],"version-history":[{"count":0,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts\/841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/media\/870"}],"wp:attachment":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/media?parent=841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/categories?post=841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/tags?post=841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}