{"id":520,"date":"2018-08-31T09:18:05","date_gmt":"2018-08-31T09:18:05","guid":{"rendered":"http:\/\/www.asianux.org.vn\/?p=520"},"modified":"2018-08-31T09:18:05","modified_gmt":"2018-08-31T09:18:05","slug":"mo-hinh-web-pho-bien","status":"publish","type":"post","link":"https:\/\/www.asianux.org.vn\/index.php\/2018\/08\/31\/mo-hinh-web-pho-bien\/","title":{"rendered":"M\u00f4 h\u00ecnh web ph\u1ed5 bi\u1ebfn."},"content":{"rendered":"<h2 id=\"_gioi-thieu-0\">Gi\u1edbi thi\u1ec7u<\/h2>\n<p>Khi quy\u1ebft \u0111\u1ecbnh xem n\u00ean s\u1eed d\u1ee5ng ki\u1ebfn tr\u00fac server n\u00e0o cho \u1ee9ng d\u1ee5ng Web c\u1ee7a b\u1ea1n, c\u00f3 r\u1ea5t nhi\u1ec1u y\u1ebfu t\u1ed1 c\u1ea7n ph\u1ea3i c\u00e2n nh\u1eafc, v\u00ed d\u1ee5 nh\u01b0 hi\u1ec7u n\u0103ng, kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng, t\u00ednh kh\u1ea3 d\u1ee5ng, \u0111\u1ed9 tin c\u1eady, chi ph\u00ed v\u00e0 d\u1ec5 qu\u1ea3n l\u00fd.<\/p>\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 danh s\u00e1ch m\u1ed9t s\u1ed1 ki\u1ebfn tr\u00fac server \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng ph\u1ed5 bi\u1ebfn, v\u1edbi nh\u1eefng m\u00f4 t\u1ea3 ng\u1eafn g\u1ecdn v\u1ec1 m\u1ed7i lo\u1ea1i, bao g\u1ed3m \u01b0u v\u00e0 nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a ch\u00fang. H\u00e3y nh\u1edb r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c kh\u00e1i ni\u1ec7m \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp sau \u0111\u00e2y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u00e1c k\u1ebft h\u1ee3p kh\u00e1c nhau, v\u00e0 m\u1ed7i m\u00f4i tr\u01b0\u1eddng l\u1ea1i \u0111\u00f2i h\u1ecfi nh\u1eefng y\u00eau c\u1ea7u kh\u00e1c nhau.<\/p>\n<h2 id=\"_1-tat-ca-trong-mot-1\">1. T\u1ea5t c\u1ea3 trong m\u1ed9t<\/h2>\n<p>To\u00e0n b\u1ed9 m\u00f4i tr\u01b0\u1eddng \u0111\u1ec1u n\u1eb1m h\u1ebft tr\u00ean m\u1ed9t server duy nh\u1ea5t. \u0110\u1ed1i v\u1edbi m\u1ed9t \u1ee9ng d\u1ee5ng web th\u00f4ng th\u01b0\u1eddng, s\u1ebd bao g\u1ed3m web server, application server v\u00e0 database server. M\u1ed9t v\u00ed d\u1ee5 c\u1ee7a c\u00e1ch thi\u1ebft l\u1eadp n\u00e0y \u0111\u00f3 l\u00e0 LAMP stack, vi\u1ebft t\u1eaft c\u1ee7a Linux, Apache, MySQL v\u00e0 PHP, \u0111\u1ec1u n\u1eb1m tr\u00ean m\u1ed9t server duy nh\u1ea5t.<\/p>\n<p><strong>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng:<\/strong>\u00a0T\u1ed1t cho vi\u1ec7c thi\u1ebft l\u1eadp m\u1ed9t \u1ee9ng d\u1ee5ng nhanh ch\u00f3ng, b\u1edfi v\u00ec \u0111\u00e2y l\u00e0 thi\u1ebft l\u1eadp \u0111\u01a1n gi\u1ea3n nh\u1ea5t c\u00f3 th\u1ec3<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/aa98029c-89a8-421e-b768-a9702464c612.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/aa98029c-89a8-421e-b768-a9702464c612.png\" title=\"\"><\/p>\n<p><strong>\u01afu \u0111i\u1ec3m:<\/strong>\u00a0\u0110\u01a1n gi\u1ea3n<\/p>\n<p><strong>Nh\u01b0\u1ee3c \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>\u1ee8ng d\u1ee5ng v\u00e0 database s\u1eed d\u1ee5ng tranh ch\u1ea5p t\u00e0i nguy\u00ean server (CPU, Memory, I\/O,&#8230;), do \u0111\u00f3 b\u00ean c\u1ea1nh vi\u1ec7c g\u00e2y ra gi\u1ea3m hi\u1ec7u n\u0103ng c\u1ee7a h\u1ec7 th\u1ed1ng, n\u00f3 c\u00f2n c\u00f3 th\u1ec3 g\u00e2y kh\u00f3 kh\u0103n trong vi\u1ec7c x\u00e1c \u0111\u1ecbnh th\u00e0nh ph\u1ea7n n\u00e0o g\u00e2y ra \u0111i\u1ec1u \u0111\u00f3.<\/li>\n<li>Kh\u00f4ng d\u1ec5 d\u00e0ng m\u1edf r\u1ed9ng \u1ee9ng d\u1ee5ng theo chi\u1ec1u ngang<\/li>\n<\/ul>\n<h2 id=\"_2-tach-rieng-database-server-2\">2. T\u00e1ch ri\u00eang Database Server<\/h2>\n<p>C\u00e1ch thi\u1ebft l\u1eadp n\u00e0y s\u1ebd t\u00e1ch ri\u00eang h\u1ec7 th\u1ed1ng database v\u1edbi nh\u1eefng ph\u1ea7n c\u00f2n l\u1ea1i \u0111\u1ec3 lo\u1ea1i b\u1ecf vi\u1ec7c tranh ch\u1ea5p t\u00e0i nguy\u00ean gi\u1eefa \u1ee9ng d\u1ee5ng v\u00e0 database, \u0111\u1ed3ng th\u1eddi t\u0103ng t\u00ednh b\u1ea3o m\u1eadt b\u1eb1ng c\u00e1ch gi\u1ea5u database kh\u1ecfi DMZ hay public internet.<\/p>\n<p><strong>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng:<\/strong>\u00a0T\u1ed1t cho vi\u1ec7c thi\u1ebft l\u1eadp m\u1ed9t \u1ee9ng d\u1ee5ng nhanh ch\u00f3ng, tuy nhi\u00ean c\u00f3 th\u1ec3 lo\u1ea1i b\u1ecf \u0111\u01b0\u1ee3c vi\u1ec7c tranh ch\u1ea5p c\u00f9ng t\u00e0i nguy\u00ean h\u1ec7 th\u1ed1ng gi\u1eefa \u1ee9ng d\u1ee5ng v\u1edbi database.<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/a37761c4-0579-4605-89e9-489b5682cc25.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/a37761c4-0579-4605-89e9-489b5682cc25.png\" title=\"\"><\/p>\n<p><strong>\u01afu \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>C\u00e1c t\u1ea7ng \u1ee9ng d\u1ee5ng v\u00e0 database kh\u00f4ng c\u00f2n tranh ch\u1ea5p c\u00f9ng t\u00e0i nguy\u00ean h\u1ec7 th\u1ed1ng n\u1eefa (CPU, Memory, I\/O,&#8230;)<\/li>\n<li>B\u1ea1n c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng theo chi\u1ec1u d\u1ecdc m\u1ed7i t\u1ea7ng ri\u00eang bi\u1ec7t, b\u1eb1ng c\u00e1ch th\u00eam t\u00e0i nguy\u00ean cho server n\u00e0o c\u1ea7n (CPU, Memory)<\/li>\n<li>T\u00f9y thu\u1ed9c v\u00e0o thi\u1ebft l\u1eadp c\u1ee7a b\u1ea1n, n\u00f3 c\u00f3 th\u1ec3 t\u0103ng t\u00ednh b\u1ea3o m\u1eadt b\u1eb1ng c\u00e1ch gi\u1ea5u database c\u1ee7a b\u1ea1n kh\u1ecfi DMZ.<\/li>\n<\/ul>\n<p><strong>Nh\u01b0\u1ee3c \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>Thi\u1ebft l\u1eadp ph\u1ee9c t\u1ea1p h\u01a1n m\u1ed9t ch\u00fat so v\u1edbi c\u00e1ch ch\u1ec9 s\u1eed d\u1ee5ng m\u1ed9t server duy nh\u1ea5t.<\/li>\n<li>C\u00f3 th\u1ec3 ph\u00e1t sinh c\u00e1c v\u1ea5n \u0111\u1ec1 v\u1ec1 hi\u1ec7u n\u0103ng n\u1ebfu k\u1ebft n\u1ed1i m\u1ea1ng gi\u1eefa 2 server c\u00f3 \u0111\u1ed9 tr\u1ec5 cao (do kho\u1ea3ng c\u00e1ch \u0111\u1ecba l\u00fd gi\u1eefa c\u00e1c server) ho\u1eb7c b\u0103ng th\u00f4ng qu\u00e1 th\u1ea5p cho vi\u1ec7c truy\u1ec1n t\u1ea3i d\u1eef li\u1ec7u.<\/li>\n<\/ul>\n<h2 id=\"_3-load-balancer-reverse-proxy-3\">3. Load Balancer (Reverse Proxy)<\/h2>\n<p>Load Balancer (LB) \u0111\u01b0\u1ee3c th\u00eam v\u00e0o h\u1ec7 th\u1ed1ng \u0111\u1ec3 t\u0103ng performance v\u00e0 uptime (l\u00e0 th\u1eddi gian \u0111\u00e1p \u1ee9ng c\u1ee7a h\u1ec7 th\u1ed1ng \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi d\u00f9ng) c\u1ee7a h\u1ec7 th\u1ed1ng b\u1eb1ng c\u00e1ch ph\u00e2n t\u1ea3i ra nhi\u1ec1u server. N\u1ebfu m\u1ed9t server b\u1ecb l\u1ed7i, c\u00e1c server c\u00f2n l\u1ea1i s\u1ebd ph\u00e2n chia nhau ch\u1ecbu t\u1ea3i cho \u0111\u1ebfn khi server kia ho\u1ea1t \u0111\u1ed9ng tr\u1edf l\u1ea1i. N\u00f3 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 cung c\u1ea5p cho nhi\u1ec1u \u1ee9ng d\u1ee5ng th\u00f4ng qua c\u00f9ng m\u1ed9t domain v\u00e0 port, b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u1ed9t reverse proxy layer 7 ( t\u1ea7ng \u1ee9ng d\u1ee5ng)<\/p>\n<p>M\u1ed9t s\u1ed1 ph\u1ea7n m\u1ec1m cung c\u1ea5p kh\u1ea3 n\u0103ng ph\u00e2n t\u1ea3i: HAProxy, Nginx v\u00e0 Varnish,&#8230;<\/p>\n<p><strong>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng:<\/strong>\u00a0Ki\u1ebfn tr\u00fac n\u00e0y h\u1eefu d\u1ee5ng trong nh\u1eefng m\u00f4i tr\u01b0\u1eddng \u0111\u00f2i h\u1ecfi kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng b\u1eb1ng c\u00e1ch th\u00eam nhi\u1ec1u servers, hay c\u00f2n g\u1ecdi l\u00e0 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng theo chi\u1ec1u ngang.<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/dacd57e7-24e5-4eff-91b8-ed918fc18775.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/dacd57e7-24e5-4eff-91b8-ed918fc18775.png\" title=\"\"><\/p>\n<p><strong>\u01afu \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>Cho ph\u00e9p m\u1edf r\u1ed9ng h\u1ec7 th\u1ed1ng theo chi\u1ec1u ngang, b\u1eb1ng c\u00e1ch th\u00eam nhi\u1ec1u servers<\/li>\n<li>C\u00f3 th\u1ec3 b\u1ea3o v\u1ec7 ch\u1ed1ng l\u1ea1i nh\u1eefng t\u1ea5n c\u00f4ng DDOS b\u1eb1ng c\u00e1ch gi\u1edbi h\u1ea1n k\u1ebft n\u1ed1i client v\u1edbi m\u1ed9t s\u1ed1 l\u01b0\u1ee3ng v\u00e0 t\u1ea7n s\u1ed1 h\u1ee3p l\u00fd.<\/li>\n<\/ul>\n<p><strong>Nh\u01b0\u1ee3c \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>Load balancer c\u00f3 th\u1ec3 g\u00e2y ra t\u00ecnh tr\u1ea1ng &#8220;ngh\u1ebdn c\u1ed5 chai&#8221; n\u1ebfu server ch\u1ea1y LB kh\u00f4ng \u0111\u01b0\u1ee3c cung c\u1ea5p \u0111\u1ee7 t\u00e0i nguy\u00ean ho\u1eb7c kh\u00f4ng \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh t\u1ed1t.<\/li>\n<li>G\u1eb7p m\u1ed9t s\u1ed1 ph\u1ee9c t\u1ea1p c\u1ea7n ph\u1ea3i xem x\u00e9t k\u0129 l\u01b0\u1ee1ng (\u0111\u1ed3ng b\u1ed9 session gi\u1eefa 2 server, \u2026 )<\/li>\n<li>Load balancer l\u00e0 m\u1ed9t\u00a0<code>\"single point of failure\"<\/code>, n\u1ebfu n\u00f3 s\u1eadp, to\u00e0n b\u1ed9 service c\u1ee7a ch\u00fang ta c\u0169ng s\u1ebd s\u1eadp theo. M\u1ed9t thi\u1ebft l\u1eadp\u00a0<code>high availability (HA)<\/code>\u00a0l\u00e0 m\u1ed9t c\u1ea5u tr\u00fac kh\u00f4ng ph\u1ea3i l\u00e0 &#8220;single point of failure&#8221;. \u0110\u1ec3 bi\u1ebft r\u00f5 h\u01a1n v\u1ec1 c\u00e1ch thi\u1ebft l\u1eadp m\u1ed9t\u00a0<code>HA<\/code>, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecdc th\u00eam\u00a0<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-use-floating-ips-on-digitalocean#how-to-implement-an-ha-setup\" target=\"_blank\" rel=\"noopener\">\u1edf \u0111\u00e2y<\/a>.<\/li>\n<\/ul>\n<h2 id=\"_4-http-accelerator-caching-reverse-proxy-4\">4. HTTP Accelerator (Caching Reverse Proxy)<\/h2>\n<p>M\u1ed9t HTTP Accelerator, hay caching HTTP reverse proxy, c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 gi\u1ea3m th\u1eddi ph\u1ee5c v\u1ee5 c\u1ee7a h\u1ec7 th\u1ed1ng \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng m\u1ed9t v\u00e0i k\u0129 thu\u1eadt kh\u00e1c nhau. K\u0129 thu\u1eadt ch\u00ednh c\u1ee7a ph\u01b0\u01a1ng ph\u00e1p n\u00e0y l\u00e0 cache l\u1ea1i response t\u1eeb m\u1ed9t web server ho\u1eb7c application server v\u00e0o trong memory, v\u00e0 nh\u1eefng request trong t\u01b0\u01a1ng lai v\u1edbi c\u00f9ng n\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p m\u1ed9t c\u00e1ch nhanh ch\u00f3ng m\u00e0 kh\u00f4ng c\u1ea7n t\u01b0\u01a1ng t\u00e1c v\u1edbi web server ho\u1eb7c application server.<\/p>\n<p>M\u1ed9t s\u1ed1 ph\u1ea7n m\u1ec1m cung c\u1ea5p HTTP acceleration: Varnish, Squid, Nginx.<\/p>\n<p><strong>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng:<\/strong>\u00a0Ki\u1ebfn tr\u00fac n\u00e0y h\u1eefu d\u1ee5ng trong nh\u1eefng h\u1ec7 th\u1ed1ng dynamic web n\u1eb7ng v\u1ec1 n\u1ed9i dung ho\u1eb7c v\u1edbi nhi\u1ec1u t\u1ec7p \u0111\u01b0\u1ee3c truy c\u1eadp th\u01b0\u1eddng xuy\u00ean.<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/01e8ca82-aa31-424f-a5c7-50ceebcde55f.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/01e8ca82-aa31-424f-a5c7-50ceebcde55f.png\" title=\"\"><\/p>\n<p><strong>\u01afu \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>T\u0103ng performance b\u1eb1ng c\u00e1ch gi\u1ea3m CPU load tr\u00ean web server, th\u00f4ng qua caching<\/li>\n<li>C\u00f3 th\u1ec3 \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t reverse proxy Load Balancer<\/li>\n<li>M\u1ed8t v\u00e0i ph\u1ea7n m\u1ec1m caching c\u00f3 th\u1ec3 b\u1ea3o v\u1ec7 ch\u1ed1ng l\u1ea1i c\u00e1c t\u1ea5n c\u00f4ng DDOS<\/li>\n<\/ul>\n<p><strong>Nh\u01b0\u1ee3c \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>C\u1ea7n ph\u1ea3i tinh ch\u1ec9nh \u0111\u1ec3 c\u00f3 performance t\u1ed1t nh\u1ea5t.<\/li>\n<li>N\u1ebfu t\u1ed1c \u0111\u1ed9 truy c\u1eadp v\u00e0o cache ch\u1eadm, n\u00f3 c\u00f3 th\u1ec3 l\u00e0m gi\u1ea3m hi\u1ec7u n\u0103ng<\/li>\n<\/ul>\n<h2 id=\"_5-master-slave-database-replication-5\">5. Master-Slave Database Replication<\/h2>\n<p>M\u1ed8t c\u00e1ch \u0111\u1ec3 t\u0103ng performance c\u1ee7a h\u1ec7 th\u1ed1ng database th\u1ef1c hi\u1ec7n nhi\u1ec1u thao t\u00e1c \u0111\u1ecdc h\u01a1n ghi, v\u00ed d\u1ee5 nh\u01b0 c\u00e1c h\u1ec7 th\u1ed1ng CMS, \u0111\u00f3 l\u00e0 s\u1eed d\u1ee5ng ki\u1ebfn tr\u00fac Master-Slave Replication. Master-Slave replication y\u00eau c\u1ea7u m\u1ed9t master v\u00e0 m\u1ed9t ho\u1eb7c nhi\u1ec1u slave. Master \u0111\u00f3ng vai tr\u00f2 ghi d\u1eef li\u1ec7u c\u00f2n c\u00e1c Slave \u0111\u00f3ng vai tr\u00f2 \u0111\u1ecdc d\u1eef li\u1ec7u ra. Khi c\u00f3 d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c ghi tr\u00ean Master, nh\u1eefng d\u1eef li\u1ec7u n\u00e0y sau \u0111\u00f3 s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ed3ng b\u1ed9 d\u1ea7n l\u00ean c\u00e1c Slave. Ki\u1ebfn tr\u00fac n\u00e0y gi\u00fap chia t\u1ea3i (c\u00e1c thao t\u00e1c \u0111\u1ecdc d\u1eef li\u1ec7u) ra nhi\u1ec1u servers.<\/p>\n<p><strong>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng:<\/strong>\u00a0H\u1eefu d\u1ee5ng cho c\u00e1c h\u1ec7 th\u1ed1ng m\u00e0 c\u1ea7n t\u0103ng t\u1ed1c \u0111\u1ecdc \u0111\u1ecdc d\u1eef li\u1ec7u<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/ed6524a5-a8e4-4bdc-bf16-6d90e179d33f.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/ed6524a5-a8e4-4bdc-bf16-6d90e179d33f.png\" title=\"\"><\/p>\n<p><strong>\u01afu \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>T\u0103ng hi\u1ec7u n\u0103ng \u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb database b\u1eb1ng c\u00e1ch ph\u00e2n t\u1ea3i request ra nhi\u1ec1u server Slave<\/li>\n<li>C\u00f3 th\u1ec3 t\u0103ng hi\u1ec7u n\u0103ng ghi d\u1eef li\u1ec7u b\u1eb1ng c\u00e1ch ch\u1ec9 s\u1eed d\u1ee5ng server Master cho vi\u1ec7c ghi th\u00f4i (Master kh\u00f4ng c\u1ea7n ph\u1ea3i th\u1ef1c hi\u1ec7n c\u00e1c thao t\u00e1c \u0111\u1ecdc)<\/li>\n<\/ul>\n<p><strong>Nh\u01b0\u1ee3c \u0111i\u1ec3m:<\/strong><\/p>\n<ul>\n<li>C\u00e0i \u0111\u1eb7t ki\u1ebfn tr\u00fac n\u00e0y kh\u00e1 ph\u1ee9c t\u1ea1p<\/li>\n<li>C\u1eadp nh\u1eadt l\u00ean c\u00e1c server Slaves di\u1ec5n ra b\u1ea5t \u0111\u1ed3ng b\u1ed9, do v\u1eady m\u00e0 n\u1ed9i dung tr\u00ean \u0111\u00f3 c\u00f3 th\u1ec3 s\u1ebd ch\u01b0a \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t trong nh\u1eefng th\u1eddi \u0111i\u1ec3m nh\u1ea5t \u0111\u1ecbnh<\/li>\n<li>N\u1ebfu Master l\u1ed7i, kh\u00f4ng th\u1ec3 ghi \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u l\u00ean<\/li>\n<\/ul>\n<h2 id=\"_6-ket-hop-tat-ca-kien-truc-tren-6\">6. K\u1ebft h\u1ee3p t\u1ea5t c\u1ea3 ki\u1ebfn tr\u00fac tr\u00ean<\/h2>\n<p>Ch\u00fang ta c\u00f3 th\u1ec3 th\u00eam Load Balancer cho c\u00e1c caching server, ngo\u00e0i nh\u1eefng application servers v\u00e0 s\u1eed d\u1ee5ng ki\u1ebfn tr\u00fac Master-Slave Replication cho databases. Ph\u01b0\u01a1ng ph\u00e1p n\u00e0y k\u1ebft h\u1ee3p \u01b0u \u0111i\u1ec3m c\u1ee7a t\u1ea5t c\u1ea3 nh\u1eefng ph\u01b0\u01a1ng ph\u00e1p tr\u00ean v\u00e0 h\u1ea1n ch\u1ebf nh\u1eefng v\u1ea5n \u0111\u1ec1, s\u1ef1 ph\u1ee9c t\u1ea1p c\u1ee7a ch\u00fang.<img decoding=\"async\" class=\"medium-zoom-image\" src=\"https:\/\/images.viblo.asia\/c3f6a152-d527-4eed-a4dc-8b47633c252c.png\" alt=\"\" data-zoom-target=\"https:\/\/images.viblo.asia\/1600\/c3f6a152-d527-4eed-a4dc-8b47633c252c.png\" title=\"\"><\/p>\n<p>Gi\u1ea3 s\u1eed r\u1eb1ng Load Balancer s\u1ebd \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u1ec3 nh\u1eadn bi\u1ebft c\u00e1c statis requests (v\u00ed d\u1ee5 nh\u01b0 \u1ea3nh, css, javascript,&#8230;) v\u00e0 g\u1eedi nh\u1eefng request \u0111\u00f3 t\u1edbi c\u00e1c caching servers, v\u00e0 g\u1eedi nh\u1eefng requests kh\u00e1c t\u1edbi application servers.<\/p>\n<p>Sau \u0111\u00e2y l\u00e0 m\u00f4 t\u1ea3 \u0111i\u1ec1u g\u00ec s\u1ebd x\u1ea3y ra khi m\u1ed9t user g\u1eedi m\u1ed9t request dynamic content:<\/p>\n<ol>\n<li>User g\u1eedi m\u1ed9t request dynamic content t\u1edbi\u00a0<code>http:\/\/example.com\/<\/code>\u00a0(load balancer)<\/li>\n<li>LB g\u1eedi request t\u1edbi\u00a0<code>app-backend<\/code><\/li>\n<li><code>app-backend<\/code>\u00a0\u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb c\u00e1c Database Slave v\u00e0 tr\u1ea3 v\u1ec1 d\u1eef li\u1ec7u cho LB<\/li>\n<li>LB sau \u0111\u00f3 s\u1ebd tr\u1ea3 v\u1ec1 d\u1eef li\u1ec7u cho user<\/li>\n<\/ol>\n<p>N\u1ebfu nh\u01b0 user g\u1eedi m\u1ed9t request static content:<\/p>\n<ol>\n<li>LB ki\u1ec3m tra trong\u00a0<code>cache-backend<\/code>\u00a0xem n\u1ed9i dung \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u \u0111\u00e3 \u0111\u01b0\u1ee3c cache hay ch\u01b0a.<\/li>\n<li>N\u1ebfu\u00a0<strong>\u0111\u00e3 \u0111\u01b0\u1ee3c cache<\/strong>: tr\u1ea3 d\u1eef li\u1ec7u v\u1ec1 cho LB v\u00e0 chuy\u1ec3n t\u1edbi\u00a0<strong>B\u01b0\u1edbc 7<\/strong>. N\u1ebfu\u00a0<strong>ch\u01b0a \u0111\u01b0\u1ee3c cache<\/strong>:\u00a0<code>cache-backend<\/code>\u00a0s\u1ebd chuy\u1ec3n request n\u00e0y cho\u00a0<code>app-backend<\/code>, th\u00f4ng qua LB.<\/li>\n<li>LB s\u1ebd chuy\u1ec3n request t\u1edbi cho\u00a0<code>app-backend<\/code><\/li>\n<li><code>app-backend<\/code>\u00a0\u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb c\u00e1c Database Slave sau \u0111\u00f3 tr\u1ea3 d\u1eef li\u1ec7u v\u1ec1 cho LB<\/li>\n<li>LB chuy\u1ec3n response cho\u00a0<code>cache-backend<\/code><\/li>\n<li><code>cache-backend<\/code>\u00a0th\u1ef1c hi\u1ec7n cache l\u1ea1i n\u1ed9i dung b\u00ean trong response<\/li>\n<li>LB sau \u0111\u00f3 s\u1ebd tr\u1ea3 v\u1ec1 d\u1eef li\u1ec7u cho user<\/li>\n<\/ol>\n<h2 id=\"_ket-luan-7\">K\u1ebft lu\u1eadn<\/h2>\n<p>Tr\u00ean \u0111\u00e2y t\u00f4i \u0111\u00e3 gi\u1edbi thi\u1ec7u cho c\u00e1c b\u1ea1n m\u1ed9t s\u1ed1 ki\u1ebfn tr\u00fac server ph\u1ed5 bi\u1ebfn cho c\u00e1c \u1ee9ng d\u1ee5ng web. C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 k\u1ebft h\u1ee3p ch\u00fang t\u00f9y \u00fd \u0111\u1ec3 x\u00e2y d\u1ef1ng cho m\u1ed9t ki\u1ebfn tr\u00fac server ph\u00f9 h\u1ee3p nh\u1ea5t cho \u1ee9ng d\u1ee5ng ri\u00eang c\u1ee7a b\u1ea1n nh\u00e9.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gi\u1edbi thi\u1ec7u Khi quy\u1ebft \u0111\u1ecbnh xem n\u00ean s\u1eed d\u1ee5ng ki\u1ebfn tr\u00fac server n\u00e0o cho \u1ee9ng d\u1ee5ng Web c\u1ee7a b\u1ea1n, c\u00f3 r\u1ea5t nhi\u1ec1u y\u1ebfu t\u1ed1 c\u1ea7n ph\u1ea3i c\u00e2n nh\u1eafc, v\u00ed d\u1ee5 nh\u01b0 hi\u1ec7u n\u0103ng, kh\u1ea3 n\u0103ng&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-520","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/comments?post=520"}],"version-history":[{"count":1,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/520\/revisions"}],"predecessor-version":[{"id":521,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/520\/revisions\/521"}],"wp:attachment":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/media?parent=520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/categories?post=520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/tags?post=520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}