原来没事的时候改了一个这样的功能,当时也没有仔细研究,后来也没继续弄。详细可以参考https://www.cnblogs.com/liuzx8888/p/17635913.html
当时有1个问题:新增数据源需要每一个节点都去调取API注册,这样非常麻烦,最近闲下来又研究了一下,在原先的基础上做了一些改造。
具体流程:
具体的流程:
1.新增注册、删除 Catalog的需要的一些Api接口对外提供服务
2.通过 Coordinator 节点 API 注册新的数据源同时将相关的数据源信息保存到数据库,状态Status=2
3.新增 WorkerCatalogSyncTask,Worker节点同步功能,参考了Trino 里面的 CatalogPruneTask功能,通过Coordinator定时任务捕获到新增数据源[Status=2]通知到所有的Worker节点进行注册
4.所有的Worker注册完毕后,修改数据源状态为0
5.让Worker节点启动的时候也能跟Coordinator 一样加载是有数据源 【DynamicCatalogManageMoudle 模式、文件模式本来就可以加载的】
这样的改造好处就是所有的Catalog存储在数据库不容易丢失,无论哪个服务器托管节点失败了或者新增节点都能从数据库获取到服务器托管最近的Catalog目录,保证每个节点的Catalog都是最新的。
具体的一些代码实现截图给大家参考下,前前后后调试了很多,写的有点乱。
这些具体的可以参照前面的文章,Github 2个推送已经实现了基本的功能,我这里截图我自己实现的一部分:
1.让Worker 跟Coordinator 一样有加载catalog目录的功能,新增WorkerDynamicCatalogManager 这个参考CoordinatorDynamicCatalogManager 实现,基本一样,
把Worker跟Coordinator 一样的服务启动的时候注入,让Worker跟Coordinator有一样的功能,不然Worker初始化不会自动加载数据源。
2.WorkerCatalogSyncTask,参考CatalogPruneTask ,只要API的部分改造完成,这个地方就很好弄了,仿照一个就可以自动固定时间去访问各个Worker节点的API信息进行注册,这样就只需要跟Coordinator 通信就可以了
实践效果:
定时获取是否有新增的数据源
API注册
Coordinator:数据库会捕获到新增了1个Catalog,Worker注册完,数量从1变成0
Worker:新增了相同的Catalog
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
一起学习 1、确认你的电脑是否安装homebrew,打开电脑终端 输入: /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/inst…