假设有这样一个工程,是这样设计的:

1整个软件、服务被切分为 由若干独立的多道程序(多个进程/微服务);

2 这些多道程序只是“机制mechanism”,而“策略strategy”写在各自用到的配置文件里。

3各策略配置文件由不同人在不同地方写,而机制部分读取,可以是在服务启动前的编译时,也可以是运行中的运行时。

大概有这么几种风格:

1 分布式:配置文件在每个服务的代码路径下,每个服务进程知道配置文件,比如每个文件夹下放给定名字的配置文件。

2 集中式:集中于类似windows“注册表”的地方,集中管理。

3半集中式:类似node工程里各种.XX文件和XX.json文件,集中于1个文件夹内,但各自对应各自的服务,互相独立。

1就是每个独立的软件安装路径下的配置文件。

2 windows注册表的好处是集中管理,查找方便。坏处是,什么注册表蠕变,注册表挂了整个系统瘫痪了,各种问题。

3形如大路货的node工程:

除了几个文件夹之外,和一个readme.md,其他的都是“策略配置文件”。

站在配置文件的消费者:开发人员,每个独立服务编译/运行时角度来说,当然是就近读取,在每个服务根目录下,按给定的名字,这样最好。

站在策略内容的维护者,生产者角度,业务使用者角度来说:当然是集中式好,在一个类似注册表编辑器的界面里,按自己角度划分的树状结构,集中修改数字,增加配置,然后一保存,服务就更新了。

——有点像作战等等对待资源:

弹药、粮食最终是一线各分队,班、排使用掉的,一定要分散、分发下去。不能集中管理在某个大后方仓库,让各班排自己来取。当你真的体恤下情,各班排专注于各自任务,负担已经够重了,要让它们集中聚焦,就不能增加它们的其他负担;

而资源的生产,维护又少不了集中。大田肯定比散落在各处的梯田好管理。集中了才不容易挂一漏万,缺了哪个配置项,应该在某个层级看的很清楚。类似后勤部长。分散下去了,难以生产,难以监测改变. 易于腐烂变质。

因此,如果机制与策略分离,可以参考node,这样设计整个工程:

对于代码和数据的生产者,维护者,相对集中:

代码、机制部分放在node_modules,src这样地方。

配置、策略部分在某个地方比如根目录,半集中地放置在这里。便于编辑,但是和机制部分分离。

而软件在运行时:相对分散:

每个独立进程封装到1个docker容器里,在容器配置文件里,用-v挂入配置文件+用cli参数传入到启动命令,实现策略的注入、链接。

这样,每个进程实际上在运行时还是“就近”获得了配置文件,不用自己关心去哪里取。

利用docker的方式,即实现了个进程运行时的隔离,由实现了配置的分发。

对于那些以函数库形式出现的服务,不表现为独立进程。但参考node工程的方式,还是用独立的配置文件保存在调用者便于取到的地方,比较适合。

当每个函数库独立开发时,test肯要模拟调用者,那么配置文件就要在test文件内。

——总之,处理好集中与分散,让集中和分散各自发挥出威力,才能真正让整个工程在运行时运转自如,而维护又很省力。

分散的配置文件VS集中的注册表的更多相关文章

  1. 【Qt】QSettings读写注册表、配置文件【转】

    简述 一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表.读写配置文件. 关于QSettings的使用前面已经介绍过了,比较详细,见“更多参考 ...

  2. QSettings读写注册表、配置文件

    简述 一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表.读写配置文件. 关于QSettings的使用前面已经介绍过了,比较详细,见" ...

  3. windows的注册表有什么用?

    注册表是什么 注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Windows 3.0推出OLE技术的时候,注册表就已经出现.随后推出的Window ...

  4. Win.ini和注册表的读取写入

    最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中.下面介绍一下Win.ini文件的读写方法和注册表的编程. 先介绍下Win.i ...

  5. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  6. c++ 操作注册表

    1.       注册表简介 注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (Win ...

  7. C++注册表操作

    数据结构 注册表由键(或称"项").子键(子项)和值项构成.一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键.一个值项则是一个键的当前定义,由名称. ...

  8. 注册表(regedit)

    注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息. 打开方式:1.开始>>运行.中 ...

  9. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

随机推荐

  1. mariadb的flashback到底怎么样???防误删可以,但算不上真正的闪回--再看mariadb 10.3的System-Versioned Tables

    mariadb 在10.2.4引入闪回特性,支持DML(INSERT, DELETE, UPDATE)操作的闪回,不支持DDL语句,使用闪回,必须设置binlog_row_image=FULL. 其原 ...

  2. Python之字符编码(一)

    一.了解字符编码的知识储备? 1.计算机基础知识? 计算机中所有的软件文件(包括:操作系统)都存储在硬盘,启动计算机,计算机需要把系统文件都去到内存中. 2.文本编辑器存取文件的原理(nodepad+ ...

  3. 【题解】Luogu P2787 语文1(chin1)- 理理思维

    原题传送门:P2787 语文1(chin1)- 理理思维 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树跑的飞快,但还是没有memset0小姐姐跑得快 操作1:暴力统计 ...

  4. Redis随笔-rename效率问题

    背景 rename是redis中给key重命名命令,rename key newkey的意思就是将key重命名为newkey.大部分文档在介绍rename的时候只将它描述成一个时间复杂度为O(1)的命 ...

  5. Eclipse中ctrl+shift+r与ctrl+shift+t的区别

    eclipse中的两个常用的快捷键可以大大提升查找文件的效率,分别是: ctrl+shift+r : open resource, 打开资源. 它可以打开当前eclipse的工作区中所有(打开的)工程 ...

  6. Educational Codeforces Round 40 (Rated for Div. 2) Solution

    从这里开始 小结 题目列表 Problem A Diagonal Walking Problem B String Typing Problem C Matrix Walk Problem D Fig ...

  7. Codeforces 526F Pudding Monsters - CDQ分治 - 桶排序

    In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...

  8. overture里设置踏板标记

    在学习如何设置踏板标记之前,我们先来了解什么是踏板标记.踏板标记一般是使用在乐谱上,众所周知,钢琴有三个踏板,每个踏板的作用都不一样:右边的踏板称为“延音踏板”,是用来延长琴弦振动的时间,使音延长的效 ...

  9. ODAC(V9.5.15) 学习笔记(三)TOraSession(1)

    1. 连接相关 名称 类型 说明 ConnectDialog 执行连接对话框控件 Connected Boolean 连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触发 ...

  10. Linux rsync 命令学习

    Rsync命令和cp命令很像,但是功能似乎更加复杂点,主要用来备份数据.看了网上一堆介绍的文章,感觉不是很通俗易懂.下面按照我的理解,做一些笔记: 同步方式 之前接触过一些同步软件,例如坚果云.百度云 ...