2015-10-02 19 views
8

Gần đây tôi đã đọc nhiều lần rằng cam kết hai giai đoạn là xấu, nhưng luôn luôn là một lưu ý phụ. Vì vậy, không bao giờ có một lời giải thích tốt với nó.Nguyên nhân có thể xảy ra với hai giai đoạn nào?

Ví dụ trong CQRS Journey Chapter 5:

Thứ hai, chúng tôi đang cố gắng để tránh hai giai đoạn cam kết vì họ luôn vấn đề gây ra trong thời gian dài.

Hoặc trong Implementing Domain-Driven Design trên trang 563:

Các ReadRecorts thứ hai() được sử dụng bởi cơ sở hạ tầng để tái tạo sự kiện, để xuất bản chúng mà không cần hai giai đoạn cam kết, ...

Tôi nghĩ rằng hai giai đoạn cam kết được thực hiện để đảm bảo tính nhất quán giữa nhiều máy chủ cơ sở dữ liệu.

Có thể xảy ra sự cố nào khi sử dụng các cam kết hai pha? Tại sao tốt hơn là tránh chúng?

+1

Xem http://www.enterpriseintegrationpatterns.com/docs/IEEE_Software_Design_2PC.pdf – Matt

Trả lời

8

Vấn đề lớn nhất là khả năng mở rộng do tính chất chặn của giao thức cam kết 2 pha.

2PC yêu cầu sự phối hợp cẩn thận giữa các bên tham gia: Cụ thể, mỗi bên phải xác nhận giai đoạn chuẩn bị và cam kết. Khi một bên đã thừa nhận rằng nó đã sẵn sàng cam kết, nó phải chặn cho đến khi điều phối viên giao dịch gửi thông báo cam kết hoặc khôi phục. Nếu một trong các bên là trên một mạng, độ trễ mạng gây ra một nút cổ chai cho giao tiếp giữa các nút.

Hơn nữa, khi một bên đã thừa nhận rằng nó đã sẵn sàng cam kết, nó thực sự phải có khả năng thực hiện giao dịch sau đó ngay cả khi nó bị hỏng inbetween. Điều này đòi hỏi phải kiểm tra để lưu trữ lưu trữ (ngay cả khi giao dịch được khôi phục sau đó) và cũng có thể giới hạn thông lượng.

Các vấn đề liên quan