应用的配置演化,从硬编码到分布式配置中心

这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

  • ?欢迎点赞 :? 收藏 ⭐留言 ? 如有错误敬请指正,赐人玫瑰,手留余香!
  • ?本文作者:由webmote 原创,首发于 【掘金】
  • ?作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!???

? 序言

每个应用或者服务都会或多或少的接触到配置参数,最简单的应用可能会把配置硬编码到程序代码里,而更复杂的微服务可能需要一个统一的配置中心来发布配置参数,就让我们看看它们的发展历程吧。

? 1.硬编码配置

硬编码就是直接把配置参数写到代码内,虽然硬编码可能看起来不是很完美,但其实它的出现还是非常多的。

比如我们常用的桌面软件,大部分都是硬编码到内置代码,而不需要用户修改任何参数的。

像我们在windows上使用的记事本、画图等,它们内部也许有简单的参数,甚至并没有多余的参数,当然既然没有暴露出什么配置文件,必然会硬编码到系统内的。

有时候我们自己开发一些简单小工具,就仅仅限于内部用,也会简单的硬编码到代码中。

硬编码形式如下:

 SqlConnection conn = new SqlConnection();
 conn.ConnectionString = @"Data Source=.;Integrated Security=true;Initial Catalog=Time";
 conn.Open();
复制代码

? 2.配置文件

随着系统的环境越来越复杂,可能我们需要在不同的环境设置不同的参数,那么最流行的一种配置方式出现了,它就是配置文件。

asp.net core内置了对配置文件的支持,因此使用起来也很方便。 并且通过对延展扩展名文件的监控支持,可以支持不同环境加载不同的配置文件。

这里以appsetting.json为例,看看配置文件是什么样的形式。

"profiles": { "IIS Express": 
{ "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": 
{ "ASPNETCORE_ENVIRONMENT": "Development" }, "nativeDebugging": true }
复制代码

现在流行的是json文件作为配置文件,当然还有更多的文件作为配置,比如经典的ini文件格式,曾经风靡一时的xml文件,现在云原生常用的yaml格式。

languages:
 - Ruby
 - Perl
 - Python 
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 
复制代码

? 3.配置到数据库、远程文件

配置文件还可以存储到数据库或远程文件,这种的存储方式和本地配置文件稍微不同,具有分布式访问的特性。
微服务的配置,如果未能实现配置中心,可以采用这种方式,作为集中式配置管理的一种方式,具有统一配置,独立分发的特性。如果用一些定时拉的方式,甚至可以实现运行时更新的效果。

从网上借一张图,来看看大概数据库的存储。

image.png

? 4. Apollo配置中心

作为微服务配置中心的佼佼者,携程的Apollo,架构复杂,使用简单。其架构方式如下:

image.png

其拥有丰富的功能和可配置的界面,可谓开箱即用型,当然其部署作为配置中心来看是重量级的。

  • 推配置
  • 拉配置
  • 灰度
  • 版本

? 5. 云原生配置

提到云原生的配置,那肯定是K8s的configmap资源方式,通过配置映射文件,可以在每个容器启动时加载到容器的环境变量内,以供使用。

虽然其底层并不支持热更新,但利用K8s自身的实例加载功能,也算是间接的实现了热更新。

? 6. 小结

嗯,这章有点水了,后面再总结时补充进来。

例行小结,理性看待!

结的是啥啊,结的是我想你点赞而不可得的寂寞。???

?都看到这了,还在乎点个赞吗?

?都点赞了,还在乎一个收藏吗?

?都收藏了,还在乎一个评论吗?

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享