请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这里网关后台的热更新方案实现这样可以吗?

网关后台配置负载均衡等策略信息和网关相关配置信息,每次都需要重启网关服务器,来重新加载DB最新内容到内存中。

Q1.可否把通过consul这种注册中心,网关后台每更新信息后调用consul api,把信息更新到consul中,然后consul自动监听信息更改后,自动触发网关更新内存,来实现网关的热更新。

Q2.然而客户端的服务发现不太适用同步节点信息,这里只能是采用服务端的服务发现吧?。

Q3.老师说的热更新是这个意思吧?不是web服务配置文件的热更新加载吧?如果重启整个网关服务的话会对后面所有的服务都造成影响。

我理解的对吗?

正在回答

7回答

实际准备这样搞:
1、db中存储zk的配置信息
2、每个实例服务注册zk的ip节点绑定
3、网关主动watch对应zk节点变化,实现上是一个观察者模式的lbconfiger
4、这个lbconfiger监听到变化后就会通知loadbalance更新实际节点信息了。

最近考虑把这段代码,整合到咱们项目中。

1 回复 有任何疑惑可以回复我~
  • 提问者 weibo_隱懓_0 #1
    老师,麻烦尽快更新课程吧。最近卡在这里了。谢谢
    具体什么时候能更新呢?
    回复 有任何疑惑可以回复我~ 2021-03-31 16:10:44
  • 嗯嗯,好的。正在整理代码中会有限把代码先放出。
    回复 有任何疑惑可以回复我~ 2021-04-01 07:39:13
  • 牛儿吃草 回复 提问者 weibo_隱懓_0 #3
    最新支持热更新分支发布了,你可以试试。
    https://github.com/e421083458/go_gateway/tree/loadwatch
    
    新增的代码差异在这里有体现:
    https://github.com/e421083458/go_gateway/compare/loadwatch?expand=1
    回复 有任何疑惑可以回复我~ 2021-05-16 17:56:00
qq_慕工程65285 2021-05-06 13:36:27

有解了吗 去年六月老师回复这功能比较好加 现在也没看到谁加上

0 回复 有任何疑惑可以回复我~
  • 最新支持热更新分支发布了,你可以试试。
    https://github.com/e421083458/go_gateway/tree/loadwatch
    
    新增的代码差异在这里有体现:
    https://github.com/e421083458/go_gateway/compare/loadwatch?expand=1
    回复 有任何疑惑可以回复我~ 2021-05-16 17:56:16
牛儿吃草 2021-03-31 08:08:48

q1可以中consul作为配置中心,当然也可以用zk
q2可以用客户端模式也可以用服务端模式,服务端模式需要主动去注册的。
q3不会使用监听配置文件的方式,要么从db里读取,要么从配置中心读取信息。

0 回复 有任何疑惑可以回复我~
慕丝4332457 2021-03-22 14:03:22

关于你说的这个配置数据热更的问题,有个办法是架一个缓存层,数据存入读取都走缓存层,缓存层去主动同步数据库。网关服务在缓存层读数据,dashboard也在缓存层更新数据

0 回复 有任何疑惑可以回复我~
  • 提问者 weibo_隱懓_0 #1
    你说的缓存层是指redis这种?
    如果是我觉得不用,consul 的kv存储本身就是了,主要是watch的这个功能。
    回复 有任何疑惑可以回复我~ 2021-03-22 14:15:35
  • 慕丝4332457 回复 提问者 weibo_隱懓_0 #2
    哦,网关配置分发,网关配置这个场景更新频率不高,可以
    回复 有任何疑惑可以回复我~ 2021-03-22 14:35:13
  • 慕丝4332457 回复 提问者 weibo_隱懓_0 #3
    其实如果只是为了能够得到通知,也有很多消息机制可以用,实际上有时用不到consul,用mqtt通知下也可以的
    回复 有任何疑惑可以回复我~ 2021-03-22 14:40:41
慕斯1088534 2021-03-19 17:02:16

又有新发现:在第十章中,http服务获取发现是通过中间件(HTTPAccessModeMiddleware)来实现,HTTPAccessModeMiddleware是读取数据库实现不过是热更新,就是数据库http相关服务变动后,中间件不能热更新,估计在这个中间件做个热更新应该就可以了。这是我的猜测,不知道对不,牛儿大师来说说吧!谢谢!

0 回复 有任何疑惑可以回复我~
  • 那是个ServiceManagerHandler.LoadOnce()加载的数据库到内存,中间件是不会频繁从数据库拿数据的。不过你可以仿照这个loadOnce改写一个goroutine定时读一下数据库,比对内存数据是否一致决定是否更新或添加,服务更新延迟基本就是取决于定时周期了(或者用消息机制的通知数据库变动然后更新,这个是更新实时性就高点)个人观点,欢迎拍砖!
    回复 有任何疑惑可以回复我~ 2021-03-22 13:37:13
  • 这也是一个方法,不过感觉应该还有更好的,哈哈。。。
    回复 有任何疑惑可以回复我~ 2021-03-22 23:27:01
  • 实际准备这样搞:
    1、db中存储zk的配置信息
    2、每个实例服务注册zk的ip节点绑定
    3、网关主动watch对应zk节点变化,实现上是一个观察者模式的lbconfiger
    4、这个lbconfiger监听到变化后就会通知loadbalance更新实际节点信息了。
    
    最近考虑把这段代码,整合到咱们项目中。
    回复 有任何疑惑可以回复我~ 2021-03-31 08:03:46
提问者 weibo_隱懓_0 2021-03-19 10:05:08

请老师进一步解答

0 回复 有任何疑惑可以回复我~
慕斯1088534 2021-03-14 22:57:05

我也觉得是用goroutine 去获取API来热加载更新,具体的请牛儿大师说说吧!

0 回复 有任何疑惑可以回复我~
  • 最新支持热更新分支发布了,你可以试试。
    https://github.com/e421083458/go_gateway/tree/loadwatch
    
    新增的代码差异在这里有体现:
    https://github.com/e421083458/go_gateway/compare/loadwatch?expand=1
    回复 有任何疑惑可以回复我~ 2021-05-16 17:56:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信