【180425】统一配置中心

对于配置文件,咱们不陌生,它提供咱们能够动态修改程序运行能力。引用别人的一句话就是:html

系统运行时(runtime)飞行姿态的动态调整mysql

我能够把咱们的工做称之为在快速飞行的飞机上修理零件。咱们人类老是没法掌控和预知一切。对于咱们系统来讲,咱们老是须要预留一些控制线条,以便在咱们须要的时候作出调整,控制系统方向(如灰度控制、限流调整),这对于拥抱变化的互联网行业尤其重要。对于单机版,咱们称之为配置(文件),对于分布式集群系统,咱们称之为配置中心(系统);下面聊聊咱们的配置中心。git

他山之石

演进中的配置

当咱们是一个单机服务的是,咱们的配置一般写在一个文件中的,代码发布的时候,把配置文件和程序推送到机器上去。 github

单机配置文件.png

当随着业务的用户量增长,一般咱们会把咱们的服务进行多机器(集群)部署。这时候,配置的发布就变成了以下: redis

多机器配置.png

行,这样发配置也能接受 业务的急剧扩张,致使单机服务没法满业务需求。这时候须要对单体大服务进行切开,服务走向SOA(微服务化)。 sql

分布式集群部署配置文件.png

这样去部署配置简直是一场噩梦,并且没法作到快速的动态的调整。失去了配置主要意义之一。这时候就须要今天说的统一配置中心。数据库

配置中心之简版

配置中心的特色json

  • 配置的增删改查
  • 不一样环境配置隔离(开发、测试、预发布、灰度/线上)
  • 高性能、高可用性
  • 请求量多、高并发
  • 读多写少

咱们能够设计出以下的简版配置中心 segmentfault

简版配置系统.png

设计说明点:缓存

  • 经过OA系统对每一条配置(每个配置有惟一的配置ID)进行增删改查。
  • 区分不一样环境的配置,每一个环境同一配置ID对应不一样数据库记录。
  • 配置最终以json格式(便于编辑和理解)储存在mysql数据库中。
  • 引入redis集群,作配置的缓存(好比能够设置配置修改后1分钟后生效)
  • 配置对外服务,多机器部署,知足性能须要。
  • 若是有必要,能够引入配置历史修改记录。

不少时候,这样能够基本上知足咱们对配置系统的基本需求,对配置的增删改查,能容忍一段时间的数据不一致性。

这种设计,因为全部的配置都存放在集中式缓存中,这样集中式的缓存也会有他的性能瓶颈。并且,每次配置的访问都须要发起rpc请求(网络请求),所以考虑在客户端引入本地缓存(localCache,例如Ehcache)。

本地缓存能够参考我以前文章:【180409】本地缓存的选择及其原理

配置中心之性能可用性改进

考虑到,减小网络请求的因素,在客户端引入localcache,来解决系统的高可用,高性能、可伸缩性。

本地缓存配置中心.png

相对于初版的改进点是,在客户端引入localcache。开启线程异步调用配置服务,更新本地配置。 这样能够减小rpc调用。

基于数据的CAP原理,该方式只作到了AP,这里会存在数据的一段时间的不一致性,但最终会保证是配置的最终一致性。如何解决这个数据不一致性问题?

配置中心之数据一致性改进

还好,配置一般都只会有一个入口修改,所以能够考虑在配置修改后,通知应用服务清理本地缓存和分布式缓存。这里能够引入mq或ZooKeeper。

配置中心.png

最后经过,推拉相结合的方式,完成数据的一致性。

我的

欢迎关注个人技术博客,咱们一块儿成长一块儿进步。

林湾村龙猫:www.jianshu.com/u/5a327aab7…

简书博客地址
相关文章
相关标签/搜索