GitHub user robocanic edited a discussion: 2025-07-13 weekly

# 重构

## Discovery 和 Engine 的重构思路
Discovery 和 Engine从本质上来说其实都是一个list-watch模型。不同的是,Discovery 
watch的数据源一般是注册中心如zk,nacos等,而Engine watch的一般是应用运行引擎如kubernetes,docker compose, 
vm等。kubernetes中提供了[client-go](https://github.com/kubernetes/client-go)来抽象并实现了list
 watch这个机制:
<img width="1200" height="630" alt="image" 
src="https://github.com/user-attachments/assets/60959338-b848-4a57-aa6f-3d1f41d47db4";
 />
1.  Reflector: ListWatch k8s apiserver,监听指定类型的变更事件,将变更信息push 到 Delta FIFO队列中
2.  Informer: 从 Delta FIFO 读出事件,调用Indexer,完成持久化,并分发事件
3.  Indexer:内存索引&存储代理,依托KeyFunc维护索引,调用store的方法后需要更新索引
     <img width="1350" height="991" alt="image" 
src="https://github.com/user-attachments/assets/6b9d0674-d82b-4b12-8b25-75060680b460";
 />
5.  Store: 存储层,key-value类型的存储结构,client-go中已有memory实现
    <img width="1713" height="1380" alt="image" 
src="https://github.com/user-attachments/assets/2fbf0d48-d31d-43c3-99af-7320abba160b";
 />

我们可以将admin中的一些组件映射到上面这张图,Indexer和Store和上图中的组件的定位一模一样,从接口上来说,可以完全复用:
而Discovery和Engine从定位上则包含了Reflector,Queue,Informer这几个组件,即**包含了从指定数据源进行ListWatch,队列缓冲,事件分发,再调用Indexer完成持久化这一过程**


## 任务表

| 需求             | 模块                                                   | 负责人 | 
等级 | 进度 |
| ---------------- | ------------------------------------------------------ | 
------ | ---- | ---- |
| 基础模块统一改造 | 目录结构  冗余代码迁移 配置改造                        | @robocanic   | p0   | 
done |
|                  | 日志库 工具库 error定义和处理 (包括对现有的代码改造) | @mfordjody | p1   |      
|
| 领域模型改造     | 应用,实例,服务等                                     | @robocanic | p0  
 | 80%  |
| 数据存储改造     | Store的DB实现                                          |        | 
p1   |      |
|                  | Indexer的实现                                          |      
  | p2   |      |
|                  | Discovery的zk/nacos实现                          | @tianyi | 
p2   |      |
|                  | Engine的k8s实现                                 |        | p2 
  |      |

# 

GitHub link: https://github.com/apache/dubbo-admin/discussions/1301

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: 
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to