Trong những ngày đầu của máy tính, không có nhu cầu về các giao dịch phân tán. Khi số lượng ứng dụng tăng lên, việc đồng bộ hóa dữ liệu trở thành một vấn đề quan trọng. Các công ty đã trả rất nhiều tiền để duy trì các hệ thống đồng bộ về luồng dữ liệu. Kết quả là, giao thức cam kết 2 pha được gọi là XA (Kiến trúc eXtended) đã xuất hiện. Giao thức này cung cấp các thuộc tính giống như ACID để xử lý giao dịch toàn cầu. Trong suốt bài viết này, tôi sẽ cố gắng giải thích chi tiết về các giao dịch XA và cách sử dụng Giao dịch XA trong khuôn khổ Spring.

Giao thức cam kết 2 pha là một giao thức cam kết nguyên tử cho các hệ thống phân tán. Giao thức này như tên gọi của nó bao gồm hai giai đoạn. Đầu tiên là giai đoạn yêu cầu cam kết, trong đó người quản lý giao dịch điều phối tất cả các tài nguyên giao dịch để cam kết hoặc hủy bỏ. Trong giai đoạn cam kết, người quản lý giao dịch quyết định kết thúc hoạt động bằng cách cam kết hoặc hủy bỏ theo các phiếu bầu của mỗi tài nguyên giao dịch. Tiếp theo chúng ta sẽ chuyển sang chi tiết triển khai của giao thức 2PC.

Xem tại đây để biết các tài nguyên về Khả năng tương tác Java + .NET thông qua 2PC.

Các giao dịch XA cần một id giao dịch toàn cầu và id giao dịch cục bộ (xid) cho mỗi tài nguyên XA. Mỗi Tài nguyên XA được đưa vào Trình quản lý XA bằng phương thức start (xid). Phương thức này cho biết Tài nguyên XA đang tham gia vào giao dịch (sẵn sàng cho hoạt động). Sau đó, giai đoạn đầu tiên của giao thức 2PC được thực hiện bằng cách gọi phương thức chuẩn bị (xid). Phương thức này yêu cầu bỏ phiếu OK hoặc ABORT từ Tài nguyên XA. Sau khi nhận được phiếu bầu từ mỗi Tài nguyên XA, Người quản lý XA quyết định thực hiện hoạt động cam kết (xid) nếu tất cả Tài nguyên XA gửi OK hoặc quyết định thực hiện khôi phục (xid) nếu Tài nguyên XA gửi ABORT. Cuối cùng, phương thức end (xid) được gọi cho mỗi Tài nguyên XA thông báo rằng giao dịch đã hoàn tất. Nhìn vào hình để hiểu rõ hơn. Khi chúng ta xây dựng nền tảng về triển khai giao dịch XA, tiếp theo chúng ta sẽ đi sâu hơn và xem nhập lệnh này lệnh này, lệnh này về các lỗi và các giải pháp khả thi.


Lỗi có thể xảy ra bất cứ lúc nào do mất mạng, sập máy và một số sai lầm của quản trị viên. Trong giao dịch XA, chúng tôi sẽ phân loại các lỗi này theo các giai đoạn mà chúng xảy ra. Giai đoạn thất bại đầu tiên là trước khi giao thức được bắt đầu. Đây là một lỗi đơn giản mà hệ thống không cần khôi phục hoặc bất kỳ loại hoạt động nào. Chúng tôi chỉ không thực hiện hoạt động cho thời điểm cụ thể đó. Thứ hai gõ lệnh này lệnh này lệnh này lỗi có thể xảy ra ở giai đoạn chuẩn bị (yêu cầu cam kết) mà có thể dễ dàng xử lý bằng cách quay lại sử dụng các chính sách thời gian chờ. Cuối cùng nhưng không kém phần quan trọng là lỗi giai đoạn cam kết có thể xảy ra do quá trình khôi phục không đầy đủ và bất kỳ vấn đề nào trong chuỗi. Trong tất cả những tình huống trên, người quản lý giao dịch cố gắng khắc phục sự cố. Tiếp theo chúng ta sẽ xem người quản lý giao dịch cố gắng vượt qua thất bại như thế nào.

Khi khôi phục, trình quản lý giao dịch gọi phương thức khôi phục của từng tài nguyên XA. XA Resources theo dõi các bản ghi và cố gắng xây dựng lại tình trạng mới nhất của nó. Người quản lý giao dịch gọi các hoạt động khôi phục cần thiết và nhiệm vụ đã hoàn thành. Quá trình này có vẻ là một con đường hạnh phúc nhưng có rất nhiều trường hợp ngoại lệ mà các bản ghi có vấn đề như bị hỏng. Trong những tình huống này, người quản lý giao dịch tuân theo một số kinh nghiệm để giải quyết vấn đề. Hơn nữa, quá trình khôi phục phụ thuộc vào nhật ký ghi trước nơi bạn viết nhật ký hoạt động trước khi áp dụng. Về các vấn đề hiệu suất, các nhật ký này được viết theo định dạng riêng (không sử dụng bất kỳ tuần tự hóa nào) và hệ thống nên xử lý hàng loạt chúng nếu có thể. Tiếp theo chúng ta đi đến phần thú vị là hỗ trợ giao dịch XA bằng khung Spring.

Spring framework cung cấp môi trường rộng rãi để phát triển web và các ứng dụng độc lập. Giống như các tiện ích khác mà nó cung cấp, các giao dịch XA cũng được hỗ trợ bởi Spring. Tuy nhiên, hỗ trợ này không phải là triển khai gốc và yêu cầu chế độ ngủ đông, vùng chứa web hoặc khung cung cấp Quản lý giao dịch XA. Spring có JtaTransactionManager cung cấp các tiện ích quản lý giao dịch và ẩn các chi tiết. Bằng cách này, chúng tôi có thể quản lý giao dịch cho nhiều Nguồn dữ liệu được cập nhật đồng thời. Khi nói đến việc sử dụng Quản lý giao dịch XA, hỗ trợ vùng chứa ngủ đông và web cho các giao dịch XA đã được ghi lại đầy đủ, không cần phải đề cập đến. Tuy nhiên, làm việc với một khuôn khổ cung cấp các giao dịch XA có thể gây nhầm lẫn. Vì vậy, tôi sẽ tiếp tục bài đăng này bằng cách giới thiệu Trình quản lý giao dịch Bitronix.

Bitronix được cấu hình dễ dàng đồng thời hỗ trợ tốt cho việc quản lý giao dịch. Nó không thường được sử dụng trong các ứng dụng độc lập nhưng tôi sẽ cố gắng đưa ra cấu hình cho ứng dụng độc lập như sau.

Bây giờ chúng ta có thể có nhiều nguồn dữ liệu có thể được định cấu hình như sau. Mỗi nguồn dữ liệu phải có một thuộc tính uniqueName là duy nhất. Cấu hình bên dưới dành cho Oracle, các cơ sở dữ liệu khác có thể có các cấu hình khác nhau. Về bất kỳ chi tiết nào khác, bạn có thể kiểm tra trang web Bitronix.

Tóm lại, chúng tôi đã cố gắng giải thích Giao dịch XA là gì, các giao thức cơ bản và tích hợp Quản lý giao dịch Bitronix với Spring trong một ứng dụng độc lập. Để mở rộng, Giao dịch XA cung cấp việc sửa đổi các nguồn dữ liệu khác nhau cùng một lúc. Hơn nữa, Giao dịch XA được hỗ trợ bởi các vùng chứa web hoặc ngủ đông như các khuôn khổ. Tuy nhiên, chúng tôi có thể cần phải tích hợp quản lý giao dịch vào một ứng dụng độc lập, trong đó chúng tôi phải định cấu hình trình quản lý giao dịch. Do đó, giao dịch XA cung cấp các hoạt động nhất quán trên nhiều nguồn dữ liệu và các công ty sử dụng chúng.
Chúng tôi hy vọng bài viết này đã giúp bạn với Cách thực hiện giao dịch XA (Cam kết 2 giai đoạn): Hướng dẫn đơn giản. Nếu bạn có bất kỳ câu hỏi nào khác, chúng tôi sẽ sẵn lòng trả lời bạn; xin vui lòng liên hệ với chúng tôi trong phần dưới đây. Đừng quên chia sẻ signalfix.net với gia đình và bạn bè của bạn!