首页 > 其他分享 >分布式配置中心

分布式配置中心

时间:2023-12-10 22:45:31浏览次数:42  
标签:服务 中心 配置文件 小哥 配置 jar 分布式

为什么要有分布式配置中心:

1、项目背景

  现在有一个项目,使用SSM进行开发的,配置文件的话我们知道是一个叫做application.properties的文件。

#业务参数相关配置
user.register.default.name=小强
user.register.default.sex=男

  这个配置文件会在项目启动的时候被加载到内存中进行使用的。

2、需求一

  由于业务的变动,用户在以前进行注册的时候默认的用户名是“小强”,但是新的领导来了,需要把这个改成“小明”。因为,业务的流量还是比较大的,所以,没有办法在白天流量高峰期修改配置文件,进行重启!

  此时,就辛苦开发小哥了,他们需要等到半夜里凌晨三四点,没有流量的时候,去修改application.properties配置文件,必将系统进行重启。另外,公司采用的是集群,进行了负载均衡,系统部署在了多台服务器上,那么开发小哥需要一台台的进行修改.

  开发小哥是在忍受不了这种变更了,修改一个配置就需要如此周折的去完成这件事情!

3、需求二

  我们在进行业务开发的时候,一般会有多个环境,至少应该有三个:开发、测试、线上。那这三个环境之间的配置文件肯定是有不同的,比如说他们之间的数据库是肯定不同的!application.properties例如:

#数据库相关配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.128:3306/ufind
spring.datasource.username=root
spring.datasource.password=123456

  那我们如何使不同环境之间进行隔离哪?答案很简单,不就是指定三个不同的文件,然后在项目启动的时候指定不同的环境不就行了吗?于是开发小哥就动起来了,修改如下:

  修改之后,运维的小哥不愿意了!一开始没有进行环境隔离的时候,只有一个环境(开发完成之后,直接修改配置文件,合并到主干,线上发布),运维小哥在使用Jenkins+Git+Maven进行自动化集成的时候,只需要配置一下就行了!在Jenkins启动的脚本命令是:java -jar ssm.jar 就可以搞定了,经开发小哥这样一搞,修改启动的命令不说,新增了环境,还要创建不同环境的自动化集成。

  分别需要设置的命令如下:

java -jar -Dspring.profiles.active=dev nssas.jar
java -jar -Dspring.profiles.active=beta nssas.jar
java -jar -Dspring.profiles.active=prod nssas.jar

  运维小哥的工作量直接翻了一倍多。

4、什么是分布式配置中心

  从上边两个小需求,已经可以看出,传统配置的方式已经暴露出了很多问题,其他的诸如:历史版本管理,权限控制,安全性等等问题,是传统配置文件无法解决的!

  随着业务的发展、微服务架构的升级,服务的数量、程序的配置日益增多(各种微服务、各种服务器地址、各种参数),传统的配置文件方式和数据库的方式已无法满足开发人员对配置管理的要求:

  • 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏;
  • 时效性:修改配置,需要重启服务才能生效;
  • 局限性:无法支持动态调整:例如日志开关、功能开关;

  因此,我们需要配置中心来统一管理配置!把业务开发者从复杂以及繁琐的配置中解脱出来,只需专注于业务代码本身,从而能够显著提升开发以及运维效率。同时将配置和发布包解藕也进一步提升发布的成功率,并为运维的细力度管控、应急处理等提供强有力的支持。

分布式架构带来的问题:
  • 多个用户服务的节点,都会存在一份本地配置 (application.yaml/application.properties)。这样的情况导致如果节点越来越多的话,会需要维护与节点数相同甚至更多的配置文件。
  • 用户服务与商品服务可能会有一些相同的配置,如关系型数据库配置信息,非关系型数据库配置信息。但是这部分配置不能共享,只能各个服务做配置冗余。
  • 如果配置需要更新,无法保证同服务的多个节点全部更新,也无法保证不同服务间冗余的配置同步更新。带来了一定的不确定性。
  • 配置更新还需要重新服务,无法满足高可用的需求。
  • 多环境需要维护不同的配置,但无法做到配置的隔离。
分布式配置中心的主要优点:
(1)中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 (2)消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。 (3)配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。 (4)实现配置隔离,多环境配置也可统一管理。 (5)减少开发和运维很大的工作量。

 

一个简版的配置中心是什么样的

1、配置中心的特点

  • 配置的增删改查;
  • 不同环境配置隔离(开发、测试、预发布、灰度/线上);
  • 高性能、高可用性;
  • 请求量多、高并发;
  • 读多写少;

2、简版配置系统

我们可以设计出如下的简版配置中心:

  • 通过OA系统对每一条配置(每一个配置有唯一的配置ID)进行增删改查;
  • 区分不同环境的配置,每个环境同一配置ID对应不同数据库记录;
  • 配置最终以json格式(便于编辑和理解)储存在mysql数据库中;
  • 引入redis集群,做配置的缓存(比如可以设置配置修改后1分钟后生效);
  • 配置对外服务,多机器部署,满足性能需要;
  • 如果有必要,可以引入配置历史修改记录;

配置中心原理及实现方式

分布式配置中心需要哪些要素:

  1. 同服务的多个节点仅需要维护一份配置 —— 配置内容中心化存储
  2. 服务动态扩缩 —— 持久化存储
  3. 应用需要从中心化配置中心获取配置 —— 提供对外 API
  4. 配置变更无需重新部署应用 —— 数据变化通知给客户端
  5. 配置中心异常时保证可用 —— 配置高可用及本地缓存

根据这些要素,我们来看看目前大多数配置中心的实现

  上图中,使用 git/zookepper/mysql 等存储作为配置内容的持久化存储。通过本地缓存及配置服务器集群实现配置中心的高可用。通过定时监听服务端配置,完成数据变化的通知。这样的架构就可以完成大多分布式配置中心需要提供的功能。

分布式配置中心解决方案:

1、Apollo

  Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

2、XDiamond

  全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目Diamond,前面加上一个字母X以示区别。

3、Qconf

  QConf 是一个分布式配置管理工具。 用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。

项目地址:https://github.com/Qihoo360/QConf

4、Disconf

  专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」包括 百度、滴滴出行、银联、网易、拉勾网、苏宁易购、顺丰科技 等知名互联网公司正在使用!「disconf」在「2015 年度新增开源软件排名 TOP 100(OSC开源中国提供)」中排名第16强。

5、Spring Cloud Config

  Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。

 

标签:服务,中心,配置文件,小哥,配置,jar,分布式
From: https://www.cnblogs.com/cjhtxdy/p/17893332.html

相关文章

  • java中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置
    ##一、什么是连接池连接池是应用程序与数据库之间的一个缓冲区,它存储了一定数量的空闲数据库连接,当应用程序需要连接数据库时,可以从连接池中获取一个可用连接,使用完毕后再将连接归还给连接池,从而避免了每次连接都需要创建和销毁连接的开销,提高了应用程序的性能和可伸缩性。连接池......
  • nginx配置php
    usernginx;worker_processes4;work_cpu_affinity0001001001001000;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections65535;useepoll;......
  • 国家生物信息中心和表型组学研究中心公开植物图像及相关性状开放归档库OPIA
    目录植物图像承载着丰富的信息,反映了植物的颜色、形态、生长和健康状态等关键特征。高通量植物表型采集技术广泛用于植物表型组学研究,产生了大量基于图像的性状数据,对种质筛选、植物病虫害鉴定和农艺性状挖掘等方面具有重要价值。为了提供有效的数据管理和支持智慧农业,中科院遗......
  • 分布式事务
    什么是分布式事务?对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题。简单的说,在分布式系统上,一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要么......
  • 分布式锁
    为什么需要分布式锁?在多线程环境中,如果多个线程同时访问共享资源(例如商品库存、外卖订单),会发生数据竞争,可能会导致出现脏数据或者系统问题,威胁到程序的正常运行。我们需要使用互斥操作对共享资源进行保护,即同一时刻只允许一个线程访问共享资源,其他线程需要等待当前线程释放后......
  • DHCP1.2 华三-DHCP中继配置(DHCP server在核心设备上做)
    公司比较大的话,核心层不止只有一个,比如A和B都是核心层的交换机,但是DHCPserver服务器是挂载在A区。(一般DHCPserver都是微软的windowserver服务器搭建DHCP)本实验仍旧DHCPserver在核心设备上建立。实在模拟不出用微软的DHCP建立。1.实验拓扑第一步:A区核心设备配置DHCPserver创建......
  • 架构核心技术之分布式消息队列
    Java全能学习+面试指南:https://javaxiaobear.cn今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。主要介绍以下内容:同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型和发布订阅模型......
  • Hadoop 配置Windows 客户端
    1.根据Hadoop版本下载Windows依赖,并放置到非中文目录下https://github.com/cdarlint/winutils2.配置环境变量HADOOP_HOME->放置的目录地址PATH->追加%HADOOP_HOME%\bin3.测试环境双击winutils.exe,如出现运行错误,则需要安装相关的运行库解决。......
  • AR9271无线网卡Win10配置热点
    AR9271无线网卡Win10配置热点需要的无线网卡如下图1准备工作网卡参数AtherosAR9271是一款高性能的无网络模块,采用802.11b/g/n标准,支持2.4GH频段。它被广泛应用于路由器、网络摄像头物联网设备等领域,具有以下主要特征:1.高性能:AtherosAR9271采用优秀的无线芯片,支持最高......
  • 没有配置ssh密钥的情况下,对linux批量创建账号、修改密码
    在客户端安装sshpass,利用sshpass进行登陆操作;安全考虑,操作完把明文的账号密码yjk.txt删除掉;--创建用户[root@zhu~]#catcreate_user.sh#!/bin/bashforiin$(cat/root/yjk.txt)doecho$iipaddr=`echo$i|awk-F'|''{print$1}'`passwd=`echo$i|awk-......