apache / apache/servicecomb-java-chassis

微服务实例查询更新存在并发问题,导致先查询的实例状态后更新的问题

Aperta
#3,723 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
1.9k
Fork
814
Merge medio
8g 23h
PR unite (30g)
1

Descrizione

分析ServiceComb 的源码(1.3.8),发现实例查找存在并发问题,导致出现先查询的实例状态后更新的问题。
触发实例查找和更新主要有两个触发源
1)周期查询更新
2)watch触发
不同的来源会在Service Center Task线程池提交查询更新任务,且可能在不同线程中并发执行,主要步骤为:
```bash
触发源(周期/watch) ---> 注册中心查询实例信息 ---> 实例状态更新到本地缓存
```
从代码看,只有更新本地实例状态时才会有锁同步操作,查询实例则可能并发执行。由于线程调度切换问题,因此即使是先查询到的实例状态结果,也有可能被后更新,导致以上结果。
此问题在注册中心实例watch模式下,多个实例同时下线时容易复现,请求会发到已下线的节点而失败。

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia tracciando il flusso di ricerca delle istanze e aggiornamento della local-cache di ServiceComb 1.3.8, sia per gli aggiornamenti periodici sia per i task attivati da watch. Riproduci aggiornamenti concorrenti mentre più istanze passano offline; il lavoro è completato quando un risultato di ricerca precedente non può sovrascrivere uno stato dell’istanza più recente e le requests non vengono inviate ai nodi già contrassegnati come offline.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
distributed-systems
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.