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

简介:

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

 ●   日志文件生成主目录

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

 ●   当前日志级别

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

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

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 种配置方法,很显然,配置中心是最佳的解决方案,也解决了以上的几个问题,但需要依赖中间件及其高可用性,如果你有其他更好的方式,欢迎留言。


原文发布时间为:2018-10-22

本文作者:R哥 

本文来自云栖社区合作伙伴“Java技术栈”,了解相关信息可以关注“Java技术栈”。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
153 0
|
1月前
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
58 1
|
3月前
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
161 1
|
3月前
|
存储 缓存 NoSQL
【分布式】Redis与Memcache的对比分析
【1月更文挑战第25天】【分布式】Redis与Memcache的对比分析
|
3月前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
28天前
|
NoSQL Java Redis
如何通俗易懂的理解Redis分布式锁
在多线程并发的情况下,我们如何保证一个代码块在同一时间只能由一个线程访问呢?
37 2
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
60 0
|
1月前
|
人工智能 监控 NoSQL
【万字长文 一文搞定】Redis:从新手村到大师殿堂的奥德赛之旅 9种实现分布式锁的全技术指南
【万字长文 一文搞定】Redis:从新手村到大师殿堂的奥德赛之旅 9种实现分布式锁的全技术指南
81 4
|
1月前
|
消息中间件 存储 NoSQL
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
|
1月前
|
NoSQL API Redis
Redis分布式锁实现的三个核心
Redis分布式锁实现的三个核心

热门文章

最新文章