管理设计篇
分布式锁
配置中心
按运行环境分
按依赖区分
按层次分

-
为什么需要一个变更通知的组件,而不是让配置中心直接推送? 原因是,分布式环境下,服务器太多,推送不太现实,而采用一个 Pub/Sub 的通知服务可以让数据交换经济一些。
-
为什么不直接 Pub 数据过去,还要订阅方反向拉数据? 直接推数据当然可以,但让程序反过来用 API 读配置的好处是,一方面,API 可以校验请求者的权限,另一方面,有时候还是需要调用配置中心的基本 API,比如下载最新的证书之类的。还有就是,服务启动时需要从服务中心拉一份配置下来。
-
配置变更控制器部署在哪里?是在每个服务器上呢,还是在一个中心的地方? 我觉得因为这个事是要变更配置,变更配置又是有很多步骤的,所以这些步骤算是一个事务。为了执行效率更好,事务成功率更大,建议把这个配置变更的控制放在每一台主机上。
-
平台层的配置变更,有的参数是在服务启动的命令行上,这个怎么变更呢? 一般来说,命令行上的参数需要通过 Shell 环境变量做成配置项,然后通过更改系统环境变量,并重启服务达到配置变更。
-
操作系统的配置变更和平台层的配置变更最好模块化掉,就像云服务中的不同尺寸的主机型号一样。 这样有利于维护和减少配置的复杂性。
-
应用服务配置更新的标准化。 因为一个公司的应用由不同的团队完成,所以,可能其配置会因为应用的属性不同而不一样。为了便于管理,最好有统一的配置更新。一般来说,有的应用服务的配置是在配置文件中,有的应用服务的配置是通过调用 Admin API 的方式变更,不同的应用系统完全不一样,你似乎完全没有方法做成统一的。这里给几个方案。
-
可以通过一个开发框架或 SDK 的方式来解决,也就是应用代码找你这个 SDK 来要配置,并通过 observer 模式订阅配置修改的事件,或是直接提供配置变更的 Admin 的 API。这种方式的好处在于在开发期标准化,并可以规范开发;不好的是,耦合语言。
-
通过一个标准应用运维脚本,让应用方自己来提供应用变更时的脚本动作。这种方式虽然通过运维的方式标准化掉配置变更的接口,就可以通过一个配置控制器来统一操作各个应用变更,但是在这个脚本中各个应用方依然使用着各种不同的方式来变更配置。这种方式的好处是不耦合语言,灵活,但对于标准化的建设可能不利,而且使用或者调用脚本是 Bug 很多的东西,容易出问题。
-
或是结合上述两种方案,不使用开发阶段的 SDK 方式嵌入到应用服务中,而是为每个应用服务单独做一个 Agent。这个 Agent 对外以 Admin API 的方式服务,后面则适配应用的配置变更手段,如更新配置文件,或者调用应用的 API 等。这种方式在落地方面是很不错的(这其中是另一种设计模式,后面会讲到)。

浙公网安备 33010602011771号