单位门户网站功能,网站建设 作用,沧州网站建设定制价格,免费咨询图片大全常见的配置中心有SpringCloudConfig、Apollo、Nacos等#xff0c;理解它的作用#xff0c;无非两点#xff0c;一是配置中心能做什么#xff0c;不使用配置中心会出现什么问题。
作用#xff1a;配置中心是用来集中管理服务的配置#xff0c;它是用来提高系统配置的维护…常见的配置中心有SpringCloudConfig、Apollo、Nacos等理解它的作用无非两点一是配置中心能做什么不使用配置中心会出现什么问题。
作用配置中心是用来集中管理服务的配置它是用来提高系统配置的维护性、时效性、安全性。
本文主要通过目前最流行的Nacos来进行分析先看下图 一.在微服务架构中服务少则几十个多则上百个在这种状态下如果还用以前传统的配置文件方式会出现哪些问题
1.维护性差比如说我每个服务比如都连接了Redis一旦Redis的服务器IP发生了更改那么就需要把所有服务的配置文件中的Redis配置进行修改这样的话维护性非常的差
2.时效性差比如Redis配置先修改了A服务然后重启A服务此时B、C、D......等服务都还没有重启那么就不能保证它的数据一致性所以我们需要最好的保证它的时效性也就是说修改完以后所以服务最好立马感知到并进行重启这样才能最大程度保证它的时效性保证了时效性才能保证它们的一致性
3.安全性差如果这些配置都维护在本地代码中开发人员都可以看到如果碰到恶心的公司不发公司那么开发人员直接知道Redis、Mysql的远程地址等直接可以删除跑路(但不建议最好走仲裁~)这样就有安全隐患。
如果我们把所有配置放在一个Nacos的配置中心里面统一进行管理那么就可以非常方便的给它做一些配置比如说双11大促开始可以给Redis服务切换到性能高的Redis服务器上去或者说切换到不同的Redis上去等等还可以动态的去配置一些限流的策略然后等大促完了后可以把策略关掉切回Redis服务这种情况下不需要修改原本服务的配置非常方便。
二.有哪些东西可以作为配置
1.比方说数据库连接Url缓存连接ur字符串数据库的用户名密码都可以作为配置的字符串除此之外还有一些可以动态调整的参数等等(比如说A服务做了集群一单数据库地址修改集群的所有服务都需要进行修改如果有配置中心就只需要修改配置中心即可它会让A服务实时的拉取配置)
2.比方说客户端的超时设置限流规则和降级开关流量的动态调度
3.比方说某个功能只是针对某个地区用户还有某个功能只在大促的时段开放。
如果这种需要通过静态的方式去配置或者发布的方式去配置那么响应速度是非常慢配置修改后重启了第一台服务其他服务还没有重启就对业务存在风脸如果有一套集中式的配置中心只需要相关人员在配置中心动态去调整参数就基本上可以实时或准实时去调整相关对应的业务所以配置中心在微服务中算是一个举足轻重的组件。
三.微服务是怎么获取到配置中心的数据的是推还是拉
了解了 Nacos 的配置管理的功能后还有一个问题需要弄明白那就是 Nacos 客户端是怎么实时获取到 Nacos 服务端的最新数据的其实客户端和服务端之间的数据交互无外乎两种情况服务端推数据给客户端和客户端从服务端拉数据那到底是推还是拉呢从 Nacos 客户端通Listener 来接收最新数据进行分析如下图 每当为一个Nacos客户端配置了配置中心就会有一个监听器(Listener)这个监听器就会结合一个定时任务实现一个长轮询的缓存池(LongPollingCachePool) 长轮询的缓存池会实时的去Nacos的配置中心拉取数据会将本地缓存(CacheData)的MD5值和服务端的MD5值(compareMd5)做对比如果对比不上就说明发生了变法一旦发送了变化就会把新数据拉取(change)过来然后再存如到CacheData中然后重新的计算MD5的值下一次还是继续比对MD5的值如果比对不上就说明又发生了变化就会继续拉取对象的数据存入本地当CacheData一旦发生了变化就会触发Listener的回调方法就是通知服务的配置数据进行相应的改变。
原理:Nacos 服务端创建了相关的配置项后客户端就可以进行监听了客户端是通过一个定时任务来检査自己监听的配置项的数据的一旦服务端的数据发生变化时客户端将会获取到最新的数据并将最新的数据保存在一个 CacheData 对象中然后会重新计算 cacheData 的 md5 属性的值此时就会对该 CacheData 所绑定的 Listener 触发 receiveconfginfo(接收配置信息) 回调。
拉的优势
因为如果用推的方式服务端需要维持与客户端的长连接(比如推的方式如果有上百个客户端一旦发生修改就需要通知上百个服务服务端压力就会变大)这样的话需要耗费大量的资源并且还需要考虑连接的有效性例如需要通过心跳来维持两者之间的连接(如果服务端和客户端的连接失效就不会给客户端推)而用拉的方式客户端只需要通过一个无状态的 http 请求即可定时获取到服务端的数据(这样压力就分发到了每一个Nacos的客户端减轻服务端压力)。