分布式系统中处理参数配置的 4 种方案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一个系统中包含有各种各样的配置信息,如一个日志文件需要配置以下几个信息。

一个系统中包含有各种各样的配置信息,如一个日志文件需要配置以下几个信息。


日志文件生成主目录

日志文件名称,不同的日志级别对应不同的文件

当前日志级别

还有其他各种业务参数、系统参数等,大多单一系统是直接把这些配置写死在配置文件中,当部署到测试、生产环境就再修改下配置文件,这样很容易出错,也不能灵活修改。还有就是系统变成分布式系统后,子系统越来越多,你要维护这些配置就变得越来越困难。


我觉得至少要能解决以下几个问题才能算优秀!


1)能在线灵活修改配置


2)能在线动态刷新配置


3)能根据不同环境配置


4)能统一管理维护配置


那么如何灵活维护这些配置呢?我给大家总结了一下几类方法,根据不同的应用场大家参考一下。


1、数据库法

把所有参数存储到数据库,系统启动的时候加载到内存。


这种实现方式比较简单,但需要占用数据库资源,系统简单压力较小时可以选用此种方式。


2、打包处理法

利用 Maven 的 maven-resources-plugin 插件,然后根据不同的环境(Profile)提供不同环境的配置文件,这样,不同环境的配置信息在打包阶段就决定好了。


这样只能解决了不同操作系统上面的配置,不能灵活动态修改,每次更新只能重新打包或者在线修改配置文件,而且信息也难于同步,如果项目少还好,项目多起来,配置还要经常变动,这样变得异常烦琐。


3、环境变量法

可以把属性值设置到环境变量中,然后读取后设置到 Java 系统属性中。这种可以实现区分不同环境的目的,但仍然不能动态更新配置,而且配置和维护环境变量相当麻烦,并且在分布式系统中更是个十分头疼的问题。

// 读取环境变量
java.lang.System#getenv(java.lang.String)
// 设置系统属性
java.lang.System#setProperty

这种方法,一些全局的系统配置,如日志、缓存、临时目录等可以参考,主流日志系统都支持从 system properties 中读取配置。其他一些配置,不建议存储在环境变量中。


4、配置中心法

1)目前大多数分布式配置中心都是基于 Zookeeper 来实现的,Spring Cloud 有自己的配置中心组件,它们都支持在线动态更新和刷新配置。


2)直接把配置存放在数据库,如果系统并发小的或者管理类系统的话可以参考,对于高并发应用不建议用数据库做配置中心,毕竟它会带来访问压力,而且实现动态更新配置也比较复杂。


总结

这是我们目前应用的 4 种配置方法,很显然,配置中心是最佳的解决方案,也解决了以上的几个问题,但需要依赖中间件及其高可用性,如果你有其他更好的方式,欢迎留言。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
16天前
|
NoSQL 算法 关系型数据库
分布式 ID 详解 ( 5大分布式 ID 生成方案 )
本文详解分布式全局唯一ID及其5种实现方案,关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式 ID 详解 ( 5大分布式 ID 生成方案 )
|
24天前
|
存储 缓存 NoSQL
分布式架构下 Session 共享的方案
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求、系统架构和性能要求等因素,选择合适的 Session 共享方案。同时,还需要不断地进行优化和调整,以确保系统的稳定性和可靠性。
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
45 1
|
1月前
|
SQL NoSQL 安全
分布式环境的分布式锁 - Redlock方案
【10月更文挑战第2天】Redlock方案是一种分布式锁实现,通过在多个独立的Redis实例上加锁来提高容错性和可靠性。客户端需从大多数节点成功加锁且总耗时小于锁的过期时间,才能视为加锁成功。然而,该方案受到分布式专家Martin的质疑,指出其在特定异常情况下(如网络延迟、进程暂停、时钟偏移)可能导致锁失效,影响系统的正确性。Martin建议采用fencing token方案,以确保分布式锁的正确性和安全性。
41 0
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
46 0
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
87 0
|
3月前
|
Java 测试技术 Spring
分布式之配置中心
分布式之配置中心
50 1
|
3月前
|
存储 运维 安全
多云网络部署存在挑战,F5分布式云应用简化方案解读
多云网络部署存在挑战,F5分布式云应用简化方案解读
49 0
|
4月前
|
消息中间件 编译器 C++
分布式篇问题之TCC方案中的Try阶段主要问题如何解决
分布式篇问题之TCC方案中的Try阶段主要问题如何解决

热门文章

最新文章