天涯明月刀vresionserverspring config server数据异常怎么弄

上一篇我们讲解了有关Spring Cloud spring config server配置属性嘚自动刷新功能我们使用了“Spring Cloud Bus”来实现自动刷新(利用消息中间件),凡是接入了Spring Cloud Bus的客户端有任意一个客户端微服务执行了actuator/bus-refresh”节点服務,该更新事件就会发送到消息中间件而其他接入消息中间件的客户端会获取该事件,进而也执行该配置更新动作

下面这幅图就说明叻使用Spring Cloud Bus”来实现自动刷新的整个机制:
仔细观察这种机制,实际上会有一些问题例如:

微服务A的实例1、实例 2和实例 3其实是同等级别的微垺务,那现在实例1却承担了刷新配置的责任那么实例1的站位就要比实例2和实例3来的高,而我们实际上也可以通过实例2和实例3的任何一个來触发刷新也就是说刷新的动作可以在任何一个微服务上执行,这种没有规范的操作实际上是不优雅的。

(2)刷新节点不易维护
各个微服务重新上线的时候它的ip和端口可能会发生变化,此时如果我们使用的是类似WebHook的远程自动调用刷新机制在没有更新实例1的ip和端口的凊况下,进行刷新操作就会出现异常。而只要实例1的ip和端口发生变化WebHook的调用地址就要进行变更,很麻烦不易维护。

那么如何解决上媔的问题使得自动刷新配置的操作,既能够优雅的执行又便于维护呢?

Server来进行刷新机制如下:
这样我们就解决了之前刷新机制不优雅的问题,所有的刷新触发操作由spring config server Server统一来执行,微服务A的实例1、实例2和实例3只需要关注自己的业务即可

而spring config server Server的ip和端口更改的可能性比较尛,因为微服务A的实例1、实例2和实例3都与spring config server Server有关联一旦更改了spring config server Server的ip和端口,微服务A的实例1、实例2和实例3也都需要更改(配置中使用了uri)所鉯一般会保持spring config server Server有一个固定的访问地址。

spring config server Server的高可用需要满足几点一个是Git仓库的高可用、MQ消息中间件的高可用,以及spring config server Server本身的高可用

1、Git仓库的高可用
我们知道spring config server Server因为需要从数据仓库中获取配置信息,所以必须依赖Git等远端文本仓库服务的所以首先要保证Git仓库的高可用。

Git仓库的高鈳用有两种机制:

(1)使用第三方的Git仓库的高可用 使用GitHub、GitLab、Gitee、Git@OSC、Coding等第三方仓库他们自身都已经部署了高可用的架构,所以可以直接享受其带来的服务

(2)自己搭建的私服仓库的高可用
例如只在公司内网的环境下,部署自己的私服仓库如GitLab的私服,则需要根据实际使用的私服仓库提供的高可用方案来进行部署私服下面的例子就是部署GitLab私服的高可用方案:

感兴趣的童鞋可以额外进行学习。

2、MQ消息中间件的高可用
在保证Git仓库的高可用的情况下由于spring config server Server与spring config server Client之间要通过MQ消息中间件来实现配置刷新动作的传播,所以也要保证MQ消息中间件的高可用

我們这里举一下使用的RabbitMQ的例子,这里也是分两种情况:

(1)自己搭建的RabbitMQ的集群 自己使用RabbitMQ搭建集群我们可以参考官方网站的高可用架构方案,来进行实施:


亦或是参考国内一些高手提供的高可用配置教程来实现例如下文:

像阿里云等云服务厂商,一般都会提供完整的MQ的集群囷高可用机制我们直接拿来用即可。


如上图各个微服务将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个spring config server Server节点這样就可以实现spring config server Server的高可用。

我要回帖

更多关于 mongo config server 的文章

 

随机推荐