tek4

5 Kỹ Thuật Giúp Đảm Bảo Tính Ôn Định Trong Hệ Thống Phân Tán

by - September. 21, 2021
Kiến thức
<p style="text-align: justify;">Nhiều kỹ thuật gi&aacute;m s&aacute;t v&agrave; khả năng kh&aacute;ng lỗi đ&atilde; được ph&aacute;t triển, &aacute;p dụng v&agrave; cải tiến trong bốn thập kỷ qua để đưa ra c&aacute;c giải ph&aacute;p chung cho c&aacute;c vấn đề lặp lại trong thiết kế kiến tr&uacute;c hệ thống. V&agrave; trong b&agrave;i viết n&agrave;y, t&ocirc;i sẽ tập trung v&agrave;o c&aacute;c kỹ thuật khi l&agrave;m việc với c&aacute;c m&ocirc;-đun kh&aacute;c để l&agrave;m cho c&aacute;c m&ocirc;-đun của bạn c&oacute; khả năng kh&aacute;ng lỗi v&agrave; gi&aacute;m s&aacute;t trong một hệ thống ph&acirc;n t&aacute;n.</p> <h2 id="ftoc-heading-1" class="ftwp-heading" style="text-align: justify;"><strong>Hệ thống ph&acirc;n t&aacute;n l&agrave; g&igrave;?</strong></h2> <p><strong><img style="width: 585px; display: block; margin-left: auto; margin-right: auto;" src="http://tek4vn.2soft.top/public_files/98-png" alt="98" height="329" /></strong></p> <p style="text-align: justify;">Hệ thống ph&acirc;n t&aacute;n l&agrave; hệ thống c&oacute; c&aacute;c th&agrave;nh phần được đặt tr&ecirc;n c&aacute;c m&aacute;y t&iacute;nh nối mạng kh&aacute;c nhau, c&aacute;c m&aacute;y t&iacute;nh n&agrave;y giao tiếp v&agrave; phối hợp c&aacute;c h&agrave;nh động của ch&uacute;ng bằng c&aacute;ch truyền c&aacute;c th&ocirc;ng b&aacute;o cho nhau từ bất kỳ hệ thống n&agrave;o.</p> <h2 id="ftoc-heading-2" class="ftwp-heading" style="text-align: justify;"><strong>Khả năng kh&aacute;ng lỗi</strong></h2> <p style="text-align: justify;">Đ&acirc;y l&agrave; một thuật ngữ quan trọng trong hệ thống ph&acirc;n t&aacute;n. Đ&oacute; l&agrave; khả năng hệ thống tiếp tục hoạt động trong trường hợp c&oacute; sự cố một phần nhưng hiệu suất tổng thể c&oacute; thể bị ảnh hưởng.</p> <p style="text-align: justify;">V&igrave; hệ thống ph&acirc;n t&aacute;n bao gồm nhiều th&agrave;nh phần kh&aacute;c nhau, n&ecirc;n việc ph&aacute;t triển một hệ thống c&oacute; khả năng kh&aacute;ng lỗi khoảng một trăm phần trăm thực tế l&agrave; rất kh&oacute;.</p> <h2 id="ftoc-heading-3" class="ftwp-heading" style="text-align: justify;"><strong>Tại sao c&aacute;c hệ thống lại xảy ra lỗi</strong></h2> <p style="text-align: justify;">C&oacute; hai nguy&ecirc;n nh&acirc;n ch&iacute;nh dẫn đến sự cố xảy ra như sau.</p> <ol style="text-align: justify;"> <li aria-level="1">Lỗi tại 1 điểm: lỗi phần cứng hoặc phần mềm.</li> <li aria-level="1">Lỗi độc hại: do truy cập tr&aacute;i ph&eacute;p g&acirc;y ra.</li> </ol> <h2 id="ftoc-heading-4" class="ftwp-heading" style="text-align: justify;"><strong>Tại sao ch&uacute;ng ta cần khả năng kh&aacute;ng lỗi trong c&aacute;c hệ thống ph&acirc;n t&aacute;n?</strong></h2> <p style="text-align: justify;">Bằng c&aacute;ch tận dụng khả năng kh&aacute;ng lỗi trong c&aacute;c hệ thống ph&acirc;n t&aacute;n, ch&uacute;ng ta c&oacute; thể c&oacute; được:</p> <ol style="text-align: justify;"> <li aria-level="1">Độ tin cậy: tập trung v&agrave;o một dịch vụ li&ecirc;n tục m&agrave; kh&ocirc;ng c&oacute; bất kỳ sự gi&aacute;n đoạn n&agrave;o.</li> <li aria-level="1">T&iacute;nh sẵn s&agrave;ng: li&ecirc;n quan đến t&iacute;nh sẵn s&agrave;ng của hệ thống.</li> <li aria-level="1">Bảo mật: ngăn chặn mọi truy cập tr&aacute;i ph&eacute;p.</li> </ol> <h2 id="ftoc-heading-5" class="ftwp-heading" style="text-align: justify;"><strong>L&agrave;m thế n&agrave;o để triển khai c&aacute;c biện ph&aacute;p kh&aacute;ng lỗi?</strong></h2> <p style="text-align: justify;">C&oacute; ba kh&iacute;a cạnh của kỹ thuật kh&aacute;ng lỗi được chia th&agrave;nh ph&aacute;t hiện lỗi, kh&ocirc;i phục lỗi v&agrave; che giấu lỗi.</p> <h3 id="ftoc-heading-6" class="ftwp-heading" style="text-align: justify;"><strong>1. M&ocirc; h&igrave;nh x&aacute;c nhận</strong></h3> <p style="text-align: justify;">&Yacute; tưởng l&agrave; ph&aacute;t hiện lỗi trong hệ thống bằng c&aacute;ch x&aacute;c nhận việc nhận đầu v&agrave;o trong một khoảng thời gian x&aacute;c định.</p> <h3 id="ftoc-heading-7" class="ftwp-heading" style="text-align: justify;"><strong>Bối cảnh v&agrave; vấn đề</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh x&aacute;c nhận được &aacute;p dụng cho một hệ thống m&agrave; tần suất tương t&aacute;c giữa hệ thống được gi&aacute;m s&aacute;t v&agrave; hệ thống gi&aacute;m s&aacute;t c&oacute; thể thay đổi rất nhiều v&agrave; trong một thời gian cho trước.</p> <ol style="text-align: justify;"> <li>Giảm thiểu chi ph&iacute; thời gian được đưa ra bởi kỹ thuật ph&aacute;t hiện.</li> <li>Giảm lượng giao tiếp giữa hệ thống được gi&aacute;m s&aacute;t v&agrave; hệ thống gi&aacute;m s&aacute;t.</li> </ol> <h3 id="ftoc-heading-8" class="ftwp-heading" style="text-align: justify;"><strong>Cấu tr&uacute;c</strong></h3> <p style="text-align: justify;">Trong m&ocirc; h&igrave;nh x&aacute;c nhận, đối tượng gửi kết hợp với bộ đếm giờ tạo th&agrave;nh hệ thống gi&aacute;m s&aacute;t v&agrave; đối tượng b&ecirc;n nhận kết hợp với thực thể đối tượng x&aacute;c nhận tạo th&agrave;nh hệ thống được gi&aacute;m s&aacute;t.</p> <p style="text-align: justify;">Đối tượng b&ecirc;n gửi chịu tr&aacute;ch nhiệm ri&ecirc;ng trong việc li&ecirc;n hệ với hệ thống được gi&aacute;m s&aacute;t.</p> <p style="text-align: justify;">Bất cứ khi n&agrave;o đối tượng b&ecirc;n gửi gửi đầu v&agrave;o cho đối tượng b&ecirc;n nhận, Bộ đếm giờ chịu tr&aacute;ch nhiệm đếm ngược khoảng thời gian chờ mỗi khi đầu v&agrave;o được cung cấp cho hệ thống theo d&otilde;i, được k&iacute;ch hoạt.</p> <p style="text-align: justify;">Khi nhận được th&ocirc;ng tin đầu v&agrave;o của đối tượng b&ecirc;n gửi, đối tượng b&ecirc;n nhận sẽ th&ocirc;ng b&aacute;o cho đối tượng x&aacute;c nhận. Sau đ&oacute;, đối tượng x&aacute;c nhận c&oacute; tr&aacute;ch nhiệm gửi một x&aacute;c nhận đến bộ đếm giờ đối với đầu v&agrave;o đ&atilde; nhận. Nếu khoảng thời gian chờ của bộ đếm giờ hết N lần li&ecirc;n tiếp m&agrave; kh&ocirc;ng nhận được x&aacute;c nhận từ hệ thống gi&aacute;m s&aacute;t, bộ đếm giờ sẽ ph&aacute;t hiện lỗi tr&ecirc;n hệ thống được gi&aacute;m s&aacute;t v&agrave; th&ocirc;ng b&aacute;o cho đối tượng b&ecirc;n gửi.</p> <h3 id="ftoc-heading-9" class="ftwp-heading" style="text-align: justify;"><strong>Kết quả</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh x&aacute;c nhận c&oacute; những ưu điểm sau:</p> <ol style="text-align: justify;"> <li aria-level="1">Độ phức tạp thiết kế l&agrave; rất thấp.</li> <li aria-level="1">Kh&ocirc;ng g&acirc;y ra bất kỳ khoản chi ph&iacute; n&agrave;o.</li> </ol> <p style="text-align: justify;">M&ocirc; h&igrave;nh x&aacute;c nhận cũng c&oacute; một số nhược điểm sau:</p> <ol style="text-align: justify;"> <li>Kh&ocirc;ng cung cấp c&aacute;c phương ph&aacute;p để kh&aacute;ng đựng c&aacute;c lỗi trong hệ thống. Đ&uacute;ng hơn, n&oacute; cung cấp c&aacute;c phương ph&aacute;p để ph&aacute;t hiện lỗi.</li> <li>N&oacute; g&acirc;y ra chi ph&iacute; về kh&ocirc;ng gian tương đối cao với số lỗi đồng thời m&agrave; n&oacute; c&oacute; thể xử l&yacute;.</li> </ol> <h3 id="ftoc-heading-10" class="ftwp-heading" style="text-align: justify;"><strong>2. M&ocirc; h&igrave;nh ngắt mạch</strong></h3> <p style="text-align: justify;">Nếu bạn đ&atilde; quen với c&aacute;ch hoạt động của cầu ch&igrave; trong bảng điện trong nh&agrave;, bạn sẽ hiểu nguy&ecirc;n tắc của kiểu ngắt mạch.</p> <h3 id="ftoc-heading-11" class="ftwp-heading" style="text-align: justify;"><strong>Bối cảnh v&agrave; vấn đề</strong></h3> <p style="text-align: justify;">L&agrave;m thế n&agrave;o để ngăn chặn lỗi mạng hoặc c&aacute;c th&agrave;nh phần kh&ocirc;ng thể truyền sang c&aacute;c th&agrave;nh phần kh&aacute;c?</p> <h3 id="ftoc-heading-12" class="ftwp-heading" style="text-align: justify;"><strong>Giải ph&aacute;p</strong></h3> <p style="text-align: justify;">Giải ph&aacute;p cho vấn đề tr&ecirc;n được đề xuất bởi m&ocirc; h&igrave;nh ngắt mạch được sử dụng.</p> <h3 id="ftoc-heading-13" class="ftwp-heading" style="text-align: justify;"><strong>Kết cấu</strong></h3> <p style="text-align: justify;">Bộ ngắt mạch c&oacute; 3 trạng th&aacute;i r&otilde; r&agrave;ng l&agrave; đ&oacute;ng, mở v&agrave; mở một nửa.</p> <p style="text-align: justify;">Trạng th&aacute;i đ&oacute;ng: Trạng th&aacute;i đ&oacute;ng l&agrave; trạng th&aacute;i mặc định &ldquo;mọi thứ đang hoạt động như mong đợi&rdquo;. Y&ecirc;u cầu được truyền qua một c&aacute;ch tự do. Khi một số vấn đề hỏng h&oacute;c xảy ra, ch&uacute;ng g&acirc;y ra hiện tượng ngắt mạch.</p> <p style="text-align: justify;">Trạng th&aacute;i mở: Trạng th&aacute;i mở từ chối tất cả c&aacute;c y&ecirc;u cầu trong một khoảng thời gian cố định m&agrave; kh&ocirc;ng thực hiện gửi ch&uacute;ng đi. Khi bộ ngắt mạch hoạt động, n&oacute; sẽ chuyển sang trạng th&aacute;i mở. Tại thời điểm n&agrave;y, bất kỳ y&ecirc;u cầu n&agrave;o đến dịch vụ sẽ tự động bị lỗi.</p> <p style="text-align: justify;">Trạng th&aacute;i mở một nửa: bộ ngắt mạch cho ph&eacute;p một số lượng y&ecirc;u cầu được th&ocirc;ng qua để kiểm tra trạng th&aacute;i của t&agrave;i nguy&ecirc;n. Trạng th&aacute;i nửa mở x&aacute;c định xem mạch sẽ ở trạng th&aacute;i đ&oacute;ng hoặc mở.</p> <h3 id="ftoc-heading-14" class="ftwp-heading" style="text-align: justify;"><strong>Trường hợp sử dụng</strong></h3> <p style="text-align: justify;">Ch&uacute;ng ta sẽ chỉ sử dụng m&ocirc; h&igrave;nh n&agrave;y để ngăn ứng dụng cố gắng gọi một dịch vụ từ xa hoặc truy cập v&agrave;o t&agrave;i nguy&ecirc;n được chia sẻ nếu thao t&aacute;c n&agrave;y c&oacute; khả năng thất bại cao.</p> <p style="text-align: justify;">Nhưng m&ocirc; h&igrave;nh n&agrave;y kh&ocirc;ng được khuyến kh&iacute;ch cho hai trường hợp sử dụng sau.</p> <ol style="text-align: justify;"> <li aria-level="1">Để xử l&yacute; quyền truy cập v&agrave;o t&agrave;i nguy&ecirc;n ri&ecirc;ng cục bộ trong một ứng dụng, chẳng hạn như cấu tr&uacute;c dữ liệu trong bộ nhớ. Trong m&ocirc;i trường n&agrave;y, việc sử dụng bộ ngắt mạch sẽ tăng th&ecirc;m chi ph&iacute; cho hệ thống.</li> <li aria-level="1">Thay thế cho việc xử l&yacute; c&aacute;c lỗi trong thao t&aacute;c logic của c&aacute;c ứng dụng.</li> </ol> <h3 id="ftoc-heading-15" class="ftwp-heading" style="text-align: justify;"><strong>N&oacute; được sử dụng như thế n&agrave;o trong thực tế?</strong></h3> <p style="text-align: justify;">C&oacute; ba c&aacute;ch tiếp cận triển khai kh&aacute;c nhau cho m&ocirc; h&igrave;nh bộ ngắt mạch: bộ ngắt mạch ph&iacute;a m&aacute;y kh&aacute;ch, bộ ngắt mạch ph&iacute;a m&aacute;y chủ v&agrave; bộ ngắt mạch proxy.</p> <p style="text-align: justify;">Một trong những c&aacute;ch triển khai nổi tiếng nhất của bộ ngắt mạch được cung cấp bởi thư viện Hystrix, cho ph&eacute;p g&oacute;i m&atilde; Java trong một thủ tục sẽ được điều khiển bởi bộ ngắt mạch.</p> <h3 id="ftoc-heading-16" class="ftwp-heading" style="text-align: justify;"><strong>Kết quả</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh bộ ngắt mạch y&ecirc;u cầu c&aacute;c y&ecirc;u cầu v&agrave; phản hồi bổ sung để thực hiện một số kiểu bắt tay trước mỗi lần giao tiếp.</p> <h3 id="ftoc-heading-17" class="ftwp-heading" style="text-align: justify;"><strong>3. M&ocirc; h&igrave;nh Roll-forward</strong></h3> <p style="text-align: justify;">Sau khi ch&uacute;ng ta ph&aacute;t hiện ra lỗi, hệ thống phải kh&ocirc;i phục lỗi đ&oacute; để đủ điều kiện l&agrave; c&oacute; khả năng kh&aacute;ng lỗi.</p> <h3 id="ftoc-heading-18" class="ftwp-heading" style="text-align: justify;"><strong>Bối cảnh v&agrave; vấn đề</strong></h3> <p style="text-align: justify;">Ch&uacute;ng ta sẽ &aacute;p dụng m&ocirc; h&igrave;nh n&agrave;y khi lỗi c&oacute; thể ph&aacute;t hiện được v&agrave; hệ thống c&oacute; khả năng lưu trạng th&aacute;i hiện tại v&agrave; tải trạng th&aacute;i mới.</p> <h3 id="ftoc-heading-19" class="ftwp-heading" style="text-align: justify;">Giải ph&aacute;p</h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh n&agrave;y tr&aacute;nh sự mất m&aacute;t về dữ liệu bằng c&aacute;ch sử dụng c&aacute;c điểm kiểm tra để kh&ocirc;i phục c&aacute;c th&agrave;nh phần về trạng th&aacute;i ổn định ngay lập tức trước sự kiện lỗi hoặc sự cố.</p> <h3 id="ftoc-heading-20" class="ftwp-heading" style="text-align: justify;"><strong>Kết cấu</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh Roll-foward bao gồm c&aacute;c phần tử như sau.</p> <ol style="text-align: justify;"> <li>C&aacute;c bản sao, l&agrave; c&aacute;c phi&ecirc;n bản sao ch&eacute;p của hệ thống gốc, mỗi bản sao c&oacute; khả năng xuất ra trạng th&aacute;i của ch&uacute;ng v&agrave; nhập trạng th&aacute;i mới theo y&ecirc;u cầu. Mỗi bản sao cũng phải được &aacute;nh xạ tới một đơn vị lỗi kh&aacute;c nhau.</li> <li>Đối tượng quản l&yacute;, chịu tr&aacute;ch nhiệm tiếp nhận tất cả đầu v&agrave;o d&agrave;nh cho hệ thống kh&aacute;ng lỗi v&agrave; chuyển tiếp n&oacute; đến bản sao th&iacute;ch hợp. trong trường hợp kh&ocirc;ng c&oacute; lỗi, đối tượng quản l&yacute; sẽ k&iacute;ch hoạt bản sao của trạng th&aacute;i mới từ bản sao đ&atilde; xử l&yacute; đầu v&agrave;o mới nhất đến c&aacute;c bản sao kh&aacute;c đ&atilde; giữ trạng th&aacute;i kh&ocirc;ng c&oacute; lỗi trước đ&oacute;.</li> <li>Đối tượng quản l&yacute; cũng dựa v&agrave;o cơ chế ph&aacute;t hiện lỗi để ph&aacute;t hiện c&aacute;c lỗi c&oacute; thể xảy ra tr&ecirc;n c&aacute;c bản sao. Khi một lỗi như vậy xảy ra tr&ecirc;n một bản sao, đối tượng quản l&yacute; c&oacute; tr&aacute;ch nhiệm loại bỏ bản sao đ&oacute;.</li> <li>Đối tượng quản l&yacute; phải được &aacute;nh xạ đến một đơn vị lỗi kh&aacute;c.</li> </ol> <h3 id="ftoc-heading-21" class="ftwp-heading" style="text-align: justify;"><strong>Kết quả</strong></h3> <p style="text-align: justify;">Độ phức tạp trong thiết kế v&agrave; chi ph&iacute; về thời gian trong m&ocirc; h&igrave;nh n&agrave;y tương đối thấp nhưng c&aacute;c m&ocirc; h&igrave;nh n&agrave;y cũng c&oacute; một số nhược điểm sau.</p> <ol style="text-align: justify;"> <li aria-level="1">Chi ph&iacute; về kh&ocirc;ng gian tương đối cao v&agrave; to&agrave;n bộ hệ thống được nh&acirc;n rộng.</li> <li aria-level="1">Chi ph&iacute; về thời gian trong trường hợp kh&ocirc;ng c&oacute; lỗi l&agrave; cao v&igrave; n&oacute; phải sao ch&eacute;p trạng th&aacute;i mới của n&oacute; sang một bản sao kh&aacute;c trước khi bản sao hiện tại c&oacute; thể nhận v&agrave; xử l&yacute; đầu v&agrave;o mới.</li> </ol> <h3 id="ftoc-heading-22" class="ftwp-heading" style="text-align: justify;"><strong>4. M&ocirc; h&igrave;nh Roll-back</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh n&agrave;y l&agrave; một kỹ thuật kh&aacute;c để kh&ocirc;i phục khi xảy ra lỗi bằng c&aacute;ch sử dụng c&aacute;c bản sao hệ thống. N&oacute; c&oacute; chức năng tương tự như m&ocirc; h&igrave;nh Roll-forward. Tuy nhi&ecirc;n, một bản sao sẽ quay trở lại trạng th&aacute;i kh&ocirc;ng c&oacute; lỗi cuối c&ugrave;ng nếu xảy ra lỗi.</p> <h3 id="ftoc-heading-23" class="ftwp-heading" style="text-align: justify;"><strong>Bối cảnh v&agrave; vấn đề</strong></h3> <p style="text-align: justify;">Ch&uacute;ng ta sẽ &aacute;p dụng m&ocirc; h&igrave;nh n&agrave;y khi lỗi c&oacute; thể ph&aacute;t hiện được v&agrave; hệ thống c&oacute; khả năng lưu trạng th&aacute;i hiện tại v&agrave; tải trạng th&aacute;i mới.</p> <p style="text-align: justify;">M&ocirc; h&igrave;nh n&agrave;y giải quyết vấn đề kh&ocirc;i phục sau lỗi bằng c&aacute;ch giảm thiểu tổng thời gian để thực thi hệ thống kh&ocirc;ng c&oacute; lỗi v&agrave; đảm bảo rằng trạng th&aacute;i kh&ocirc;ng c&oacute; lỗi được kh&ocirc;i phục sau khi xảy ra lỗi.</p> <h3 id="ftoc-heading-24" class="ftwp-heading" style="text-align: justify;"><strong>Giải ph&aacute;p</strong></h3> <p style="text-align: justify;">Giải quyết c&aacute;c vấn đề tr&ecirc;n dựa tr&ecirc;n việc sử dụng hai bản sao của hệ thống v&agrave; một bộ lưu trữ để lưu lại c&aacute;c trạng th&aacute;i.</p> <h3 id="ftoc-heading-25" class="ftwp-heading" style="text-align: justify;"><strong>Cấu tr&uacute;c</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh Roll-back bao gồm c&aacute;c phần tử như sau:</p> <ol style="text-align: justify;"> <li aria-level="1">C&aacute;c bản sao, l&agrave; c&aacute;c bản sao của hệ thống gốc giống hệt nhau v&agrave; được gi&aacute;m s&aacute;t lỗi.</li> <li aria-level="1">Bộ lưu trữ, được sử dụng để lưu trữ c&aacute;c trạng th&aacute;i m&agrave; bản sao xử l&yacute; đầu v&agrave;o, v&agrave; xuất ra tại một số thời điểm nhất định.</li> <li aria-level="1">C&aacute;c bản sao c&oacute; thể thay thế bộ lưu trữ theo c&aacute;ch sau: khi c&aacute;c trạng th&aacute;i lưu trữ được tạo, mỗi bản sao sẽ xuất ch&uacute;ng sang c&aacute;c bản sao kh&aacute;c v&agrave; nhập từ ch&uacute;ng c&aacute;c trạng th&aacute;i lưu trữ m&agrave; c&aacute;c bản sao n&agrave;y đ&atilde; được tạo.</li> </ol> <p style="text-align: justify;">Đối tượng quản l&yacute; c&oacute; tr&aacute;ch nhiệm tiếp nhận tất cả đầu v&agrave;o d&agrave;nh cho hệ thống kh&aacute;ng lỗi v&agrave; chuyển n&oacute; đến bản sao th&iacute;ch hợp.</p> <p style="text-align: justify;">Trong trường hợp kh&ocirc;ng c&oacute; lỗi, đối tượng quản l&yacute; sẽ k&iacute;ch hoạt bản sao của trạng th&aacute;i mới từ bản sao đ&atilde; xử l&yacute; đầu v&agrave;o cuối c&ugrave;ng v&agrave;o bộ lưu trữ.</p> <p style="text-align: justify;">Đối tượng quản l&yacute; cũng dựa v&agrave;o cơ chế ph&aacute;t hiện lỗi để ph&aacute;t hiện c&aacute;c lỗi c&oacute; thể xảy ra tr&ecirc;n c&aacute;c bản sao. Khi một lỗi như vậy xảy ra tr&ecirc;n một bản sao, đối tượng quản l&yacute; c&oacute; tr&aacute;ch nhiệm loại bỏ bản sao đ&oacute;. Đối tượng quản l&yacute; phải được &aacute;nh xạ đến một đơn vị lỗi kh&aacute;c với bất kỳ bản sao n&agrave;o.</p> <h3 id="ftoc-heading-26" class="ftwp-heading" style="text-align: justify;"><strong>Kết quả</strong></h3> <p style="text-align: justify;">Ưu điểm v&agrave; nhược điểm của m&ocirc; h&igrave;nh n&agrave;y cũng giống với m&ocirc; h&igrave;nh Roll-forward.</p> <h3 id="ftoc-heading-27" class="ftwp-heading" style="text-align: justify;"><strong>5. M&ocirc; h&igrave;nh sao ch&eacute;p chủ động</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh sao ch&eacute;p chủ động c&oacute; sự cải tiến về mặt ph&aacute;t hiện lỗi đến che giấu lỗi.</p> <h3 id="ftoc-heading-28" class="ftwp-heading" style="text-align: justify;"><strong>Bối cảnh v&agrave; vấn đề</strong></h3> <p style="text-align: justify;">C&aacute;c ứng dụng hoặc hệ thống quan trọng c&oacute; t&iacute;nh tất định, c&oacute; thể gặp lỗi kh&ocirc;ng li&ecirc;n quan đến đầu v&agrave;o m&agrave; ch&uacute;ng nhận được.</p> <p style="text-align: justify;">C&aacute;ch che giấu c&aacute;c lỗi trong hệ thống để tr&aacute;nh lỗi hệ thống. Một số ứng dụng, cụ thể l&agrave; c&aacute;c hệ thống h&agrave;ng kh&ocirc;ng v&agrave; chăm s&oacute;c sức khỏe y&ecirc;u cầu che giấu c&aacute;c lỗi để tr&aacute;nh hệ thống bị lỗi c&oacute; thể dẫn đến lỗi.</p> <h3 id="ftoc-heading-29" class="ftwp-heading" style="text-align: justify;"><strong>Giải ph&aacute;p</strong></h3> <p style="text-align: justify;">Giải ph&aacute;p cho vấn đề n&agrave;y bị ảnh hưởng bởi c&aacute;c t&aacute;c động sau:</p> <ol style="text-align: justify;"> <li aria-level="1">Đầu v&agrave;o m&agrave; hệ thống nhận được phải được xử l&yacute; v&agrave; cung cấp đầu ra được chỉ định một c&aacute;ch độc lập với việc hệ thống c&oacute; xảy ra lỗi hay kh&ocirc;ng.</li> <li aria-level="1">Việc thực thi kh&ocirc;ng c&oacute; lỗi của hệ thống phải bị phạt thời gian tối thiểu.</li> <li aria-level="1">Chi ph&iacute; về thời gian được đưa ra bởi giải ph&aacute;p nếu c&oacute; lỗi phải được giữ ở mức rất thấp.</li> <li aria-level="1">Hệ thống phải c&oacute; t&iacute;nh tất định.</li> </ol> <p style="text-align: justify;">Ch&uacute;ng ta sẽ sử dụng một tập hợp c&aacute;c bộ xử l&yacute; nhận c&ugrave;ng một thứ tự đầu v&agrave;o, đồng thời tiến h&agrave;nh xử l&yacute; c&aacute;c đầu v&agrave;o của ch&uacute;ng một c&aacute;ch độc lập v&agrave; đồng thời. Đầu ra từ mỗi bộ xử l&yacute; sẽ được so s&aacute;nh v&agrave; đầu ra ch&iacute;nh x&aacute;c sẽ được chọn v&agrave; chuyển đến hệ thống.</p> <h3 id="ftoc-heading-30" class="ftwp-heading" style="text-align: justify;"><strong>Kết cấu</strong></h3> <p style="text-align: justify;">C&aacute;c thực thể bao gồm như sau:</p> <ol style="text-align: justify;"> <li aria-level="1">Đối tượng gửi gửi th&ocirc;ng tin đầu v&agrave;o cho đối tượng ph&acirc;n phối chứ kh&ocirc;ng phải trực tiếp đến hệ thống.</li> <li aria-level="1">Đối tượng ph&acirc;n phối khởi tạo tất cả c&aacute;c bộ xử l&yacute; v&agrave; cung cấp c&ugrave;ng một đầu v&agrave;o cho từng bộ xử l&yacute; tương ứng để xử l&yacute;.</li> <li aria-level="1">Bộ xử l&yacute; 1, Bộ xử l&yacute; 2 v&agrave; Bộ xử l&yacute; 3 nhận đầu v&agrave;o từ đối tượng ph&acirc;n phối v&agrave; mỗi đối tượng thực hiện c&ugrave;ng một thao t&aacute;c tr&ecirc;n đầu v&agrave;o một c&aacute;ch độc lập.</li> <li aria-level="1">Tất cả ba bộ xử l&yacute; cung cấp đầu ra của ch&uacute;ng cho bộ so s&aacute;nh sau khi ch&uacute;ng đ&atilde; ho&agrave;n th&agrave;nh xử l&yacute; đầu v&agrave;o. Bộ so s&aacute;nh nhận kết quả đầu ra từ Bộ xử l&yacute; v&agrave; so s&aacute;nh tr&ecirc;n ba kết quả đầu ra. N&oacute; chọn ra một kết quả đầu ra v&agrave; loại bỏ bộ xử l&yacute; kh&ocirc;ng cung cấp đầu ra hoặc đầu ra kh&ocirc;ng ch&iacute;nh x&aacute;c, một đầu ra kh&aacute;c với đầu ra m&agrave; n&oacute; đ&atilde; chọn l&agrave; đ&uacute;ng.</li> <li aria-level="1">Bộ so s&aacute;nh cung cấp đầu ra ch&iacute;nh x&aacute;c cho hệ thống. Hệ thống đại diện cho ứng dụng hoặc m&ocirc;i trường được bảo vệ sẽ lấy kết quả đầu ra ch&iacute;nh x&aacute;c từ bộ so s&aacute;nh.</li> </ol> <h3 id="ftoc-heading-31" class="ftwp-heading" style="text-align: justify;"><strong>Kết quả</strong></h3> <p style="text-align: justify;">M&ocirc; h&igrave;nh sao ch&eacute;p chủ động c&oacute; những ưu điểm như sau.</p> <ol style="text-align: justify;"> <li aria-level="1">Tổng thời gian trong qu&aacute; tr&igrave;nh thực thi hệ thống kh&ocirc;ng c&oacute; lỗi l&agrave; thấp. Khi c&oacute; lỗi, chi ph&iacute; về thời gian cũng thấp.</li> <li aria-level="1">Độ phức tạp của thiết kế tương đối thấp.</li> </ol> <p style="text-align: justify;">M&ocirc; h&igrave;nh c&oacute; những nhược điểm sau.</p> <ol style="text-align: justify;"> <li aria-level="1">Chi ph&iacute; về kh&ocirc;ng gian rất cao.</li> <li aria-level="1">Bộ ph&acirc;n phối v&agrave; bộ so s&aacute;nh cũng l&agrave; những điểm c&oacute; lỗi duy nhất trong hệ thống.</li> </ol> <h2 id="ftoc-heading-32" class="ftwp-heading" style="text-align: justify;"><strong>Kết luận</strong></h2> <p style="text-align: justify;">Ch&uacute;ng ta c&oacute; thể n&oacute;i rằng mục ti&ecirc;u của việc tạo ra một hệ thống kh&aacute;ng lỗi l&agrave; để ngăn chặn sự gi&aacute;n đoạn ph&aacute;t sinh từ một điểm lỗi duy nhất, đảm bảo t&iacute;nh khả dụng cao của c&aacute;c ứng dụng hoặc hệ thống quan trọng. N&oacute; gi&uacute;p c&ocirc;ng việc kinh doanh vẫn diễn ra tốt đẹp v&agrave; su&ocirc;n sẻ.</p> <hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p>