跳至内容
- 微服务需要配置中心的原因
- 微服务实例一般比较多,一个一个地做配置比较麻烦并且会使得运维成本增大,使用一个集中化的配置中心去管理这些配置会更方便。
- SpringCloud支持的配置中心
- SpringCloudConfig
- Zookeeper
- Consul
- Etcd
- Apollo
- Nacos
- 阿里巴巴开源的服务发现,配置管理和服务管理的平台,也可作为配置中心使用。支持服务注册和发现,动态配置管理,服务健康监测,动态DNS服务等功能。
- Nacos配置中心的原理
- 1、存储配置信息,Nacos默认使用内嵌的Derby数据库存储配置信息,也可以采用MySQL等关系型数据库
- 2、注册配置信息,服务启动时,Nacos Client向Nacos Server注册自己的配置信息,把配置信息写入存储中,并生成版本号
- 3、获取配置信息,服务运行时,Nacos Client通过API从Nacos Server获取配置信息,Server根据键查找对应“已注册”的配置信息,返回给Client
- 4、监听配置变化,Nacos Client通过注册监听器的方式监听配置信息,当配置信息发生变化时,Nacos Server通知已注册监听器,触发相应的回调方法。
- Nacos配置中心的长轮询机制
- 客户端和服务端的交互一般分为推push和拉pull,Nacos在pull的基础上采用了长轮询机制来进行配置的动态刷新
- 客户端定时向服务端发起请求,检查配置信息是否发生变更,如果没有,服务端hold住这个请求,暂时不返回结果,直到配置信息确实发生变化或者达到一定的超时时间。
- 客户端发起pull请求,服务端检查配置是否有变更,如果没有,就设置一个定时任务以一段时间后再次执行检查,并将当前的客户端连接加入等待队列。
- 等待期间,如果配置发生变化,服务端会立即返回结果给客户端,完成一次推送操作。?
- 等待期间,如果配置没发生变化,等待时间也超过预设超时时间后,服务端自动返回没有发生变化的结果给客户端。?
- 等待期间,如果通过Nacos Dashboard或API等对配置进行修改,则会触发一个事件机制,服务端会遍历等待队列,找到发生变更的配置项对应的客户端进行连接,将变更的数据通过连接返回,完成一次推送操作。?
- 通过长轮询的方式,Nacos客户端可以实时感知配置变化,即时获取最新配置信息,同时降低服务端的压力,避免了大量的长连接占用内存资源。