• 【Java面试题】传统行业八年经验,连续4次面试都败在Nacos配置更新的工作流程


    Nacos作为阿里的开源中间件,在加入到Spring Cloud生态以后。

    不管是作为配置中心还是注册中心,它的简单易用的特性,被广泛适用在各个互联网公司里面。

    然后大家会发现Nacos相关的面试也越来越多了。

    昨天,一个工作了8年的粉丝,被面试官问到了这样一个问题:

    “请你详细说一下Nacos客户端是如何实现配置的动态更新的”。

    这个问题的高手回答,我整理到了一个10w字的面试文档里面,大家可以扫描文章尾端二维码领取。

    下面看看高手的回答

    大家记得点赞、收藏加关注 

    需要高手面试文档面试文档的小伙伴可以扫描文章底部二维码

    高手

    首先,Nacos是采用长轮训的方式向Nacos Server端发起配置更新查询的功能。

    所谓长轮训就是客户端发起一次轮训请求到服务端,当服务端配置没有任何变更的时候,这个连接一直打开。

    直到服务端有配置或者连接超时后返回。

    Nacos Client端需要获取服务端变更的配置,前提是要有一个比较,也就是拿客户端本地的配置信息和服务端的配置信息进行比较。

    一旦发现和服务端的配置有差异,就表示服务端配置有更新,于是把更新的配置拉到本地。

    在这个过程中,有可能因为客户端配置比较多,导致比较的时间较长,使得配置同步较慢的问题。

    于是Nacos针对这个场景,做了两个方面的优化。

    1. 减少网络通信的数据量,客户端把需要进行比较的配置进行分片,每一个分片大小是3000,

      也就是说,每次最多拿3000个配置去Nacos Server端进行比较。

    2. 分阶段进行比较和更新,

      第一阶段,客户端把这3000个配置的key以及对应的value值的md5拼接成一个字符串,然后发送到Nacos Server端

      进行判断,服务端会逐个比较这些配置中md5不同的key,把存在更新的key返回给客户端。

      第二阶段,客户端拿到这些变更的key,循环逐个去调用服务单获取这些key 的value值。

    这两个优化,核心目的是减少网络通信数据包的大小,把一次大的数据包通信拆分成了多次小的数据包通信。

    虽然会增加网络通信次数,但是对整体的性能有较大的提升。

    最后,再采用长连接这种方式,既减少了pull轮询次数,又利用了长连接的优势,很好的实现了配置的动态更新同步功能。

    总结

    Nacos里面有很多好的设计理念可以值得我们去研究和学习。

    我们不一定未来会去做源码级别的开发,但是一定会参与架构方案的设计。

    所以还是建议大家去花一些时间,下沉到技术的底层,从而提升自己的核心竞争力。

    另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新180期,总计超过15W字!

    【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

    需要高手面试文档面试文档的小伙伴可以扫描下方二维码
    ↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 相关阅读:
    【生日快乐】SpringBoot SpringBoot 基础篇(第一篇) 第4章 SpringBoot 综合案例 4.7 修改客户功能
    网络协议--TFTP:简单文件传送协议
    [附源码]计算机毕业设计JAVA高校资源共享平台
    常见排序方法原理及C语言实现
    隆化的大米排之首 国稻种芯·中国水稻节:河北承德十大特产
    Discuz! X3 数据字典_discuz教程
    这道题自己出的,有人会吗(我写了代码,有大佬帮我debug吗)
    论文精度 —— 2017 ACM《Globally and Locally Consistent Image Completion》
    java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署
    [mit6.s081] 笔记 Lab1: Unix utilities | Unix 实用工具
  • 原文地址:https://blog.csdn.net/q331464542/article/details/126178332