美团是数据驱动的技术公司,非常重视使用数据的效率。为了达到这个目标,我们将数据以开放平台的形式开放给需求方。例如,帮助需求方开发报表的报表开放平台,帮助需求方获取数据的自助查询平台,让需求方参与数据建设的ETL开放平台和调度管理服务。在这些开放平台上,需求方填写必要的配置,平台负责根据这些配置产生需要的报表,导出数据,或者产生ETL流程并通过调度有序执行。通过这种方式,简化用户使用数据的流程,提高用户使用数据的效率。
开放平台的使用导致产生了大量的,不同类型的配置。起初,每个服务独立保存和管理自己的配置。随着开放平台的发展,与开放力度的增加,开放平台对配置的管理遇到了各种各样的问题。主要体现在
针对遇到的问题,我们首先详细的分析了需求:
以上需求为必须满足的需求。为了能够更方便的使用,还希望该解决方案能够在配置审核通过时,通知使用该配置的服务,使其知晓该变更。
为了满足上述需求,我们决定开发定制的统一集中管理配置的配置管理服务,命名为ConfHub,意为“配置的中心枢纽”。
集中管理配置时,不同应用之间的隔离就显得非常重要。同时,应用对配置也有分类需求。所以,需要对配置进行规划。
规划的基本思路是,首先,把配置按照应用进行分类。每个配置属于一个应用,每个应用下,可以有很多配置。在应用下设置命名空间,用来满足应用内的配置分类需求。规划方案如下图:
这种配置规划的方式避免了配置冲突。
版本管理可以带来很多好处,比如
最基本的版本管理如下图
这种基本的版本管理方案可以存储配置的历史变更。但实际使用中,并不能满足需求。
在实际的配置使用时,配置需要最终进入生产环境,如报表开发平台的配置产生报表供分析人员使用,ETL开放平台的配置加入调度定时处理数据等。这些生产环境的配置的改动需要经过数据组审核。但在开发过程中,配置需要不停的变更。所以希望版本管理能支持在既不影响线上实际使用的配置的前提下,能够随意修改测试使用的配置。为了解决这种需求,我们对版本管理的逻辑进行了修改。如下图所示
在用户需要修改配置时,在测试环境版本中增加新的版本。测试时,使用最新的测试环境版本的配置进行测试。当用户需要更新生产环境中使用的配置时,向数据组提交上线申请,系统会自动的将最新的测试环境版本和最新的生产环境版本的配置进行对比,并将对比结果发给相应负责人审核。审核通过的配置会被添加到生产环境版本中。
通过这种版本管理方法,既保证了生产环境版本是严格受控的,又能保证用户可以自由的测试。
为了保证生产环境运行的配置的质量,生产环境的配置的变更都必须进行审核。在这一点上,我们使用“人工审核,系统辅助”的方案。人工审核,确保配置质量,系统辅助,尽量减少审核人的工作量。
审核过程流程图如下:
为了提高审核的效率,减少人工审核工作量,用户在开放平台,即配置的使用方,提交配置变更申请。配置使用方会首先对配置进行基本校验,校验通过的配置变更才会提交到配置管理系统。
目前,ConfHub满足了现有开放平台的配置管理需求,有效的支持各个开放平台的发展。
后续,ConfHub主要发展方向是
开放的方式不止有开放平台一种,而各种不同的开放方式,都有需要管理的配置。管理其他开放方式的配置,也是ConfHub的目标。