codingapi / codingapi/tx-lcn

同一个微服务模块多实例,TM会发生事物通知TC错乱的问题

Đang mở
#368 22 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
4.2k
Fork
1.4k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

- [ ] I have searched the [issues](https://github.com/codingapi/tx-lcn/issues) of this repository and believe that this is not a duplicate.

### 1. Bug Description
在多台机器上部署相同的服务模块moduleA(ip不同,端口也不同),代开tm的debug日志,发现在请求再moduleA_1的时候是正常的,然后内部服务调用切换到moduleA_2的时候,事物会发生超时,然后才删除redis的资源锁.如果再超时的这段时间内,有去获取排他锁会发生resource loack的异常情况.

在源码排查的情况中发现,在tm进行事务通知tx的时候
![image](https://user-images.githubusercontent.com/11519151/57433478-2b989d80-726b-11e9-956c-5a88d15831b6.png)
只会通知一个? 而且这边获取modId的时候进行获取的是模块名,即使我再tc那边重写的modId的生成规则,但是注册到tm的时候这个再客户端看来是modid的值变成了labelName
所以再通知tc事务的时候错乱了.下面是获取modid的方法
![image](https://user-images.githubusercontent.com/11519151/57433607-7c0ffb00-726b-11e9-8dad-0713224e8381.png)
拿到是moduleA这个模块名,而不是具体的moduleA_1或者module_2具体的服务标识.

### 2. Environment:
- JDK version:1.8
- OS: ubuntu 16.0.4
- TX-LCN version: 5.0.2
- Others:

### 3. Exception Stacktrace

```
Paste your Exception Stacktrace here!
```

### 4. Tour Idea
所以,我这边想问下,当前5.0.2这个版本是不是对提供的modid的更改接口对接到tm的功能是否还没有完成?当前的labelName好像只是作为tm的后台展示所用,并没有其他的作用,那么当前是否不支持tc的多实例的应用?

我们这边对获取modid获取方式进行了更改,取的是labelName而不是appname
![image](https://user-images.githubusercontent.com/11519151/57433873-28ea7800-726c-11e9-9d35-9f4476b5f34c.png)

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Tái hiện luồng đã được báo cáo với hai instance của moduleA bằng môi trường JDK 1.8, Ubuntu 16.04 và TX-LCN 5.0.2 được mô tả. Bắt đầu với các đường dẫn TM transaction-notification và modId registration được hiển thị trong issue, sau đó theo dõi khóa tài nguyên Redis trong quá trình chuyển đổi giữa moduleA_1 và moduleA_2. Hoàn tất nghĩa là các thông báo giữa nhiều instance nhắm đến đúng bên tham gia giao dịch mà không xảy ra lỗi timeout hoặc lỗi khóa tài nguyên.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java, redis
Lĩnh vực
backend, distributed-systems
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.