• 配置中心


    本文通过一个案例,介绍 配置文件 和 配置中心 的必要性

    案例:这是你自己的一个项目

    一个 java web 项目
    
    需求:通过一个请求返回你女朋友的名字name(支持null)

    这个项目很简单,于是你开始进行开发实现:

    1. 实现:在代码中将女朋友名字赋值给name,作为响应内容,打jar包,部署运行;

    2. 访问:打开浏览器,输入对应链接,返回你女朋友名字;

    over, so easy ...

    ...

    针对一些情况,你的开发可以说非常成功,如:

    a. 你是一个单身狗,name为null;你若想打一辈子光棍,ok,我服,代码中name写死为null,over

    b. 你有一个挚爱,而且你是一个从一而终的人,一辈子就只要她一个,我也服,代码中name写死为你女朋友名字,over

    c. 你换的女朋友名字都一样,我更服,代码中name写死,over

    ...

    but . . . (配置文件引入)

    现实并没有那么极端,现实就是现实,假如你被绿了,分手了,重新找个女朋友。那么怎么办呢,请求返回的名字并不是你现在女朋友的名字,改程序吧:

    1. 停掉服务

    2. 改写代码,将name改为现在女朋友的名字

    3. 打jar包,部署运行

    4. 访问,显示你现在女朋友的名字

    ...

    但是作为一名合格的开发人员,应该尽量避免这种重新部署和更改源码的事请发生;

    现实中,这种问题的出现也不是大问题,停就停下呗,改就改下呗,不就是麻烦一下吗

    ...

    but...

    此处做个不合理的假设,你若是频繁被绿呢,相信你也能感觉到的不仅仅是一种被绿的痛苦,还要频繁的更改源码和打包部署的痛苦

    所以你变聪明了,你将name放在配置文件中,如下:

    # green.properties
    
    name=如花

    这样,实现了数据和代码的解耦,每次被绿,你只需要更改配置文件,然后重新部署。是不是感觉到了一丝幸福。

    but...

    目前还存在一个问题——重新部署,总是要重新部署肯定是一个非常失败的开发选择

    避免重新部署:

    你可能想到避免重新部署的方式,肯定需要在配置文件更改时,应用自动感知,并更新name值

    实现方式可能是:代码中设计配置文件更改的监听器,并实现name的更新。

    问题解决,既不用更改源码,也不用重新部署,再也不用担心被绿了

    ...

    but...

    因为你的频繁被绿,使你备受大家的关注,关注量很高很高,他们都想通过这个请求来了解你的被绿情况,以至于服务其无法承载如此高的并发访问量(即时你在服务器上做了很好的并发请求处理逻辑,但硬件上确实已经到达上限);

    所以你将应用部署到200个服务器上,结果很nice,多个服务器可以承载如此高的访问量,满足了大家的需求;

    but...

    你又被绿了...改配置文件吧...

    1. 连接服务器1,更改服务器1中应用的配置文件的name值

    2. 连接服务器2,更改服务器2中应用的配置文件的name值

    3. 连接服务器3,更改服务器3中应用的配置文件的name值

    4. 连接服务器4,更改服务器4中应用的配置文件的name值

    ...

    200. 连接服务器200,更改服务器200中应用的配置文件的name值

    ok. 更改完毕!

    简单的更改name,却要更改200次,累么??? 200 个服务器,一个一个改配置,耗时,耗力,更何况是频繁。并且在更改期间,部分服务器上name已改,部分服务器上name未改,就会导致数据一致性问题

    解决方案——配置中心

    200个服务器上的该应用都依赖于一个配置文件,这样的话,每次只需更改这一个配置文件便可!

    于是:

    1. 将所有服务器上的该配置文件删除

    2. 将一个地方创建一个该配置文件

    3. 将所有服务器上的应用的配置源改为此地方的此配置文件,这个地方被称为配置中心,这个文件被称为中心配置文件

    完美:目前应用,不用改源码、不用重启、支持高并发、没有在每个服务器上更改配置的冗余操作

    相信你已经对配置文件和配置中心有了一定的感性认识,对于单机版,我们称之为配置(文件);对于分布式集群系统,将配置文件抽出为核心配置文件,我们称之为配置中心(系统);

    关于分布式配置中心,网上已经有很多开源的解决方案。nacos作为其中一种,在另一篇博文中有详细介绍。 

  • 相关阅读:
    css3与gpu加速
    前端集成解决方案小结
    body内html标签的选用
    在win8下快速搭建angularjs测试环境以及可能遇到的问题
    javascript快速排序
    Sublime Text2配置python环境
    python学习第一天
    开机自检
    各种排序算法及c语言实现
    算法表示
  • 原文地址:https://www.cnblogs.com/yelao/p/10741156.html
Copyright © 2020-2023  润新知