6

Giả sử tất cả các cơ sở dữ liệu liên quan đến một giao dịch phân tán được thực hiện với tín hiệu cam kết hai pha rằng chúng sẵn sàng cam kết và có các khóa cần thiết. Điều phối viên tín hiệu để cam kết và tất cả các cơ sở dữ liệu thực hiện phần giao dịch của họ, nhưng một cơ sở dữ liệu SQL gặp phải lỗi chia theo số không do kết quả của việc giám sát lập trình không xem xét khả năng đó. Kể từ khi điều phối viên đã báo hiệu cam kết với tất cả mọi người những gì xảy ra như là kết quả của chia cho không?Cam kết hai pha có bảo vệ chống lại thất bại cuối cùng không?

+0

Làm thế nào và khi nào chính xác bạn mong đợi lỗi này xảy ra? Tôi giả định rằng một lỗi như vậy sẽ xảy ra trong giai đoạn một, gây ra một rollback. – Oded

+0

Bạn có nghĩa là định nghĩa của pha precommit là mọi người thực sự thực hiện đầy đủ phần giao dịch của họ và pha cam kết được xác định bằng cách viết "" vào nhật ký nhưng điểm quan trọng là không thực hiện giao dịch thực tế trong giai đoạn cam kết? Tất cả các bài viết về cam kết hai giai đoạn tôi đã gặp không bao giờ chính xác nêu rõ khi mỗi cơ sở dữ liệu thực hiện phần giao dịch của họ – user782220

+1

Vâng, những gì _actually_ xảy ra là thực hiện cụ thể. Nhưng có, điều đó sẽ xảy ra khá nhiều (những thay đổi được thực hiện và điều duy nhất mà các cơ sở dữ liệu phân tán đang chờ đợi là ack từ điều phối viên để "đóng giao dịch" bằng cách cam kết). – Oded

Trả lời

4

Giai đoạn cam kết thứ hai thường không chứa mã người dùng có thể không thành công. Các nhà quản lý tài nguyên tham gia cần đảm bảo rằng không có sự cố nào xảy ra. Nếu bảo lãnh này bị vi phạm, không có sự đảm bảo nào có thể được cung cấp bởi giao thức.

Cam kết hai pha cố gắng giải quyết Two Generals Problem. Không có giải pháp đầy đủ cho vấn đề này. TPC là một xấp xỉ.

Một cách khác TPC có thể bị lỗi là trong trường hợp phân vùng mạng. Một số người quản lý tài nguyên có thể thực hiện cam kết cuối cùng nhưng một số người có thể không nhận được thông báo đó. Một lần nữa, vấn đề này là không thể giải quyết được. Ngay cả thử lại không thể giải quyết nó.

Bạn thậm chí có thể kích hoạt vấn đề này trong điều kiện thế giới thực: Chạy tất cả các nút tham gia trong một thử nghiệm căng thẳng và kéo cáp mạng tại một điểm tùy ý. Với xác suất cao, các cơ sở dữ liệu được phân phối của bạn hiện không phù hợp vì một số thông điệp cam kết bị mất một thời gian rất bất tiện.