配置中心概述

这篇文章是微服务化改造系列的第三篇,主题是配置中心。上一篇我们谈到服务注册中心,即通过提供某种注册和发现的机制,解决服务互通的问题。那么问题来了,一个服务如何知道服务注册中心的地址呢?这就涉及到服务配置了。我们知道,大至一个PaaS平台,小至一个缓存框架,一般都依赖于特定的配置以正常提供服务,微服务也不例外。

配置分类

按配置的来源划分,主要有源代码(俗称hard-code),文件,数据库和远程调用。

按配置的适用环境划分,可分为开发环境,测试环境,预发布环境,生产环境等。

按配置的集成阶段划分,可分为编译时,打包时和运行时。编译时,最常见的有两种,一是源代码级的配置,二是把配置文件和源代码一起提交到代码仓库中。打包时,即在应用打包阶段通过某种方式将配置(一般是文件形式)打入最终的应用包中。运行时,是指应用启动前并不知道具体的配置,而是在启动时,先从本地或者远程获取配置,然后再正常启动。

按配置的加载方式划分,可分为单次加载型配置和动态加载型配置。

演变

随着业务复杂度的上升和技术架构的演变,对应用的配置方式也提出了越来越高的要求。一个典型的演变过程往往是这样的,起初所有配置跟源代码一起放在代码仓库中;之后出于安全性的考虑,将配置文件从代码仓库中分离出来,或者放在CI服务器上通过打包脚本打入应用包中,或者直接放到运行应用的服务器的特定目录下,剩下的非文件形式的关键配置则存入数据库中。上述这种方式,在单体应用阶段非常常见,也往往可以运行的很好,但到了微服务阶段,面对爆发式增长的应用数量和服务器数量,就显得无能为力了。这时,就轮到配置中心大显身手了。那什么是配置中心?简单来说,就是一种统一管理各种应用配置的基础服务组件。

可选框架

选型一个合格的配置中心,至少需要满足如下4个核心需求:

非开发环境下应用配置的保密性,避免将关键配置写入源代码

不同部署环境下应用配置的隔离性,比如非生产环境的配置不能用于生产环境

同一部署环境下的服务器应用配置的一致性,即所有服务器使用同一份配置

分布式环境下应用配置的可管理性,即提供远程管理配置的能力

现在开源社区主流的配置中心框架有Spring Cloud Config和disconf,两者都满足了上述4个核心需求,但又有所区别。

Spring Cloud Config

Spring Cloud Config可以说是一个为Spring量身定做的轻量级配置中心,巧妙的将应用运行环境映射为profile,应用版本映射为label。在服务端,基于特定的外部系统(Git、文件系统或者Vault)存储和管理应用配置;在客户端,利用强大的Spring配置系统,在运行时加载应用配置。

disconf

disconf是前百度资深研发工程师廖绮绮的开源作品。在服务端,提供了完善的操作界面管理各种运行环境,应用和配置文件;在客户端,深度集成Spring,通过Spring AOP实现应用配置的自动加载和刷新。

方案选型

不管是Spring Cloud Config还是disconf,默认提供的客户端都深度绑定了Spring框架,这对非Spring应用而言无疑增加了集成成本,即便它们都提供了获取应用配置的API。最终我们还是选用了微服务化改造之前自研的Matrix作为配置中心,一方面,可以保持新老系统使用同一套配置服务,降低维护成本,另一方面,在满足4个核心需求的前提下,Matrix还提供了一些独有的能力。

分离配置文件和配置项。对于配置文件,通过各类配套打包插件(sbt, maven, gradle),在打包时将配置文件打入应用包中,同时最小化对CI的侵入性;对于配置项,提供SDK,帮助应用从服务端获取配置项,同时支持简单的缓存机制。

增加应用版本维度,即对于同一应用,可以在服务端针对不同版本或版本区间维护不同的应用配置。

应用配置的版本化支持,类似于Git,可以将任一应用配置回退到任一历史版本。

进一步信息可参考我之前写的Matrix设计文档。

Matrix架构图

下一篇我将给大家介绍微服务架构的另一个基础组件——授权中心,敬请期待!

参考

微服务配置中心是干啥的_微服务化改造系列之三:配置中心相关推荐

  1. 微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)

    本文接之前的<Spring Cloud构建微服务架构(四)分布式配置中心>,继续来说说Spring Cloud Config的使用. 先来回顾一下,在前文中我们完成了什么: 构建了conf ...

  2. 微服务配置中心是干啥的_微服务之配置中心ConfigKeeper

    在微服务架构中,配置中心是必不可少的基础服务.ConfigKeeper已开源,本文将深度分析配置中心的核心内容,错过「Spring Cloud中国社区北京沙龙-2018.10.28 」的同学将从本篇文 ...

  3. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  4. 从0开始的微服务架构:(一)重识微服务架构

    2019独角兽企业重金招聘Python工程师标准>>> 导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微 ...

  5. JAVA Cloud微服务项目实战课程 SpringBoot 2.x +SpringCloud 微服务课程

    课程目录 第1章 课程介绍 课程导学和学习建议 1-1 SpringCloud导学 1-2 获取源码说明 1-3 提问建议 1-4 点餐项目演示说明 第2章 微服务介绍 什么是微服务, 单体架构优缺点 ...

  6. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  7. SpringCloud微服务架构学习(二)常见的微服务架构

    SpringCloud微服务架构学习(二)常见的微服务架构 1.Dubbo 阿里开源微服务框架 官网地址:http://dubbo.apache.org/en-us/ 简介: Dubbo是阿里巴巴SO ...

  8. Re:从0开始的微服务架构:(一)重识微服务架构

    导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上 ...

  9. 初学者学习微服务 需要了解哪些知识?该如何入门微服务?有哪些优质的教程可以学习?

    前面一章节,我们学习了常用的网络通信协议,以及各自的优缺点,并做了一个较为全面的总结.这一章节,我们就来对微服务入门基础做一个准备,学习微服务,我们应该从哪些方面去学习.终于有人把tcp.http.r ...

最新文章

  1. 【error】RuntimeError: size mismatch与全连接fc层
  2. crt python_SecureCRT Python
  3. futuretask java 并发请求_图文并茂理解 Java 多线程
  4. GIS叠加分析功能学习
  5. linux 环境变量 export PATH和PATH有什么区别?
  6. kylin的安装和启动
  7. 自然语言处理中的自注意力机制(Self-Attention Mechanism)
  8. sharding jdbc根据年月分表
  9. 按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...
  10. matlab排版形式是什么样子,工作型PPT,图文排版的4种常见样式
  11. 华三配置telnet
  12. Swift - 图片去色 图片灰色显示
  13. 欧美准入标准亚马逊现在正在严查UL认证UL1598认证标准
  14. 现场总线与计算机网络的最大区别,现场总线与局域网的区别是什么
  15. IP地址的定义及分类
  16. 2018APP推广计划方案(完整版)
  17. [java基础入门]java期末常考题。定义一个父类person,该类中有两个私有的属性姓名name和age,实现两个属性的封装 定义构造等等来初始化成员变量name和age,在定义显示show方法将
  18. 做自媒体短视频是如何赚钱的呢?
  19. 老刘说NLP:这几年的NLP历程回顾,以及关于NLP(知识图谱等)落地的思考
  20. lex生成lex.yy.c代码流程解析

热门文章

  1. iOS中的三大定时器
  2. hastable与dictionary
  3. ubuntu 用户管理 adduser vs useradd
  4. windows桌面的“我的电脑”“IE”等消失的解决方法
  5. Shell脚本实现SSH免密登录及批量配置管理
  6. Linux系统修改远程连接22端口
  7. 老旗舰华为能用上鸿蒙吗,荣耀手机能升级鸿蒙吗?五款旗舰优先,老荣耀机主或有惊喜...
  8. 【SQL】通过rowid查找及删除重复记录
  9. 未找到与约束ContractName,无法打开项目的解决方案
  10. 如何使用CORS解决跨域问题