Lạc quan so với khóa bi quan


572

Tôi hiểu sự khác biệt giữa khóa lạc quan và bi quan. Bây giờ ai đó có thể giải thích cho tôi khi tôi sẽ sử dụng một trong hai nói chung?

Và câu trả lời cho câu hỏi này có thay đổi hay không tùy thuộc vào việc tôi có sử dụng thủ tục được lưu trữ để thực hiện truy vấn không?

Nhưng chỉ để kiểm tra, lạc quan có nghĩa là "không khóa bàn trong khi đọc" và bi quan có nghĩa là "khóa bàn trong khi đọc".



1
Đó là một câu hỏi hay đặc biệt bởi vì trong tính tuần tự tôi đã đọc At any technique type conflicts should be detected and considered, with similar overhead for both materialized and non-materialized conflicts.
Người ngoài hành tinh nhỏ

1
Ở đây bạn có thể tìm thấy một lời giải thích tốt, ở đây trên SO, về khái niệm gốc của Khóa lạc quan là gì .
Diego Mazzaro

Câu trả lời:


812

Khóa tối ưu là một chiến lược mà bạn đọc bản ghi, lưu ý số phiên bản (các phương pháp khác để thực hiện việc này liên quan đến ngày, dấu thời gian hoặc tổng kiểm tra / băm) và kiểm tra xem phiên bản đã thay đổi trước khi bạn viết lại bản ghi. Khi bạn viết lại bản ghi, bạn lọc bản cập nhật trên phiên bản để đảm bảo nó là nguyên tử. (tức là chưa được cập nhật giữa khi bạn kiểm tra phiên bản và ghi bản ghi vào đĩa) và cập nhật phiên bản trong một lần nhấn.

Nếu bản ghi bị bẩn (tức là phiên bản khác với bản ghi của bạn), bạn hủy bỏ giao dịch và người dùng có thể khởi động lại nó.

Chiến lược này được áp dụng nhiều nhất cho các hệ thống khối lượng lớn và kiến ​​trúc ba tầng mà bạn không nhất thiết phải duy trì kết nối với cơ sở dữ liệu cho phiên của mình. Trong tình huống này, máy khách thực sự không thể duy trì các khóa cơ sở dữ liệu vì các kết nối được lấy từ một nhóm và bạn không thể sử dụng cùng một kết nối từ một truy cập đến tiếp theo.

Khóa bi quan là khi bạn khóa bản ghi để sử dụng độc quyền cho đến khi bạn hoàn thành nó. Nó có tính toàn vẹn tốt hơn nhiều so với khóa lạc quan nhưng đòi hỏi bạn phải cẩn thận với thiết kế ứng dụng của mình để tránh Deadlocks . Để sử dụng khóa bi quan, bạn cần kết nối trực tiếp với cơ sở dữ liệu (như trường hợp trong ứng dụng máy chủ hai tầng ) hoặc ID giao dịch có sẵn bên ngoài có thể được sử dụng độc lập với kết nối.

Trong trường hợp sau, bạn mở giao dịch với TxID và sau đó kết nối lại bằng ID đó. DBMS duy trì các khóa và cho phép bạn chọn phiên sao lưu thông qua TxID. Đây là cách các giao dịch phân tán sử dụng giao thức cam kết hai pha (như XA hoặc COM + Giao dịch ) hoạt động.


148
Khóa tối ưu không nhất thiết phải sử dụng số phiên bản. Các chiến lược khác bao gồm sử dụng (a) dấu thời gian hoặc (b) toàn bộ trạng thái của hàng. Chiến lược thứ hai là xấu nhưng tránh sự cần thiết của một cột phiên bản dành riêng, trong trường hợp bạn không thể sửa đổi lược đồ.
Andrew Swan

2
@geek - Các giao thức giao dịch phân tán như XA cho phép một số nhận dạng giao dịch riêng biệt được kiểm tra lại xung quanh một hoặc nhiều hệ thống. Loại giao thức này cho phép các khóa được sử dụng thông qua các kết nối gộp vì số nhận dạng giao dịch được tách rời khỏi các phiên và được cung cấp rõ ràng. Tuy nhiên, điều này không phát sinh một số chi phí và dễ bị rò rỉ khóa và số nhận dạng giao dịch nếu ứng dụng của bạn không cẩn thận trong việc theo dõi chúng. Đó là một giải pháp nặng hơn nhiều.
Mối quan

22
@supercat - Không đồng ý rằng khóa lạc quan chính xác dưới 100% - miễn là nó kiểm tra tất cả các hồ sơ đầu vào cho giao dịch không bị thay đổi trong thời gian, nó chính xác như khóa bi quan (chọn kiểu cập nhật) cùng hồ sơ. Sự khác biệt chính là khóa lạc quan chỉ phát sinh chi phí khi có xung đột, trong khi khóa bi quan đã giảm chi phí xung đột. Vì vậy, lạc quan là tốt nhất trong trường hợp hầu hết các giao dịch không xung đột - điều mà tôi hy vọng thường là trường hợp của hầu hết các ứng dụng.
RichVel

2
@Legends - Sử dụng khóa optimsitic chắc chắn sẽ là một chiến lược phù hợp cho một ứng dụng web.
Mối quan tâmOfTunbridgeWells

2
Bạn nên đề cập rằng sự lựa chọn cũng phụ thuộc vào tỷ lệ đọc so với ghi: nếu ứng dụng của bạn chủ yếu là ứng dụng chỉ đọc bởi nhiều người dùng và đôi khi bạn ghi dữ liệu, hơn là khóa tối ưu. Ví dụ, StackOverflow có rất nhiều người đọc các trang và đôi khi có ai đó chỉnh sửa một trang: trong khóa bi quan, ai sẽ nhận được khóa? cái đầu tiên? Trong khóa lạc quan, người muốn chỉnh sửa trang có thể làm điều đó miễn là anh ta có phiên bản cuối cùng của nó.
jehon

177

Khóa tối ưu được sử dụng khi bạn không mong đợi nhiều va chạm. Chi phí ít hơn để thực hiện một hoạt động bình thường nhưng nếu xảy ra va chạm, bạn sẽ trả giá cao hơn để giải quyết vì giao dịch bị hủy bỏ.

Khóa bi quan được sử dụng khi dự đoán va chạm. Các giao dịch vi phạm đồng bộ hóa đơn giản là bị chặn.

Để chọn cơ chế khóa phù hợp, bạn phải ước tính số lượng đọc và viết và lập kế hoạch cho phù hợp.


Trong trường hợp bình thường, câu lệnh là hoàn hảo nhưng trong trường hợp đặc biệt khi bạn có thể quản lý thao tác CAS cho phép tính không chính xác như @skaffman đã đề cập trong câu trả lời, tôi sẽ nói điều đó thực sự phụ thuộc.
Nghe

75

Lạc quan cho rằng sẽ không có gì thay đổi trong khi bạn đọc nó.

Pessimistic giả định rằng một cái gì đó sẽ và do đó khóa nó.

Nếu nó không cần thiết rằng dữ liệu được đọc hoàn hảo, hãy sử dụng lạc quan. Bạn có thể nhận được số đọc 'bẩn' kỳ quặc - nhưng ít có khả năng dẫn đến bế tắc và tương tự.

Hầu hết các ứng dụng web đều ổn với các lần đọc bẩn - trong trường hợp hiếm hoi, dữ liệu không chính xác về lần tải lại tiếp theo.

Đối với các hoạt động dữ liệu chính xác (như trong nhiều giao dịch tài chính) sử dụng bi quan. Điều cần thiết là dữ liệu được đọc chính xác, không có thay đổi không được hiển thị - chi phí khóa thêm là đáng giá.

Ồ, và máy chủ Microsoft SQL mặc định khóa trang - về cơ bản là hàng bạn đang đọc và một vài bên. Khóa hàng chính xác hơn nhưng chậm hơn nhiều. Thường đáng để đặt các giao dịch của bạn thành cam kết đọc hoặc không khóa để tránh bế tắc trong khi đọc.


Khóa tối ưu JPA cho phép bạn đảm bảo tính nhất quán đọc.
Gili

4
Tính nhất quán của đọc là một mối quan tâm riêng biệt - với PostgreSQL, Oracle và nhiều cơ sở dữ liệu khác, bạn có được một cái nhìn nhất quán về dữ liệu bất kể mọi cập nhật chưa được cam kết và không bị ảnh hưởng ngay cả khi khóa hàng độc quyền.
RichVel

Tôi phải đồng ý với @RichVel. Một mặt, tôi có thể thấy cách khóa bi quan có thể ngăn chặn việc đọc bẩn nếu mức cô lập giao dịch của bạn KHÔNG ĐỌC. Nhưng thật sai lầm khi nói rằng khóa lạc quan dễ bị đọc bẩn mà không đề cập đến việc hầu hết các cơ sở dữ liệu (bao gồm cả MS SQL Server) có mức cách ly mặc định là "ĐỌC CAM KẾT", ngăn chặn việc đọc bẩn và giúp khóa lạc quan chính xác như bi quan.
antinome

Eric Brower nói rằng các chủ ngân hàng, không giống như những người khác, thích các hoạt động bẩn. Đạo sư của bạn dường như hoàn toàn ra khỏi xe đẩy.
Người ngoài hành tinh nhỏ

1
Eric Brewer là bậc thầy đã đưa ra định lý CAP nói về tính nhất quán trong hoạt động ngân hàng . Nó trái ngược với những gì bạn tôn vinh nó cho.
Người ngoài hành tinh nhỏ

50

Ngoài những gì đã được nói:

  • Cần phải nói rằng optimistickhóa có xu hướng cải thiện đồng thời với chi phí dự đoán.
  • Pessimistickhóa có xu hướng giảm đồng thời, nhưng dễ dự đoán hơn. Bạn trả tiền của bạn, vv ...

3
Tôi không thấy khả năng dự đoán (tuy nhiên bạn xác định nó) được cải thiện với khóa bi quan - nếu bạn có nghĩa là 'giao dịch có thể hoàn thành sau khi khóa được thực hiện' thì bạn đã đúng, nhưng cho đến khi giao dịch có tất cả các khóa được yêu cầu, nó có thể phải đối mặt với sự chậm trễ các khóa còn lại và trên thực tế có thể bị hủy bỏ do logic phát hiện bế tắc + logic phân giải của DB. Các ứng dụng sử dụng khóa bi quan có thể có thời gian thực hiện rất khó đoán - ví dụ kinh điển là ai đó khóa bản ghi X sau đó đi ăn trưa, sau đó người dùng khóa bản ghi X và Y, sau đó là Y và Z khác, cho đến khi hầu hết người dùng bị chặn. ..
RichVel

40

Khi giải quyết xung đột, bạn có hai lựa chọn:

  • Bạn có thể cố gắng tránh xung đột, và đó là những gì Pessimistic Locking làm.
  • Hoặc, bạn có thể cho phép xung đột xảy ra, nhưng bạn cần phát hiện ra khi thực hiện các giao dịch của mình và đó là điều mà Optimistic Locking thực hiện.

Bây giờ, hãy xem xét sự bất thường Cập nhật bị mất sau đây :

Mất cập nhật

Sự bất thường của Cập nhật bị mất có thể xảy ra ở cấp độ cô lập Đọc cam kết .

Trong sơ đồ trên, chúng ta có thể thấy Alice tin rằng cô ấy có thể rút 40 từ cô ấy accountnhưng không nhận ra rằng Bob vừa thay đổi số dư tài khoản và hiện chỉ còn 20 tài khoản trong tài khoản này.

Khóa bi quan

Khóa bi quan đạt được mục tiêu này bằng cách lấy khóa chia sẻ hoặc đọc trên tài khoản để Bob không bị thay đổi tài khoản.

Mất cập nhật Khóa bi quan

Trong sơ đồ trên, cả Alice và Bob sẽ có được khóa đọc trên accounthàng của bảng mà cả hai người dùng đã đọc. Cơ sở dữ liệu có được các khóa này trên SQL Server khi sử dụng Đọc lặp lại hoặc Nối tiếp.

Bởi vì cả Alice và Bob đều đã đọc accountgiá trị PK của 1, không ai trong số họ có thể thay đổi nó cho đến khi một người dùng nhả khóa đọc. Điều này là do thao tác ghi yêu cầu thu thập khóa ghi / độc quyền và khóa chia sẻ / đọc ngăn chặn khóa ghi / khóa độc quyền.

Chỉ sau khi Alice thực hiện giao dịch của mình và khóa đọc được phát hành trên accounthàng, Bob UPDATEsẽ tiếp tục và áp dụng thay đổi. Cho đến khi Alice phát hành khóa đọc, các khối CẬP NHẬT của Bob.

Để biết thêm chi tiết về cách các khung truy cập dữ liệu sử dụng hỗ trợ khóa bi quan cơ sở dữ liệu cơ bản, hãy xem bài viết này .

Khóa lạc quan

Khóa tối ưu cho phép xảy ra xung đột nhưng phát hiện ra khi áp dụng CẬP NHẬT của Alice khi phiên bản đã thay đổi.

Giao dịch cấp ứng dụng

Lần này, chúng tôi có một versioncột bổ sung . Các versioncột được tăng lên mỗi lần một UPDATE hoặc DELETE được thực thi, và nó cũng được sử dụng trong mệnh đề WHERE của UPDATE và DELETE báo cáo. Để làm việc này, chúng ta cần phát hành CHỌN và đọc dòng điện versiontrước khi thực hiện CẬP NHẬT hoặc XÓA, vì nếu không, chúng ta sẽ không biết giá trị phiên bản nào sẽ chuyển sang mệnh đề WHERE hoặc tăng dần.

Để biết thêm chi tiết về cách các khung truy cập dữ liệu thực hiện khóa tối ưu, hãy xem bài viết này .

Giao dịch cấp ứng dụng

Các hệ thống cơ sở dữ liệu quan hệ đã xuất hiện vào cuối thập niên 70 đầu thập niên 80 khi khách hàng thường kết nối với máy tính lớn thông qua thiết bị đầu cuối. Đó là lý do tại sao chúng ta vẫn thấy các hệ thống cơ sở dữ liệu xác định các thuật ngữ như cài đặt SESSION.

Ngày nay, qua Internet, chúng tôi không còn thực hiện đọc và ghi trong ngữ cảnh của cùng một giao dịch cơ sở dữ liệu và ACID không còn đủ nữa.

Ví dụ, hãy xem xét trường hợp sử dụng sau:

nhập mô tả hình ảnh ở đây

Nếu không có khóa lạc quan, không có cách nào Bản cập nhật bị mất này có thể bị bắt ngay cả khi các giao dịch cơ sở dữ liệu được sử dụng Nối tiếp. Điều này là do việc đọc và ghi được thực thi trong các yêu cầu HTTP riêng biệt, do đó trên các giao dịch cơ sở dữ liệu khác nhau.

Vì vậy, khóa lạc quan có thể giúp bạn ngăn chặn Cập nhật bị mất ngay cả khi sử dụng các giao dịch cấp ứng dụng kết hợp cả thời gian suy nghĩ của người dùng.

Để biết thêm chi tiết về các giao dịch cấp độ ứng dụng hoặc logic, hãy xem bài viết này .

Phần kết luận

Khóa tối ưu là một kỹ thuật rất hữu ích và nó chỉ hoạt động tốt ngay cả khi sử dụng các mức cô lập ít nghiêm ngặt hơn, như Đọc cam kết hoặc khi đọc và ghi được thực hiện trong các giao dịch cơ sở dữ liệu tiếp theo.

Nhược điểm của khóa lạc quan là việc khôi phục sẽ được kích hoạt bởi khung truy cập dữ liệu khi bắt được OptimisticLockException, do đó mất tất cả công việc chúng tôi đã thực hiện trước đó bởi giao dịch hiện đang thực hiện.

Càng nhiều tranh chấp, càng nhiều xung đột và cơ hội hủy bỏ các giao dịch càng lớn. Rollback có thể tốn kém cho hệ thống cơ sở dữ liệu vì nó cần hoàn nguyên tất cả các thay đổi đang chờ xử lý hiện tại có thể liên quan đến cả hàng bảng và bản ghi chỉ mục.

Vì lý do này, khóa bi quan có thể là quặng phù hợp khi xung đột xảy ra thường xuyên, vì nó làm giảm cơ hội quay trở lại giao dịch.


Đối với những kịch bản nào bạn sẽ đề xuất để chọn OptimisticLocking và PessimisticLocking? Có phụ thuộc vào tần suất OptimisticLockException xảy ra không?
Mèo Tonerpson

1
Nó phụ thuộc vào trường hợp sử dụng. Đôi khi, khóa lạc quan là giải pháp duy nhất (ví dụ: giao dịch đa yêu cầu). Những lần khác, khóa bi quan là giải pháp duy nhất (ví dụ: khóa tư vấn PostgreSQL ). Đôi khi, bạn phải kết hợp chúng, giống như trường hợp của nó PESSIMISTIC_FORCE_INCREMENT.
Vlad Mihalcea

22

Tôi sẽ nghĩ đến một trường hợp nữa khi khóa bi quan sẽ là lựa chọn tốt hơn.

Để khóa lạc quan, mọi người tham gia sửa đổi dữ liệu phải đồng ý sử dụng loại khóa này. Nhưng nếu ai đó sửa đổi dữ liệu mà không quan tâm đến cột phiên bản, điều này sẽ làm hỏng toàn bộ ý tưởng về việc khóa lạc quan.


Những người cố gắng sử dụng khóa lạc quan và bi quan cũng có thể giẫm lên chân nhau, có thể nói như vậy. Tưởng tượng một kịch bản trong đó một phiên lạc quan đọc một bản ghi và đang thực hiện một số tính toán trong khi một phiên bi quan cập nhật bản ghi, sau đó phiên lạc quan quay lại và cập nhật cùng một bản ghi mà không lưu ý bất kỳ thay đổi nào được thực hiện. Chọn ... để cập nhật chỉ hoạt động nếu mọi phiên sử dụng cùng một cú pháp.
lusional

Giải thích tốt, cho bạn bỏ phiếu từ tôi
Dulaj Kulathunga

15

Về cơ bản có hai câu trả lời phổ biến nhất. Người đầu tiên về cơ bản nói

Lạc quan cần một kiến ​​trúc ba tầng trong đó bạn không nhất thiết phải duy trì kết nối với cơ sở dữ liệu cho phiên của mình trong khi Khóa Pessimistic là khi bạn khóa bản ghi để sử dụng riêng cho đến khi bạn kết thúc với nó. Nó có tính toàn vẹn tốt hơn nhiều so với khóa lạc quan, bạn cần kết nối trực tiếp với cơ sở dữ liệu.

Một câu trả lời khác là

lạc quan (phiên bản) nhanh hơn vì không khóa nhưng khóa (bi quan) hoạt động tốt hơn khi sự tranh chấp cao và tốt hơn là ngăn chặn công việc thay vì loại bỏ nó và bắt đầu lại.

hoặc là

Khóa tối ưu hoạt động tốt nhất khi bạn có va chạm hiếm

Khi nó được đặt trên trang này.

Tôi đã tạo ra câu trả lời của mình để giải thích "giữ kết nối" có liên quan đến "va chạm thấp" như thế nào.

Để hiểu chiến lược nào là tốt nhất cho bạn, hãy nghĩ không phải về Giao dịch mỗi giây mà DB của bạn có mà là thời lượng của một giao dịch. Thông thường, bạn mở trasnaction, thực hiện thao tác và đóng giao dịch. Đây là một giao dịch ngắn, cổ điển mà ANSI đã nghĩ đến và sẽ ổn khi thoát khỏi việc khóa. Nhưng, làm thế nào để bạn thực hiện một hệ thống đặt vé trong đó nhiều khách hàng đặt cùng một phòng / ghế cùng một lúc?

Bạn duyệt các ưu đãi, điền vào mẫu với nhiều tùy chọn có sẵn và giá hiện tại. Phải mất rất nhiều thời gian và các tùy chọn có thể trở nên lỗi thời, tất cả giá không hợp lệ giữa bạn bắt đầu điền vào biểu mẫu và nhấn nút "Tôi đồng ý" vì không có khóa nào trên dữ liệu bạn đã truy cập và ai đó, nhanh nhẹn hơn, đã bị xâm phạm thay đổi tất cả giá và bạn cần khởi động lại với giá mới.

Thay vào đó, bạn có thể khóa tất cả các tùy chọn khi bạn đọc chúng. Đây là kịch bản bi quan. Bạn thấy tại sao nó hút. Hệ thống của bạn có thể được đưa xuống bởi một chú hề đơn giản chỉ cần bắt đầu đặt chỗ và hút thuốc. Không ai có thể bảo lưu bất cứ điều gì trước khi anh ta kết thúc. Dòng tiền của bạn giảm xuống không. Đó là lý do tại sao, đặt phòng lạc quan được sử dụng trong thực tế. Những người nhận thức quá lâu phải khởi động lại đặt phòng của họ với giá cao hơn.

Theo cách tiếp cận lạc quan này, bạn phải ghi lại tất cả dữ liệu mà bạn đã đọc (như trong phần Đọc lặp lại của tôi ) và đi đến điểm cam kết với phiên bản dữ liệu của bạn (Tôi muốn mua cổ phiếu ở mức giá bạn hiển thị trong báo giá này, không phải giá hiện tại ). Tại thời điểm này, giao dịch ANSI được tạo, khóa DB, kiểm tra xem không có gì thay đổi và cam kết / hủy bỏ hoạt động của bạn. IMO, đây là mô phỏng hiệu quả của MVCC , cũng liên quan đến Optimistic CC và cũng giả định rằng giao dịch của bạn khởi động lại trong trường hợp hủy bỏ, đó là bạn sẽ đặt chỗ mới. Một giao dịch ở đây liên quan đến một quyết định người dùng.

Tôi không hiểu cách thực hiện MVCC theo cách thủ công nhưng tôi nghĩ rằng các giao dịch dài hạn với tùy chọn khởi động lại là chìa khóa để hiểu chủ đề. Sửa tôi nếu tôi sai ở bất cứ đâu. Câu trả lời của tôi đã được thúc đẩy bởi chương Alex Kuznecov này .


12

Trong hầu hết các trường hợp, khóa lạc quan là hiệu quả hơn và cung cấp hiệu suất cao hơn. Khi lựa chọn giữa khóa bi quan và lạc quan, hãy xem xét những điều sau:

  • Khóa bi quan rất hữu ích nếu có nhiều cập nhật và cơ hội tương đối cao của người dùng cố gắng cập nhật dữ liệu cùng một lúc. Ví dụ: nếu mỗi hoạt động có thể cập nhật một số lượng lớn hồ sơ cùng một lúc (ngân hàng có thể thêm thu nhập lãi vào mỗi tài khoản vào cuối mỗi tháng) và hai ứng dụng đang chạy các hoạt động đó cùng một lúc, chúng sẽ có xung đột .

  • Khóa bi quan cũng thích hợp hơn trong các ứng dụng chứa các bảng nhỏ thường xuyên được cập nhật. Trong trường hợp của những điểm được gọi là điểm nóng này, các xung đột có thể xảy ra đến mức việc khóa lạc quan sẽ lãng phí công sức trong việc đẩy lùi các giao dịch xung đột.

  • Khóa tối ưu là hữu ích nếu khả năng xảy ra xung đột là rất thấp - có nhiều hồ sơ nhưng tương đối ít người dùng, hoặc rất ít cập nhật và chủ yếu là các hoạt động kiểu đọc.


3

Một trường hợp sử dụng để khóa tối ưu là để ứng dụng của bạn sử dụng cơ sở dữ liệu để cho phép một trong các luồng / máy chủ của bạn 'yêu cầu' một tác vụ. Đây là một kỹ thuật có ích cho tôi một cách thường xuyên.

Ví dụ tốt nhất tôi có thể nghĩ đến là cho một hàng đợi nhiệm vụ được triển khai bằng cơ sở dữ liệu, với nhiều luồng xử lý các nhiệm vụ đồng thời. Nếu một tác vụ có trạng thái 'Có sẵn', 'Đã xác nhận', 'Đã hoàn thành', truy vấn db có thể nói một cái gì đó như "Đặt trạng thái = 'Đã xác nhận' trong đó trạng thái = 'Có sẵn'. Nếu nhiều luồng cố gắng thay đổi trạng thái theo cách này, tất cả trừ luồng đầu tiên sẽ thất bại vì dữ liệu bẩn.

Lưu ý rằng đây là trường hợp sử dụng chỉ liên quan đến khóa lạc quan. Vì vậy, thay thế cho câu nói "Khóa tối ưu được sử dụng khi bạn không mong đợi nhiều va chạm", nó cũng có thể được sử dụng khi bạn mong đợi va chạm nhưng muốn chính xác một giao dịch thành công.


3

Rất nhiều điều tốt đẹp đã được nói ở trên về khóa lạc quan và bi quan. Một điểm quan trọng cần xem xét là như sau:

Khi sử dụng khóa lạc quan, chúng ta cần thận trọng về thực tế rằng ứng dụng sẽ phục hồi như thế nào sau những thất bại này.

Đặc biệt trong các kiến ​​trúc điều khiển thông điệp không đồng bộ, điều này có thể dẫn đến việc xử lý tin nhắn không theo thứ tự hoặc mất cập nhật.

Kịch bản thất bại cần phải được suy nghĩ thông qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.