Smconf(分布式配置管理框架)概述

news2024/11/30 8:37:34

Smconf 专注于分布式环境下的配置的统一管理。采用 Java+Zookeeper+Mongodb+Spring Boot 开发。目前只支持 Java,其他的使用语言需要通过调用 REST API 来实现。

每个技术人都有一个开源的梦想,那就是自己也能开发出一个让很多人使用的框架。其实分享使用不是重点,重点是自己写的架构本身,你对它的各个方面都了如指掌,可以很方便添加新功能,比如加上一些适应公司内部需求的功能。

笔者之所以抛弃了 Spring Cloud Config,一方面在于它的配置刷新这块不是很方便,需要集成消息总线加上 WebHook 才能完成。另一个原因就是一些特殊的需求实现起来没那么方便,比如推送配置到指定的节点。

Smconf 目前支持的功能如下:

  • 提供配置的统一管理。
  • 多个环境(生产环境为 prod,线上测试环境为 online,线下测试环境为 test,开发环境为 dev)。
  • Web 后台配置管理。
  • 配置修改后实时同步到使用的客户端。
  • 无缝集成 Spring 和 Spring Boot 项目。
  • 非 Spring 项目中也可以使用。
  • Web 后台支持不同账号管理不同环境的配置。
  • 支持水平扩容、负载,部署多个 Server、Client 自动发现。
  • 支持配置更新回调接口做扩展。
  • 支持手动触发推送配置到指定的节点。
  • 修改配置可以选择推送的节点,可用于做灰度发布测试。
  • 配置的历史修改记录。

Smconf 工作原理

如图 1 所示为 Smconf 的整个架构规划,Smconf 同样也分为服务端和客户端两个部分,服务端负责配置信息的管理,客户端负责拉取配置信息及上传配置信息。


图 1 Smconf 架构图

 

1. 基本概念

在正式介绍 Smconf 的工作原理之前,我们先来看几个基本概念。

  • 环境:在 Smconf 中总共分了 4 个环境,分别是生产环境(prod)、线上测试环境(online)、线下测试环境(test)、开发环境(dev),Smconf Client 会根据不同的环境加载不同的配置。
  • 系统:这里的系统就是指服务的名称,能够直观反映这个配置是哪个服务在使用。
  • 配置文件:一个系统中有多个配置文件,可以将同类的配置放到一个文件中,也可以只用一个配置文件,配置文件需要定义一个实体类。
  • 配置 key:一个配置文件中有多个配置项,实体类的字段名称就是配置的 key,字段的值就是配置的 value。

2. 客户端讲解

客户端在启动的时候会将自身的信息注册到 Zookeeper 中,为每一个配置文件注册一个节点,添加 watcher 监听,同时获取 Server 的节点信息,然后连接 Smconf Server 初始化配置数据或者拉取最新的配置到本地。

配置信息只有在配置中心不存在时才会初始化配置,如存在,则拉取配置中心的配置覆盖本地的配置,当然也可以通过配置项来执行是否拉取远程配置。

在 Smconf 中每个配置都必须存在于某一个配置文件中,拉取的配置信息会注册到配置文件的实体类中,配置类是受 Spring 管理的,可以直接注入使用。

3. 服务端讲解

接着来看服务端,配置信息是存储在 Mongodb 中的,Mongodb 可以做副本集,不存在单点问题。可以启动多个 Smconf Server,并且不需要做负载均衡,在启动的时候它会将自身的信息注册到 Zookeeper 中。

当配置发生修改的时候,通过触发 Zookeeper 的 watcher 事件来通知 Smconf Client 配置有修改,需要重新加载配置。

Smconf 提供了友好的 Web 页面对配置信息进行管理,通过不同的账号、不同的权限控制,确保配置不被随便修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8个巧用iOS备忘录的方法,别浪费了几千块的iPhone手机

你用过ios系统的备忘录吗?是不是只用来记录生活的一些事项呢?如果是这样那就太浪费啦!这里分享8个小技巧,快学一学让你的备忘录能物尽其用吧!1.笔记-横线与网格大家是不是觉得备忘录的背景光秃秃的?其实是有…

antv/g6基本使用教程

安装 & 引用 在项目中引入 G6 有以下两种方式:npm 引入,CDN 引入。 1 在项目中使用 npm 包引入 Step 1: 使用命令行在项目目录下执行以下命令: npm install --save antv/g6 Step 2: 在需要用的 G6 的 JS 文件中导入: imp…

JSP ssh免疫疫苗管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh免疫疫苗管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0…

linux 终端分屏工具 tmux

引言:我们在用 MobaXterm 的时候会 经常遇到窗口不够用的时候,而且切换窗口也比较费时间,所以就需要一个工具,一个终端窗口可以打开多个终端。 sudo apt-get install tmuxtmux输入tmux进入。 上下分屏:ctrl b 再按 &…

【深度学习动手做】Dataset类,读取数据库中带标签的图片

用于将带标签的数据读取,比如我有一个分类“蚂蚁”和“蜜蜂”的任务,其工作目录下有以下: data文件夹、read_data.py ... 其中data文件夹下一级又分为“train”,"val”,然后按照标签分为两个文件夹“ants”&#…

[附源码]Python计算机毕业设计辅导员班级量化管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

高级前端常见手写面试题指南

Function.prototype.call 于call唯一不同的是,call()方法接受的是一个参数列表 Function.prototype.call function(context window, ...args) {if (typeof this ! function) {throw new TypeError(Type Error);}const fn Symbol(fn);context[fn] this;const r…

怎么注册自己的网站?

怎么注册自己的网站?现在很多个人用户会注册自己的网站,那么怎么注册自己的网站呢?对于懂代码的人来说就好办了,自己开发即可,若不懂代码的话又怎么开发呢?毕竟自学代码知识也不太实际,其实也是…

设计模式概述之工厂方法模式(二)

很多小伙伴,不知道设计模式是什么? 通常我们所说的设计模式是一种设计方案,是前人留下的经验及最佳实践。 想要学习设计模式,至少要把面向对象的基本结构全部了解。 设计模式,是建立在一定基础上的思维训练。 学习设…

volatile,wait,notify关键字

文章目录一、volatile关键字二、wait 和 notifywaitnotifynotifyAllwait 和 sleep 的区别顺序打印ABC一、volatile关键字 volatile关键字的存在是用来解决内存可见性问题的。 我在 :线程安全问题 这篇文章中介绍过内存可见性问题。 前面我们讨论内存可见性时说了,…

教程十 在Go中使用Energy创建跨平台GUI应用 - 事件通信(IPC) 之 Go定义事件JS调用

介绍 Energy Go和JS的事件通信, Go监听事件JS触发。 IPC事件还有其它的几种使用方式,在其它教程中更新 在正常前后端大多数开发场景,JS和Go前后端数据交互都需要Http接口方式交互。 Energy中可以不使用Http,使用事件通信机制(…

使用ProGuard插件对Spring Boot程序进行代码混淆

使用ProGuard插件对Spring Boot程序进行代码混淆 介绍: ​ ProGuard是一个开源的Java类文件(只能处理Java代码,但是对应资源文件等是不能起作用的)的压缩器、优化器、混淆器和预校验器。其处理的过程主要分为以下几个步骤&#…

系统移植总结

1:什么是系统移植 1)系统移植是给开发板搭建一个Linux操作系统 2)从官方获取源码,进行配置和编译,生成板子需要的镜像 2:安装tftp服务器的作用 Tftp服务器:是基于UDP协议完成简单的文件传输 作…

mysql sql优化(索引优化)经验漫谈

文章目录1. 当用sql查找是否“存在”场景2. where 条件 in的限制3. updade语句要不要考虑索引的命中情况4. mysql 预编译 多线程5. 函数与索引失效的关系6. mysql隐性类型转换与索引失效的关系7. 联合索引8. 联合索引最左匹配原则9. 回表 索引覆盖 聚簇索引 非聚簇索引10. 前缀…

这下真的是阳了个阳!

实际情况 很不幸,在前天,出现了新冠阳性的症状,随后用抗原检测了下,有阳的条带出现(很浅,弱阳,因为才出现症状),基本上就是确定阳了。 抗原检测不知道今天是第几天了&…

第40篇 网络(十)WebKit初识

导语 WebKit是一个开源的浏览器引擎。Qt中提供了基于WebKit的QtWebKit模块,它包含了一组相关的类。QtWebKit提供了一个Web浏览器引擎,使用它便可以很容易的将万维网(WorldWide Web)中的内容嵌入到Qt应用程序中。与此同时&#xf…

大二Web课程设计——基于HTML+CSS+JavaScript+jquery手表商城购物网站(17页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

无人机集群的分布式协作 VI-SLAM

以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# D2SLAM: Decentralized and Distributed Collaborative Visual-inertial SLAM System for Aerial Swarm 论文地址:https://arxiv.org/abs/2211.01538…

视频怎么转文字?快把这些方法收好

如今短视频让知识传播变得越来越简单,我们可以很轻松的就通过短视频了解到大量的知识要点。但是当我们想要回温知识点的时候,需要重新观看视频,这就有些不太便利。其实我们可以通过将视频转成文字,这样子就容易归纳知识点了。那你…

Jlink commander使用方法(附指令大全)

Jlinkcmd它可以方便用户在非仿真的情况下,hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等,方便大家拥有最高的权限查看在运行中的MCU情况,查找非IDE仿真情况下,MCU运行异常的原因。 目录 驱动安装 …