apache / apache/servicecomb-java-chassis
微服务实例查询更新存在并发问题,导致先查询的实例状态后更新的问题
- Lenguaje dominante
- Java
- Estrellas
- 1.9k
- Forks
- 814
- Merge medio
- 8 d 23 h
- PR fusionados (30 d)
- 1
Descripción
分析ServiceComb 的源码(1.3.8),发现实例查找存在并发问题,导致出现先查询的实例状态后更新的问题。
触发实例查找和更新主要有两个触发源
1)周期查询更新
2)watch触发
不同的来源会在Service Center Task线程池提交查询更新任务,且可能在不同线程中并发执行,主要步骤为:
```bash
触发源(周期/watch) ---> 注册中心查询实例信息 ---> 实例状态更新到本地缓存
```
从代码看,只有更新本地实例状态时才会有锁同步操作,查询实例则可能并发执行。由于线程调度切换问题,因此即使是先查询到的实例状态结果,也有可能被后更新,导致以上结果。
此问题在注册中心实例watch模式下,多个实例同时下线时容易复现,请求会发到已下线的节点而失败。
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza trazando el flujo de búsqueda de instancias y actualización de local-cache de ServiceComb 1.3.8, tanto para las actualizaciones periódicas como para las tareas activadas por watch. Reproduce actualizaciones concurrentes mientras varias instancias pasan a estar offline; se considera terminado cuando un resultado de búsqueda antiguo no puede sobrescribir un estado de instancia más reciente y no se envían requests a nodos que ya están marcados como offline.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- distributed-systems
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100